Bạn có thể nhận được kết quả này bằng cách đặt thuộc CUSTOM_ID
tính.
Từ tập tin sau:
* Test
:PROPERTIES:
:CREATED: [2014-10-02 Thu 11:48]
:END:
** Sub no custom
:PROPERTIES:
:CREATED: [2014-10-02 Thu 11:49]
:END:
** Sub custom
:PROPERTIES:
:CREATED: [2014-10-02 Thu 11:49]
:CUSTOM_ID: Custom
:END:
Tôi nhận được Xuất ( C-c C-e h H
) sau:
<div id="text-table-of-contents">
<ul>
<li><a href="#sec-1">1. Test</a>
<ul>
<li><a href="#sec-1-1">1.1. Sub no custom</a></li>
<li><a href="#Custom">1.2. Sub custom</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div id="outline-container-sec-1" class="outline-2">
<h2 id="sec-1"><span class="section-number-2">1</span> Test</h2>
<div class="outline-text-2" id="text-1">
</div>
<div id="outline-container-sec-1-1" class="outline-3">
<h3 id="sec-1-1"><span class="section-number-3">1.1</span> Sub no custom</h3>
<div class="outline-text-3" id="text-1-1">
</div>
</div>
<div id="outline-container-Custom" class="outline-3">
<h3 id="Custom"><a id="sec-1-2"></a><span class="section-number-3">1.2</span> Sub custom</h3>
Vì vậy, Sub no custom
được liên kết đến #sec-1-1
trong khi Sub custom
sử dụng #custom
như là tài liệu tham khảo.
ID tự động tạo
Thêm org-id
vào danh sách được tải org-modules
hoặc đánh giá trực tiếp (require 'org-id)
sẽ cho phép tạo ID bằng cách sử dụng org-id-get-create
. Sau đây sẽ tự động chèn ID và sử dụng chúng khi xuất.
;; Use custom ID if present, otherwise create a new one when trying to
;; resolve links
(setq org-id-link-to-org-use-id
'create-if-interactive-and-no-custom-id)
;; Based on org-expiry-insinuate
(add-hook 'org-insert-heading-hook 'org-id-get-create)
(add-hook 'org-after-todo-state-change-hook 'org-id-get-create)
(add-hook 'org-after-tags-change-hook 'org-id-get-create)
Điều này sẽ xem qua các tiêu đề hiện có của bạn trong bộ đệm và cập nhật ID. Nó sẽ chỉ tạo ID nếu không có.
(defun my/org-update-ids ()
(interactive)
(let* ((tree (org-element-parse-buffer 'headline))
(map (reverse
(org-element-map tree 'headline
(lambda (hl)
(org-element-property :begin hl))))))
(save-excursion
(cl-loop for point in map do
(goto-char point)
(org-id-get-create)))))
Ghi chú. Điều này sẽ không sửa các liên kết TOC để trỏ đến ID chính xác. TOC chỉ được cấu hình để sử dụng CUSTOM_ID
hoặc sec-#-#
để tạo liên kết. Tuy nhiên bạn có thể truy cập vào các phần bằng của (Tôi sẽ đề nghị thay đổi ID của họ org-id-method
để org
từ uuid
để rút ngắn chiều dài ID nếu bạn có ý định sử dụng nó theo cách này.
CUSTOM_ID
có lẽ vẫn là đặt cược tốt nhất của bạn nếu bạn thực sự muốn ID người dễ đọc cho các tiêu đề. my/org-update-ids
nên có thể được sử dụng làm điểm bắt đầu cho điều đó (ánh xạ qua bộ đệm cho từng tiêu đề, đi đến tiêu đề sau đó thực hiện hành động).
Một điểm khởi đầu sẽ là (org-entry-put (point) "CUSTOM_ID" id)
để thiết lập và (org-entry-get (point) "CUSTOM_ID")
để có được. Việc xác định những gì sẽ sử dụng id
là phụ thuộc vào cách bạn muốn đặt tên chúng.
:CUSTOM_ID:
giá trị và đăng ở đây. Đây là kế hoạch của tôi: Sẽ rất khó khăn khi gõ:PROPERTIES:
khối cho mỗi phần phụ. Thay vào đó, một mã elisp có thể tạo mã cho tôi và tự động tạo mã:CUSTOM_ID:
nếu không tồn tại; tất cảorg-export-before-processing-hook
để tập tin org nguồn không bị sửa đổi. Tôi có thể mất một chút thời gian để thực hiện điều này, nhưng sẽ đăng nó ở đây khi hoàn thành.