Kuruluş modu yapısını nokta kaynağına dönüştürme


12

Ağaç benzeri bir yapıdan hızlı grafik üretimi, diğer insanlar için paylaşım ve / veya güzelleştirme gerektiren kuruluş modunda notlar yaparken çok yararlı olabilir.

Manuel olarak dinamik bir nokta / graphviz bloğu oluşturmaktan başka bir yol bulamadım.

Yapılandırılmış bir ağaçtan basit bir yönlendirilmiş grafiğe çeviri oldukça basit olmalıdır.

Bir org-mode ağacını (seçilen bir bölge) çaprazlamak ve ağaç yapısını (ve isteğe bağlı olarak yapının içeriğinden bazı bilgileri) bir nokta grafiğine çevirmek için basit bir yol arıyorum.

Bunu ilk ortaya çıkaran ben olamam. Bu çözüldü mü?

giriş

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

ve belki de değişken bir kuruluş-nokta-önsözü

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

çıktı bir kuruluş modu dinamik bloğu gibi görünür

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

Daha gelişmiş bir sürüm önce tüm düğümleri bildirir ve bazı biçimlendirmelere izin verir.

giriş

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

Bazı biçimlendirme değişkenleri

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

çıktı

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

Mock-up sonucunun bir org modu arabelleğinden ekran görüntüsü


Çok ilginç bir soru! Dönüşüm kodu başka bir kuruluş modu ara belleğinin veya kendi ara belleğinin nokta grafiğini oluşturur mu? İyi fikir!
Melioratus

Evet, TikZ'nin LaTeX belgelerinde nasıl oluşturduğu yararlı olacaktır.
Emacs Kullanıcısı

@Melioratus: Sadece seçilen bölgeyi kullanmayı ve sonuçtaki nokta kodunu öldürme halkasına yerleştirmeyi ya da sadece bir noktaya eklemeyi düşünüyordum.
Werner

Yanıtlar:


4

org-elementTampon başlıklarını ayrıştırmak için API kullanan çalışan bir örnek :

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

Bu, birkaç adımda çalışır: önce bir elisp bloğu org-element-parse-buffertüm başlıkları almak için kullanır ve ebeveynin başlığı ve başlık başlığı listesini çıkarır.

Sonra başka bir kaynak bloğu bu listeyi nokta sözdizimine dönüştürür.

Üçüncü nokta kaynak bloğu DOT paketini içerir ve oluşturulan ilişkileri içerir.

Kozmetik geliştirmeler: testin kendi bölümünü filtreleyin; bu bölüme bir etiket ekleyebilir ve ilk bloktaki etikete göre filtreleyebilirsiniz.


Fantastik! Bu harika!
RUserPassingBy

3

Kodun bir kısmını http://pages.sachachua.com/evil-plans/ adresinin alt kısmından tekrar kullanabilirsiniz . Temelde başlıklarımı gözden geçirmek için org-map-input'ları kullanıyorum. Sıkı bir ağaç yerine yönlendirilmiş bir grafiğe sahip olduğum için, bağlantı yapısını insan dostu metinden ayrıştırmak için basit düzenli ifade aramaları kullanıyorum. Sadece bir ağaçla çalışıyorsanız, ağaç yapınızı doğrudan başlıklardan oluşturabilirsiniz. Bundan sonra, uygun graphviz sözdizimini oluşturma meselesidir ve org-babel bunu üretmeyi ve bir PNG veya SVG'ye dönüştürmeyi başarabilir. Umarım yardımcı olur!


Bu harika bir kuruluş dosyası ve bazı güzel grafikler.
db48x

3

Nokta değil, ama aceleniz varsa, takip etmek yardımcı olabilir.

org-plus-contribKuruluş modu belgelerinden bir zihin haritası oluşturmak için ve FreeMind.app'a ihtiyacımız var .

Denilen ekstra org-mod paketini kurun org-plus-contribtarafından M-x package-list-packages.

Belki eklememiz gerekebilir

(require 'ox-freemind)

bizim .emacs.

Sonra tarafından *, mm dosya FreeMind bizim org-mod dosyası verebilirsiniz C-c C-e f f, org-freemind-export-to-freemind.

Şimdi Freemind.app ve voila'dan * .mm açıyoruz!

org için-mm-fare üzerinde

Düğümlerin içeriğini görmek için fare ile üzerine gelin.

  • Dikkat: Freemind export , Org <8.0 kılavuzu hakkında eski bilgilere sahip

1

GÜNCELLEME: 2019

Org-mind-map adlı bir paket var

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

Nokta dilini kullanarak kuruluş modu dosyalarından graphviz yönlendirmeli grafikler oluşturur.

Org-mind-map'i yükledikten sonra bir org dosyasını dışa aktarabilir C-c C-eve "Grafik ve nokta dosyası oluştur" u seçebilirsiniz.g d

Bu, kuruluş dosyanızdan bir nokta dosyası oluşturur. Varsayılan olarak org-mind-map paketinden bazı görsel özelleştirmeler içerecektir. Bunları düzenleyebilir veya ilgili parçaları yeni bir nokta dosyasına kopyalayabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.