Chuyển đổi cấu trúc chế độ org sang nguồn chấm


12

Tạo đồ thị nhanh từ cấu trúc giống như cây có thể rất hữu ích khi ghi chú ở chế độ org yêu cầu chia sẻ và làm đẹp cho người khác.

Tôi không thể tìm thấy bất kỳ cách nào để làm điều này ngoài việc tự tạo một khối dot / graphviz động.

Một bản dịch từ cây có cấu trúc sang đồ thị có hướng đơn giản nên khá đơn giản.

Tôi đang tìm một cách đơn giản để duyệt qua cây chế độ org (vùng đã chọn) và dịch cấu trúc cây (và tùy chọn một số thông tin từ nội dung của cấu trúc) sang biểu đồ dấu chấm.

Tôi không thể là người đầu tiên nghĩ ra điều này. Điều này đã được giải quyết?

đầu vào

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

và có lẽ là một đoạn mở đầu cực đại

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

đầu ra sẽ trông giống như một khối động chế độ 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

Một phiên bản nâng cao hơn trước tiên sẽ khai báo tất cả các nút và cho phép một số định dạng.

đầu vào

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

Một số biến định dạng

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

đầu ra

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

ảnh chụp màn hình từ bộ đệm chế độ org của kết quả mô phỏng


Câu hỏi rất thú vị! Mã chuyển đổi sẽ tạo một biểu đồ chấm của bộ đệm chế độ org khác hay bộ đệm riêng của nó? Ý tưởng tuyệt vời!
Melioratus

Vâng, nó sẽ hữu ích, loại TikZ biểu hiện trong các tài liệu LaTeX.
Người dùng Emacs

@Melioratus: Tôi đã nghĩ chỉ cần sử dụng vùng đã chọn và đặt mã chấm kết quả vào vòng khử hoặc chỉ cần chèn nó vào điểm.
Werner

Câu trả lời:


4

Dưới đây là một ví dụ hoạt động sử dụng org-elementAPI để phân tích các tiêu đề bộ đệm:

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

Điều này hoạt động theo một số bước: đầu tiên một khối elisp sử dụng org-element-parse-bufferđể có được tất cả các tiêu đề và trích xuất một danh sách tiêu đề và tiêu đề của phụ huynh.

Sau đó, một khối nguồn khác chuyển đổi danh sách này thành cú pháp dấu chấm.

Khối nguồn chấm thứ ba chứa gói DOT và bao gồm các quan hệ được tạo.

Cải tiến mỹ phẩm: lọc ra phần cho chính bài kiểm tra; bạn có thể thêm một thẻ vào phần này và lọc ra bằng thẻ trong khối đầu tiên.


Tuyệt diệu! Điều đó thật tuyệt!
RUserPassingBy

3

Bạn có thể có thể sử dụng lại một số mã từ cuối http://pages.sachachua.com/evil-plans/ . Về cơ bản tôi sử dụng các mục nhập bản đồ để đi qua các tiêu đề của mình. Vì tôi có một biểu đồ được định hướng thay vì một cây nghiêm ngặt, tôi sử dụng các tìm kiếm biểu thức chính quy đơn giản để phân tích cấu trúc liên kết từ văn bản thân thiện với con người. Nếu bạn chỉ làm việc với một cái cây, bạn có thể tạo cấu trúc cây của bạn từ các tiêu đề trực tiếp. Sau đó, vấn đề là tạo ra cú pháp graphviz thích hợp và org-babel có thể xử lý việc tạo ra nó và chuyển đổi nó thành PNG hoặc SVG. Mong rằng sẽ giúp!


Đó là một tệp org tuyệt vời và một số biểu đồ đẹp.
db48x

3

Đó không phải là dấu chấm, nhưng nếu bạn đang vội, việc theo dõi có thể hữu ích.

Chúng tôi cần org-plus-contribvà FreeMind.app để tạo một sơ đồ tư duy từ các tài liệu chế độ tổ chức.

Cài đặt thêm gói chế độ org được gọi org-plus-contribbởi M-x package-list-packages.

Có lẽ chúng ta có thể cần phải thêm

(require 'ox-freemind)

để .emacs của chúng tôi.

Sau đó, chúng ta có thể xuất tệp chế độ tổ chức của mình sang tệp Freemind * .mm bằng cách C-c C-e f f, org-freemind-export-to-freemind.

Bây giờ chúng tôi mở * .mm từ Freemind.app và voila!

chuột-to-mm-chuột

Di chuột qua để xem nội dung của các nút.

  • Lưu ý: Xuất Freemind có thông tin cũ về hướng dẫn sử dụng Org <8.0

1

CẬP NHẬT: 2019

Có một gói gọi là org-mind-map

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

Nó tạo các biểu đồ hướng graphviz từ các tệp chế độ org bằng ngôn ngữ dấu chấm.

Sau khi cài đặt org-mind-map, bạn có thể xuất tệp org C-c C-evà chọn "Tạo biểu đồ & tệp chấm"g d

Điều này sẽ tạo ra một tập tin dấu chấm từ tập tin org của bạn. Nó sẽ chứa một số tùy chỉnh trực quan từ gói org-mind-map theo mặc định. Bạn có thể chỉnh sửa chúng hoặc sao chép các phần có liên quan vào một tệp chấm mới.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.