Org-mode संरचना को dot source में बदलें


12

ऑर्ग-मोड में नोट्स बनाते समय पेड़ जैसी संरचना से ग्राफ की फास्ट पीढ़ी बहुत उपयोगी हो सकती है, जिसे अन्य मनुष्यों के लिए साझाकरण और सौंदर्यीकरण की आवश्यकता होती है।

मैं मैन्युअल रूप से एक गतिशील डॉट / ग्राफविज़ ब्लॉक बनाने के अलावा इसे करने का कोई तरीका नहीं खोज सका।

एक संरचित पेड़ से एक सरल निर्देशित ग्राफ में अनुवाद काफी सीधा होना चाहिए।

मैं ऑर्ग-मोड ट्री (एक चयनित क्षेत्र) को पार करने के लिए और पेड़ की संरचना (और वैकल्पिक रूप से संरचना की सामग्री से कुछ जानकारी) का अनुवाद करने के लिए एक सरल तरीके से एक डॉट ग्राफ़ पर खोज रहा हूं।

मैं संभवतः ऐसा करने वाला पहला व्यक्ति नहीं हो सकता। क्या यह हल हो गया है?

इनपुट

* 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

मॉक-अप परिणाम के ऑर्ग-मोड बफर से स्क्रीनशॉट


बहुत दिलचस्प सवाल! क्या रूपांतरण कोड किसी अन्य ऑर्ग-मोड बफ़र का डॉट ग्राफ़ बनाएगा या यह स्वयं बफ़र है? शांत विचार!
मेलियोरैटस

हाँ, यह उपयोगी होगा, टिकटे कैसे लाटेक्स दस्तावेजों में प्रस्तुत करता है।
Emacs यूजर

@Melioratus: मैं केवल चयनित क्षेत्र का उपयोग करने के लिए सोच रहा था या तो परिणामी डॉट कोड को किल रिंग में डाल दूं या बस बिंदु पर डाल दूं।
वर्नर

जवाबों:


4

यहाँ एक कार्यशील उदाहरण है जो org-elementबफर हेडिंग को पार्स करने के लिए एपीआई का उपयोग करता है:

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

यह कई चरणों में काम करता है: पहले एक सुस्पष्ट ब्लॉक org-element-parse-bufferसभी सुर्खियाँ पाने के लिए उपयोग करता है, और माता-पिता के शीर्षक और शीर्षक शीर्षक की एक सूची निकालता है।

फिर एक अन्य स्रोत ब्लॉक इस सूची को डॉट सिंटैक्स में बदल देता है।

एक तीसरे डॉट स्रोत ब्लॉक में डीओपी रैपिंग शामिल है और इसमें उत्पन्न संबंध शामिल हैं।

कॉस्मेटिक एन्हांसमेंट: परीक्षण के लिए अनुभाग को स्वयं फ़िल्टर करें; आप इस खंड में एक टैग जोड़ सकते हैं और पहले ब्लॉक में टैग द्वारा फ़िल्टर कर सकते हैं।


बहुत खुबस! यह भी खूब रही!
RUserPassingBy

3

आप http://pages.sachachua.com/evil-plans/ के नीचे से कुछ कोड का पुन: उपयोग करने में सक्षम हो सकते हैं । मैं मूल रूप से अपने शीर्षकों के माध्यम से जाने के लिए org-map-प्रविष्टियों का उपयोग करता हूं। चूंकि मेरे पास एक सख्त पेड़ के बजाय एक निर्देशित ग्राफ है, इसलिए मैं मानव-अनुकूल पाठ से लिंक संरचना को पार्स करने के लिए सरल नियमित अभिव्यक्ति खोजों का उपयोग करता हूं। यदि आप सिर्फ एक पेड़ के साथ काम कर रहे हैं, तो आप सीधे शीर्षकों से अपने पेड़ की संरचना बना सकते हैं। उसके बाद, यह उपयुक्त ग्राफविज़ सिंटैक्स पैदा करने की बात है, और ऑर्ग-बेबेल इसका उत्पादन कर सकता है और इसे पीएनजी या एसवीजी में परिवर्तित कर सकता है। उम्मीद है की वो मदद करदे!


यह एक महान ओआरजी फ़ाइल है, और कुछ अच्छे रेखांकन हैं।
db48x

3

यह डॉट नहीं है, लेकिन यदि आप जल्दी में हैं, तो फॉलोइंग मददगार हो सकती है।

हमें जरूरत है org-plus-contribऔर FreeMind.app से org- मोड डॉक्युमेंट्स से माइंडमैप बनाने के लिए।

अतिरिक्त ऑर्ग मोड पैकेज बुलाया स्थापित org-plus-contribद्वारा M-x package-list-packages

शायद हमें जोड़ना पड़ सकता है

(require 'ox-freemind)

हमारे .emacs को

तब हम अपने ओआरजी-मोड फ़ाइल को Freemind * .mm फ़ाइल द्वारा निर्यात कर सकते हैं C-c C-e f f, द्वारा org-freemind-export-to-freemind

अब हम Freemind.app, और वॉइला से * .mm खोलते हैं!

org करने वाली मिमी-माउस-ओवर

नोड्स की सामग्री देखने के लिए माउस ले जाएं।


1

अद्यतन: 2019

ऑर्ग-माइंड-मैप नामक एक पैकेज है

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

यह डॉट भाषा का उपयोग करते हुए ओआरजी-मोड फ़ाइलों से ग्राफविज़ निर्देशित ग्राफ़ बनाता है।

Org-mind-map इंस्टॉल करने के बाद आप ऑर्गन फाइल को एक्सपोर्ट कर सकते हैं C-c C-eऔर "Create a graph & dot file" का चयन करेंg d

इससे आपकी org फाइल से एक डॉट फाइल बन जाएगी। इसमें डिफ़ॉल्ट रूप से org-mind-map पैकेज से कुछ दृश्य अनुकूलन होंगे। आप इन्हें संपादित कर सकते हैं या संबंधित भागों को एक नई डॉट फ़ाइल में कॉपी कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.