Sie können dieses Ergebnis erhalten, indem Sie die CUSTOM_IDEigenschaft festlegen.
Aus der folgenden Datei:
* 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:
Ich erhalte folgenden Export ( C-c C-e h H):
<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>
So Sub no customwird durch verbunden , #sec-1-1während Sub customVerwendungen #customals Referenz.
AutoGenerating IDs
Durch Hinzufügen org-idzur Liste der geladenen org-modulesoder direkt ausgewerteten (require 'org-id)IDs können IDs mit generiert werden org-id-get-create. Im Folgenden werden IDs automatisch eingefügt und beim Export verwendet.
;; 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)
Dies sollte Ihre vorhandenen Überschriften in einem Puffer durchsuchen und die IDs aktualisieren. Es werden nur IDs erstellt, wenn keine vorhanden sind.
(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)))))
Hinweis. Dadurch werden keine TOC-Links repariert, die auf die richtigen IDs verweisen. Das Inhaltsverzeichnis ist nur zur Verwendung CUSTOM_IDoder sec-#-#zum Generieren von Links konfiguriert . Sie können jedoch über ihre IDs auf die Abschnitte zugreifen (ich würde empfehlen org-id-method, orgvon uuidzu zu wechseln , um die ID-Länge zu verkürzen, wenn Sie sie auf diese Weise verwenden möchten .
CUSTOM_IDist wahrscheinlich immer noch die beste Wahl, wenn Sie tatsächlich lesbare Ausweise für die Überschriften wünschen. my/org-update-idssollte in der Lage sein, als Ausgangspunkt dafür verwendet zu werden (durch den Puffer für jede Überschrift abbilden, zur Überschrift gehen und dann eine Aktion ausführen).
Ein Ausgangspunkt wäre das (org-entry-put (point) "CUSTOM_ID" id)Setzen und (org-entry-get (point) "CUSTOM_ID")Erhalten. Die Bestimmung der Verwendung idhängt davon ab, wie sie benannt werden sollen.
:CUSTOM_ID:Werte automatisch zu generieren und hier zu posten. Dies ist mein Plan: Es wäre umständlich, den:PROPERTIES:Block für jeden Unterabschnitt einzugeben. Stattdessen kann ein Elisp-Code diese für mich generieren und automatisch generieren,:CUSTOM_ID:wenn einer nicht existiert. alles in der,org-export-before-processing-hookdamit die Quell-Organisationsdatei nicht geändert wird. Es könnte einige Zeit dauern, bis ich dies implementiert habe, aber ich werde es hier veröffentlichen, wenn ich fertig bin.