Puede obtener este resultado configurando la CUSTOM_ID
propiedad.
Del siguiente archivo:
* 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:
Me sale el siguiente 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>
Por Sub no custom
lo tanto, está vinculado por #sec-1-1
while mientras se Sub custom
usa #custom
como referencia.
ID de generación automática
Agregar org-id
a la lista de org-modules
evaluaciones cargadas o directamente (require 'org-id)
permitirá generar ID utilizando org-id-get-create
. Lo siguiente insertará ID automáticamente y los usará en la exportación.
;; 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)
Esto debería mirar a través de sus titulares existentes en un búfer y actualizar las ID. Solo creará ID si no hay ninguno presente.
(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)))))
Nota. Esto no arreglará los enlaces TOC para que apunten a las ID correctas. TOC solo está configurado para usar CUSTOM_ID
o sec-#-#
para generar enlaces. Sin embargo, puede acceder a las secciones por sus ID (sugeriría cambiar org-id-method
a org
de uuid
para acortar la longitud de la ID si tiene la intención de usarla de esta manera.
CUSTOM_ID
sigue siendo probablemente su mejor opción si realmente desea identificaciones legibles para los titulares. my/org-update-ids
debe poder usarse como punto de partida para eso (mapear a través del búfer para cada título, ir al título y luego realizar una acción).
Un punto de partida sería (org-entry-put (point) "CUSTOM_ID" id)
para establecer y (org-entry-get (point) "CUSTOM_ID")
obtener. Determinar qué usar id
depende de cómo desea que se nombren.
:CUSTOM_ID:
valores y publicar aquí. Este es mi plan: sería engorroso escribir el:PROPERTIES:
bloque para cada subsección. En cambio, un código elisp puede generarlos para mí y generar automáticamente el:CUSTOM_ID:
si no existe; todoorg-export-before-processing-hook
para que el archivo de origen no se modifique. Podría llevarme algún tiempo implementar esto, pero lo publicaré aquí cuando termine.