Быстрая генерация графиков из древовидной структуры может быть очень полезна при создании заметок в режиме org, которые требуют публикации и / или украшения для других людей.
Я не мог найти никакого способа сделать это, кроме как вручную создать динамический блок dot / graphviz.
Перевод из структурированного дерева в простой ориентированный граф должен быть довольно простым.
Я ищу простой способ пройти по дереву в орг-режиме (выделенная область) и перевести древовидную структуру (и, возможно, некоторую информацию из содержимого структуры) в точечный график.
Я не могу быть первым, кто придумал это. Это было решено?
вход
* la1
** la2
*** la3
*** la4
** la5
и, возможно, переменная преамбула org-to-dot
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
Ответы:
Вот рабочий пример, который использует
org-element
API для анализа заголовков буфера:Это работает в несколько этапов: сначала блок elisp использует
org-element-parse-buffer
для получения всех заголовков и извлечения списка заголовка родителя и заголовка заголовка.Затем другой исходный блок преобразует этот список в точечный синтаксис.
Третий точечный исходный блок содержит DOT-обертку и содержит сгенерированные отношения.
Косметические улучшения: отфильтруйте раздел для самого теста; Вы можете добавить тег в этот раздел и отфильтровать по тегу в первом блоке.
источник
Возможно, вам удастся повторно использовать код из нижней части http://pages.sachachua.com/evil-plans/ . Я в основном использую org-map-entry для прохождения моих заголовков. Поскольку у меня есть строгий граф вместо строгого дерева, я использую простой поиск по регулярному выражению, чтобы проанализировать структуру ссылок из удобного для человека текста. Если вы просто работаете с деревом, вы можете создать свою древовидную структуру непосредственно из заголовков. После этого нужно создать соответствующий синтаксис graphviz, и org-babel может обработать его и преобразовать в PNG или SVG. Надеюсь, это поможет!
источник
Это не точка, но если вы спешите, может помочь следующее.
Нам нужен
org-plus-contrib
FreeMind.app для создания карты разума из документов в режиме org.Установка дополнительного орга-режим пакета под названием
org-plus-contrib
путиM-x package-list-packages
.Возможно, нам нужно добавить
к нашим .emacs.
Тогда мы можем экспортировать наш файл орг-режима в Freemind * .mm файл по
C-c C-e f f
,org-freemind-export-to-freemind
.Теперь мы открываем * .mm из Freemind.app, и вуаля!
Наведите курсор мыши, чтобы увидеть содержимое узлов.
источник
ОБНОВЛЕНИЕ: 2019
Существует пакет под названием org-mind-map
https://github.com/theodorewiles/org-mind-map
Он создает граф-ориентированные графы из файлов в режиме org, используя язык точек.
После установки org-mind-map вы можете экспортировать файл org
C-c C-e
и выбрать «Создать файл графика и точки».g d
Это создаст файл точек из вашего файла org. Он будет содержать некоторые визуальные настройки из пакета org-mind-map по умолчанию. Вы можете отредактировать их или скопировать соответствующие части в новый файл точек.
источник