Sie können dieses Ergebnis erhalten, indem Sie die CUSTOM_ID
Eigenschaft 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 custom
wird durch verbunden , #sec-1-1
während Sub custom
Verwendungen #custom
als Referenz.
AutoGenerating IDs
Durch Hinzufügen org-id
zur Liste der geladenen org-modules
oder 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_ID
oder sec-#-#
zum Generieren von Links konfiguriert . Sie können jedoch über ihre IDs auf die Abschnitte zugreifen (ich würde empfehlen org-id-method
, org
von uuid
zu zu wechseln , um die ID-Länge zu verkürzen, wenn Sie sie auf diese Weise verwenden möchten .
CUSTOM_ID
ist wahrscheinlich immer noch die beste Wahl, wenn Sie tatsächlich lesbare Ausweise für die Überschriften wünschen. my/org-update-ids
sollte 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 id
hä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-hook
damit 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.:ID:
Eigenschaften für jede zu erstellen (und Ihren Puffer zu aktualisieren, um sie dort einzuschließen, wo sie fehlen). Wenn Sie eine Funktion zum dynamischen Zuweisen von IDs zu Überschriften erstellen (basierend auf dem Überschriftennamen?), Können Sie diese ersetzenorg-id-get-create
und:Custom_ID:
stattdessen die Option "Erstellen" verwenden.my/org-update-ids
betrifft nur ein einzelnes Element. Wie aktualisiere ich alleID
s auf einmal?goto-char
fehl, wenn Einträge eingefügt werden)