Konvertieren Sie die Organisationsmodusstruktur in eine Punktquelle

11

Die schnelle Erstellung von Diagrammen aus einer baumartigen Struktur kann sehr nützlich sein, wenn Sie im Organisationsmodus Notizen machen, die für andere Menschen geteilt und / oder verschönert werden müssen.

Ich konnte keine andere Möglichkeit finden, als manuell einen dynamischen Punkt- / Graphviz-Block zu erstellen.

Eine Übersetzung von einem strukturierten Baum in einen einfachen gerichteten Graphen sollte ziemlich einfach sein.

Ich suche nach einer einfachen Möglichkeit, einen Baum im Organisationsmodus (eine ausgewählte Region) zu durchlaufen und die Baumstruktur (und optional einige Informationen aus dem Inhalt der Struktur) in ein Punktdiagramm zu übersetzen.

Ich kann unmöglich der Erste sein, der sich das ausgedacht hat. Wurde das gelöst?

Eingang

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

und vielleicht eine variable Org-zu-Punkt-Präambel

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

Die Ausgabe würde wie ein dynamischer Block im Organisationsmodus aussehen

#+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

Eine fortgeschrittenere Version würde zuerst alle Knoten deklarieren und eine gewisse Formatierung zulassen.

Eingang

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

Einige Formatierungsvariablen

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

Ausgabe

#+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

Screenshot aus einem Organisationsmodus-Puffer des nachgebildeten Ergebnisses

Werner
quelle
Sehr interessante Frage! Würde der Konvertierungscode ein Punktdiagramm eines anderen Org-Modus-Puffers oder eines eigenen Puffers erstellen? Tolle Idee!
Melioratus
Ja, es wäre nützlich, wie TikZ in LaTeX-Dokumenten rendert.
Emacs User
@Melioratus: Ich dachte nur daran, die ausgewählte Region zu verwenden und entweder den resultierenden Punktcode in den Kill-Ring zu platzieren oder ihn einfach an einer Stelle einzufügen.
Werner

Antworten:

3

Hier ist ein Arbeitsbeispiel, das org-elementAPI verwendet, um die Pufferüberschriften zu analysieren:

* 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]]

Dies funktioniert in mehreren Schritten: Zuerst werden mit einem Elisp-Block org-element-parse-bufferalle Überschriften abgerufen und eine Liste mit dem Titel des Elternteils und dem Titel der Überschrift extrahiert.

Dann wandelt ein anderer Quellblock diese Liste in Punktsyntax um.

Ein dritter Punktquellenblock enthält die DOT-Umhüllung und enthält die generierten Beziehungen.

Kosmetische Verbesserungen: Filtern Sie den Abschnitt für den Test selbst heraus. Sie können diesem Abschnitt ein Tag hinzufügen und im ersten Block nach Tag herausfiltern.

Juancho
quelle
Fantastisch! Das ist toll!
RUserPassingBy
3

Möglicherweise können Sie einen Teil des Codes am Ende von http://pages.sachachua.com/evil-plans/ wiederverwenden . Grundsätzlich verwende ich Org-Map-Einträge, um meine Überschriften durchzugehen. Da ich anstelle eines strengen Baums ein gerichtetes Diagramm habe, verwende ich einfache Suchen nach regulären Ausdrücken, um die Linkstruktur aus menschenfreundlichem Text zu analysieren. Wenn Sie nur mit einem Baum arbeiten, können Sie Ihre Baumstruktur direkt aus den Überschriften erstellen. Danach geht es darum, die entsprechende Graphviz-Syntax zu generieren, und org-babel kann diese erstellen und in ein PNG oder SVG konvertieren. Ich hoffe, das hilft!

Sacha Chua
quelle
Das ist eine großartige Organisationsdatei und einige schöne Grafiken.
db48x
3

Es ist kein Punkt, aber wenn Sie es eilig haben, kann Folgendes hilfreich sein.

Wir brauchen org-plus-contribund FreeMind.app, um eine Mindmap aus Dokumenten im Organisationsmodus zu erstellen.

Installieren Sie ein zusätzliches Paket im Organisationsmodus, das org-plus-contribvon aufgerufen wird M-x package-list-packages.

Vielleicht müssen wir hinzufügen

(require 'ox-freemind)

zu unseren .emacs.

Dann können wir unsere org-mode Datei in die Freemind * .mm Datei exportieren von C-c C-e f f, org-freemind-export-to-freemind.

Jetzt öffnen wir * .mm von Freemind.app und voila!

org-to-mm-mouse-over

Fahren Sie mit der Maus über den Inhalt der Knoten.

  • Vorsicht: Der Freemind-Export enthält alte Informationen zum Org <8.0-Handbuch
RUserPassingBy
quelle
1

UPDATE: 2019

Es gibt ein Paket namens org-mind-map

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

Es erstellt graphviz-gerichtete Diagramme aus Dateien im Organisationsmodus unter Verwendung der Punktsprache.

Nach der Installation von org-mind-map können Sie eine org-Datei exportieren C-c C-eund "Grafik- und Punktedatei erstellen" auswählen.g d

Dadurch wird eine Punktdatei aus Ihrer Organisationsdatei erstellt. Es enthält standardmäßig einige visuelle Anpassungen aus dem Paket org-mind-map. Sie können diese bearbeiten oder die relevanten Teile in eine neue Punktdatei kopieren.

Ceamore Cash
quelle