組織モードの構造をドットソースに変換する


12

ツリーのような構造からのグラフの高速生成は、他の人間の共有または美化を必要とする組織モードでメモを作成する場合に非常に役立ちます。

動的なdot / graphvizブロックを手動で作成する以外に、これを行う方法は見つかりませんでした。

構造化ツリーから単純な有向グラフへの変換は、かなり簡単なはずです。

組織モードツリー(選択した領域)をトラバースし、ツリー構造(およびオプションで構造のコンテンツからの情報)をドットグラフに変換する簡単な方法を探しています。

これを思いついたのは私が一番ではないでしょう。これは解決されましたか?

入力

* la1
** la2
*** la3
*** la4
** la5

おそらく、可変の組織からドットへのプリアンブル

digraph {
   rankdir=TB;
   splines=true;
   node [shape=box];

出力は組織モードの動的ブロックのようになります

#+BEGIN_SRC dot :file out.png :cmdline -Kdot -Tpng
(contents of org-to-dot-preamble)

la1 -> la2
la1 -> la5
la2 -> la3
la2 -> la4
}
#+END_SRC

より高度なバージョンでは、最初にすべてのノードを宣言し、いくつかのフォーマットを可能にします。

入力

* la1
  firstline
  secondline
** la2
   firstline
   secondline
*** la3
*** la4
    firstline
** la5

いくつかのフォーマット変数

org-to-dot-shape
org-to-dot-font

出力

#+BEGIN_SRC dot :file out.png :cmdline -Kdot -Tpng
(contents of org-to-dot-preamble)

la1 [shape=Mrecord, label="{firstline|secondline}", fontname = "helvetica"]
la2 [shape=Mrecord, label="{firstline|secondline}", fontname = "helvetica"]
la3 [shape=Mrecord, label="{firstline|secondline}", fontname = "helvetica"]
la4 [shape=Mrecord, label="{firstline|secondline}", fontname = "helvetica"]
la5 [shape=Mrecord, label="{firstline|secondline}", fontname = "helvetica"]

la1 -> la2
la1 -> la5
la2 -> la3
la2 -> la4
}
#+END_SRC

モックアップされた結果の組織モードバッファーのスクリーンショット


非常に興味深い質問です。変換コードは、別の組織モードバッファーのドットグラフを作成しますか、それとも独自のバッファーを作成しますか?クールなアイデア!
Melioratus

はい、TikZがLaTeX文書でどのようにレンダリングされるかは、役に立つでしょう。
Emacsユーザー

@Melioratus:選択した領域を使用して、結果のドットコードをキルリングに配置するか、ポイントに挿入するかを考えていました。
Werner

回答:


4

以下は、org-elementAPIを使用してバッファの見出しを解析する実用的な例です。

* la1
** la2
*** la3
*** la4
** la5
**  Org element API test

#+name: lista
#+begin_src elisp
  (org-element-map (org-element-parse-buffer 'headline )
      'headline
    (lambda(hl)
      (let ((parent (org-element-property :parent hl )))
        (and (eq (org-element-type parent) 'headline)
             (list (org-element-property :title parent) (org-element-property :title hl))))))

#+end_src

#+RESULTS: lista
| la1 | la2                  |
| la2 | la3                  |
| la2 | la4                  |
| la1 | la5                  |
| la1 | Org element API test |

#+name: make-dot
#+BEGIN_SRC emacs-lisp :var table=lista :results output :exports none
  (mapcar #'(lambda (x)
                (princ (format "\"%s\" -> \"%s\";\n" (first x) (second x))))
          table)
#+END_SRC

#+RESULTS: make-dot
: "la1" -> "la2";
: "la2" -> "la3";
: "la2" -> "la4";
: "la1" -> "la5";
: "la1" -> "Org element API test";

#+BEGIN_SRC dot :file dependencias.pdf :cmdline -Tpdf :var input=make-dot :exports results
digraph {
   rankdir=TB;
   splines=true;
   node [shape=box];
   $input
  }
#+END_SRC

#+CAPTION: Dependency diagram
#+RESULTS:
[[file:dependencias.pdf]]

これはいくつかのステップで機能します。最初にelispブロックorg-element-parse-bufferがすべての見出しを取得するために使用し、親のタイトルと見出しタイトルのリストを抽出します。

次に、別のソースブロックがこのリストをドット構文に変換します。

3番目のドットソースブロックには、DOTラッピングが含まれ、生成された関係が含まれます。

化粧品の機能強化:テスト自体のセクションを除外します。このセクションにタグを追加し、最初のブロックでタグでフィルターすることができます。


素晴らしい!これは素晴らしい!
RUserPassingBy 2015年

3

http://pages.sachachua.com/evil-plans/の下部からコードの一部を再利用できる場合があります。私は基本的に、org-map-entriesを使用して見出しを調べます。私は厳密なツリーの代わりに有向グラフを持っているので、単純な正規表現検索を使用して、人にやさしいテキストからリンク構造を解析します。ツリーを操作するだけの場合は、見出しから直接ツリー構造を作成できます。その後は、適切なgraphviz構文を生成するだけです。org-babelは、それを生成してPNGまたはSVGに変換します。お役に立てば幸いです。


これは素晴らしい組織ファイルであり、いくつかの素晴らしいグラフです。
db48x 2015年

3

ドットではありませんが、急いでいる場合は、以下が参考になるでしょう。

org-plus-contrib組織モードのドキュメントからマインドマップを作成するには、FreeMind.appが必要です。

org-plus-contribによって呼び出される追加のorg-modeパッケージをインストールしますM-x package-list-packages

おそらく追加する必要があるかもしれません

(require 'ox-freemind)

私たちの.emacsに。

その後、我々はによって* .mmファイルをFreeMindに私たちの組織モードのファイルをエクスポートすることができC-c C-e f forg-freemind-export-to-freemind

Freemind.appから* .mmを開いて、出来上がり!

org-to-mm-mouse-over

マウスを合わせると、ノードの内容が表示されます。


1

更新:2019

org-mind-mapというパッケージがあります

https://github.com/theodorewiles/org-mind-map

ドット言語を使用して、org-modeファイルからgraphviz有向グラフを作成します。

org-mind-mapをインストールしたら、orgファイルC-c C-eをエクスポートして、「Create a graph&dot file」を選択しますg d

これにより、組織ファイルからドットファイルが作成されます。デフォルトでは、org-mind-mapパッケージからの視覚的なカスタマイズが含まれます。これらを編集するか、関連パーツを新しいドットファイルにコピーできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.