แปลงโครงสร้างโหมดองค์กรเป็นแหล่งจุด


12

การสร้างกราฟอย่างรวดเร็วจากโครงสร้างที่มีลักษณะคล้ายต้นไม้จะมีประโยชน์มากเมื่อทำการบันทึกในโหมดองค์กรที่ต้องการการแบ่งปันและหรือการทำให้สวยงามสำหรับมนุษย์คนอื่น ๆ

ฉันไม่สามารถหาวิธีอื่นนอกเหนือจากการสร้างบล็อก dot / graphviz แบบไดนามิกด้วยตนเอง

การแปลจากแผนผังที่มีโครงสร้างเป็นกราฟกำกับง่ายควรตรงไปตรงมาพอสมควร

ฉันกำลังมองหาวิธีง่ายๆในการสำรวจแผนผังองค์กรโหมด (ภูมิภาคที่เลือก) และแปลโครงสร้างต้นไม้ (และอาจเลือกข้อมูลจากเนื้อหาของโครงสร้าง) เป็นกราฟจุด

ฉันไม่อาจเป็นคนแรกที่คิดเรื่องนี้ สิ่งนี้ได้รับการแก้ไขแล้วหรือยัง?

อินพุต

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

และบางทีตัวแปร org-to-dot-preamble

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

ผลลัพธ์จะดูเหมือนบล็อกไดนามิกโหมด 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

เวอร์ชันขั้นสูงกว่าจะประกาศโหนดทั้งหมดก่อนและอนุญาตการจัดรูปแบบบางอย่าง

อินพุต

* 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: ฉันคิดว่าจะใช้พื้นที่ที่เลือกและวางรหัสจุดที่เกิดในฆ่าแหวนหรือเพียงแค่ใส่ที่จุด
เวอร์เนอร์

คำตอบ:


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 และรวมถึงความสัมพันธ์ที่สร้างขึ้น

การปรับปรุงเครื่องสำอาง: กรองส่วนสำหรับการทดสอบนั้น คุณสามารถเพิ่มแท็กในส่วนนี้และกรองตามแท็กในบล็อกแรก


Fantastic! มันเยี่ยมมาก!
RUserPassing โดย

3

คุณอาจจะสามารถนำมาใช้บางส่วนของรหัสจากด้านล่างของhttp://pages.sachachua.com/evil-plans/ โดยทั่วไปฉันใช้รายการแผนที่เพื่อผ่านส่วนหัวของฉัน เนื่องจากฉันมีกราฟกำกับแทนที่จะเป็นแผนผังที่เข้มงวดฉันจึงใช้การค้นหานิพจน์ทั่วไปเพื่อแยกโครงสร้างลิงก์จากข้อความที่เป็นมิตรกับมนุษย์ หากคุณเพิ่งทำงานกับต้นไม้คุณสามารถสร้างโครงสร้างต้นไม้ของคุณจากส่วนหัวโดยตรง หลังจากนั้นเป็นเรื่องของการสร้างไวยากรณ์ graphviz ที่เหมาะสมและ org-babel สามารถจัดการการผลิตนั้นและแปลงเป็น PNG หรือ SVG หวังว่าจะช่วย!


นั่นเป็นไฟล์ org ที่ยอดเยี่ยมและกราฟที่ดี
db48x

3

มันไม่ใช่จุด แต่ถ้าคุณรีบเร่งการติดตามอาจเป็นประโยชน์

เราต้องการorg-plus-contribและ FreeMind.app เพื่อสร้าง mindmap จากเอกสารโหมดองค์กร

ติดตั้งแพคเกจ org โหมดพิเศษที่เรียกว่าโดยorg-plus-contribM-x package-list-packages

บางทีเราอาจต้องเพิ่ม

(require 'ox-freemind)

เพื่อ. emacs ของเรา

แล้วเราสามารถส่งออกไฟล์ org โหมดของเราที่จะ FreeMind ไฟล์ * .mm โดย,C-c C-e f forg-freemind-export-to-freemind

ตอนนี้เราเปิด * .mm จาก Freemind.app และ voila!

องค์กรเพื่อ-MM-เมาส์มากกว่า

วางเมาส์เพื่อดูเนื้อหาของโหนด


1

ปรับปรุง: 2019

มีแพ็คเกจที่เรียกว่า org-mind-map

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

มันสร้างกราฟกำกับกราฟกราฟจากไฟล์โหมดองค์กรโดยใช้ภาษาดอท

หลังจากติดตั้งแผนที่ความคิดคุณสามารถส่งออกไฟล์องค์กรC-c C-eและเลือก "สร้างกราฟและไฟล์จุด"g d

สิ่งนี้จะสร้างไฟล์ dot จากไฟล์ org ของคุณ มันจะมีการปรับแต่งภาพจากแพ็คเกจ org-mind-map เป็นค่าเริ่มต้น คุณสามารถแก้ไขสิ่งเหล่านี้หรือคัดลอกส่วนที่เกี่ยวข้องไปยังไฟล์ dot ใหม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.