조직 모드 구조를 도트 소스로 변환


12

트리와 같은 구조에서 빠른 그래프 생성은 다른 사람과 공유 및 / 또는 미화가 필요한 조직 모드에서 메모를 작성할 때 매우 유용 할 수 있습니다.

동적 점 / graphviz 블록을 수동으로 만드는 것 이외의 방법으로는 찾을 수 없습니다.

구조화 된 트리에서 간단한 직접 그래프로의 변환은 매우 간단해야합니다.

조직 모드 트리 (선택한 영역)를 통과하고 트리 구조 (및 선택적으로 구조 내용의 일부 정보)를 도트 그래프로 변환하는 간단한 방법을 찾고 있습니다.

나는 이것을 처음으로 생각해 낼 수 없다. 이것이 해결 되었습니까?

입력

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

그리고 아마도 org-to-dot-preamble 변수

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

네, LaTeX 문서에서 TikZ가 렌더링되는 방식에 유용합니다.
Emacs User

@Melioratus : 선택한 영역을 사용하고 결과 도트 코드를 킬 링에 배치하거나 포인트에 삽입하려고 생각했습니다.
베르너

답변:


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이 모든 헤드 라인을 가져오고 부모의 제목 및 제목 제목 목록을 추출합니다.

그런 다음 다른 소스 블록은이 목록을 도트 구문으로 변환합니다.

세 번째 도트 소스 블록에는 DOT 래핑이 포함되고 생성 된 관계가 포함됩니다.

외관 개선 : 테스트 섹션을 필터링하십시오. 이 섹션에 태그를 추가하고 첫 번째 블록에서 태그별로 필터링 할 수 있습니다.


환상적인! 대단해!
RUserPassing으로

3

http://pages.sachachua.com/evil-plans/ 의 맨 아래에서 일부 코드를 재사용 할 수 있습니다 . 나는 기본적으로 org-map-entries를 사용하여 제목을 간다. 엄격한 트리 대신 직접 그래프를 사용하기 때문에 간단한 정규식 검색을 사용하여 사람에게 친숙한 텍스트에서 링크 구조를 구문 분석합니다. 트리를 사용하는 경우 제목에서 직접 트리 구조를 만들 수 있습니다. 그 후, 적절한 graphviz 구문을 생성해야하며, org-babel은이를 생성하여 PNG 또는 SVG로 변환 할 수 있습니다. 희망이 도움이됩니다!


훌륭한 조직 파일이자 멋진 그래프입니다.
db48x

3

점이 아니지만 서두르면 다음이 도움이 될 수 있습니다.

org-plus-contrib조직 모드 문서에서 마인드 맵을 생성 하려면 FreeMind.app이 필요 합니다.

에서 호출 org-plus-contrib한 추가 조직 모드 패키지를 설치하십시오 M-x package-list-packages.

아마도 우리는 추가해야 할 수도 있습니다

(require 'ox-freemind)

우리의 .emacs에.

그런 다음 우리는에 의해 * .mm 파일 Freemind 우리 조직 모드 파일을 내보낼 수 있습니다 C-c C-e f f, org-freemind-export-to-freemind.

이제 우리는 Freemind.app에서 * .mm을 열고 voila!

org-to-mm-mouse-over

노드의 내용을 보려면 마우스를 올려 놓으십시오.


1

업데이트 : 2019

org-mind-map이라는 패키지가 있습니다

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

도트 언어를 사용하여 조직 모드 파일에서 graphviz 지향 그래프를 작성합니다.

org-mind-map을 설치 한 후 org 파일을 내보내고 C-c C-e"그래프 및 도트 파일 만들기"를 선택할 수 있습니다g d

이것은 조직 파일에서 도트 파일을 만듭니다. 기본적으로 org-mind-map 패키지의 일부 시각적 사용자 정의가 포함됩니다. 이를 편집하거나 관련 부분을 새 도트 파일로 복사 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.