Convertir la structure en mode organisationnel en source de points

12

La génération rapide de graphiques à partir d'une structure arborescente peut être très utile lors de la prise de notes en mode organisation qui nécessitent un partage et / ou une embellissement pour d'autres humains.

Je ne pouvais pas trouver d'autre moyen que de créer manuellement un bloc point / graphique dynamique.

Une traduction d'un arbre structuré en un graphique dirigé simple devrait être assez simple.

Je cherche un moyen simple de parcourir une arborescence en mode organisationnel (une région sélectionnée) et de traduire la structure arborescente (et éventuellement des informations du contenu de la structure) en un graphique à points.

Je ne peux pas être le premier à avoir pensé à ça. Cela a-t-il été résolu?

contribution

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

et peut-être un préambule org-to-dot variable

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

la sortie ressemblerait à un bloc dynamique en mode org

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

Une version plus avancée déclarerait d'abord tous les nœuds et permettrait une mise en forme.

contribution

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

Quelques variables de formatage

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

production

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

capture d'écran à partir d'un tampon en mode org du résultat maquette

Werner
la source
Question très intéressante! Le code de conversion créerait-il un graphique à points d'un autre tampon en mode organisation ou son propre tampon? Idée sympa!
Melioratus
Oui, ce serait utile, une sorte de rendu de TikZ dans les documents LaTeX.
Emacs User
@Melioratus: Je pensais simplement utiliser la région sélectionnée et placer le code de point résultant dans l'anneau de destruction ou simplement l'insérer au point.
Werner

Réponses:

4

Voici un exemple de travail qui utilise l' org-elementAPI pour analyser les en-têtes de tampon:

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

Cela fonctionne en plusieurs étapes: tout d'abord, un bloc elisp utilise org-element-parse-bufferpour obtenir tous les titres et extraire une liste du titre du parent et du titre du titre.

Ensuite, un autre bloc source transforme cette liste en syntaxe à points.

Un troisième bloc source de points contient l'encapsulation DOT et inclut les relations générées.

Améliorations cosmétiques: filtrer la section pour le test lui-même; vous pouvez ajouter une balise à cette section et filtrer par balise dans le premier bloc.

Juancho
la source
Fantastique! C'est bien!
RUserPassingPar
3

Vous pourrez peut-être réutiliser une partie du code à partir du bas de http://pages.sachachua.com/evil-plans/ . J'utilise essentiellement les entrées org-map pour parcourir mes rubriques. Comme j'ai un graphique dirigé au lieu d'un arbre strict, j'utilise des recherches d'expressions régulières simples pour analyser la structure des liens à partir d'un texte convivial. Si vous travaillez uniquement avec un arbre, vous pouvez créer votre arborescence directement à partir des titres. Après cela, il s'agit de générer la syntaxe graphviz appropriée, et org-babel peut gérer la production et la conversion en PNG ou SVG. J'espère que cela pourra aider!

Sacha Chua
la source
C'est un excellent fichier org et de beaux graphiques.
db48x
3

Ce n'est pas un point, mais si vous êtes pressé, les suivis pourraient être utiles.

Nous avons besoin de org-plus-contribFreeMind.app pour produire une carte mentale à partir de documents en mode organisation.

Installez un package en mode organisation supplémentaire appelé org-plus-contribpar M-x package-list-packages.

Peut-être faudrait-il ajouter

(require 'ox-freemind)

à nos .emacs.

Ensuite , nous pouvons exporter notre fichier org-mode pour Freemind fichier * .mm par C-c C-e f f, org-freemind-export-to-freemind.

Maintenant, nous ouvrons * .mm de Freemind.app, et le tour est joué!

org-to-mm-mouse-over

Passez la souris pour voir le contenu des nœuds.

RUserPassingBy
la source
1

MISE À JOUR: 2019

Il existe un package appelé org-mind-map

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

Il crée des graphiques dirigés graphviz à partir de fichiers en mode organisation en utilisant le langage à points.

Après avoir installé org-mind-map, vous pouvez exporter un fichier org C-c C-eet sélectionner "Créer un fichier graphique & dot"g d

Cela créera un fichier dot à partir de votre fichier org. Il contiendra par défaut certaines personnalisations visuelles du package org-mind-map. Vous pouvez les éditer ou copier les parties pertinentes dans un nouveau fichier de points.

Ceamore Cash
la source