Você pode obter esse resultado definindo a CUSTOM_ID
propriedade
Do seguinte arquivo:
* 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:
Eu recebo o seguinte 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>
Então, Sub no custom
está vinculado a #sec-1-1
enquanto Sub custom
usa #custom
como referência.
IDs de geração automática
A adição org-id
à lista de avaliações carregadas org-modules
ou diretamente (require 'org-id)
permitirá a geração de IDs usando org-id-get-create
. A seguir, insira os IDs automaticamente e os use na exportação.
;; 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)
Isso deve examinar os títulos existentes em um buffer e atualizar os IDs. Ele só criará IDs se nenhum estiver 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. Isso não corrigirá os links do sumário para apontar para os IDs corretos. O sumário está configurado apenas para usar CUSTOM_ID
ou sec-#-#
gerar links. No entanto, você pode acessar as seções pelos respectivos IDs (eu sugeriria alterar org-id-method
para org
de uuid
para diminuir o tamanho do ID, se você pretender usá-lo dessa maneira.
CUSTOM_ID
provavelmente ainda é sua melhor aposta se você realmente deseja IDs legíveis por humanos para as manchetes. my/org-update-ids
deve poder ser usado como ponto de partida para isso (mapeie o buffer de cada título, vá para o título e execute uma ação).
Um ponto de partida seria (org-entry-put (point) "CUSTOM_ID" id)
para definir e (org-entry-get (point) "CUSTOM_ID")
obter. A determinação do que usar id
depende de como você deseja que eles sejam nomeados.
:CUSTOM_ID:
valores e postar aqui. Este é o meu plano: seria complicado digitar o:PROPERTIES:
bloco para cada subseção. Em vez disso, um código elisp pode gerar esses códigos para mim e gerar automaticamente o:CUSTOM_ID:
se não existir; tudo noorg-export-before-processing-hook
modo que o arquivo organizacional de origem não seja modificado. Pode levar algum tempo para implementar isso, mas publicarei aqui quando terminar.:ID:
propriedades para cada um (e atualizar seu buffer para incluí-las quando estiverem faltando). Se você criar uma função para atribuir IDs dinamicamente aos títulos (com base no nome do título?), Poderá substituí-loorg-id-get-create
e, em vez disso, usará o:Custom_ID:
comando create .my/org-update-ids
afeta apenas um único elemento. Como atualizar todos osID
s ao mesmo tempo?goto-char
falhar como são inseridas entradas)