回答:
CUSTOM_ID
プロパティを設定すると、この結果を得ることができます。
次のファイルから:
* 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:
次のエクスポート(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>
だから、Sub no custom
によってリンクされ#sec-1-1
ながら、Sub custom
用途#custom
リファレンスとして。
org-id
ロード済みorg-modules
または直接評価中のリストに追加すると、(require 'org-id)
を使用してIDを生成できorg-id-get-create
ます。以下はIDを自動的に挿入し、エクスポートで使用します。
;; 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)
これは、バッファー内の既存の見出しを調べ、IDを更新する必要があります。IDが存在しない場合にのみIDを作成します。
(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)))))
注意。これは、正しいIDを指すようにTOCリンクを修正しません。TOCは、リンクの生成CUSTOM_ID
または使用のためにのみ構成されていsec-#-#
ます。ただし、IDでセクションにアクセスできます(この方法で使用する場合は、IDの長さを短くするためorg-id-method
にorg
からuuid
に変更することをお勧めします。
CUSTOM_ID
見出しに人間が判読できるIDが実際に必要な場合は、おそらくまだ最善の策です。 my/org-update-ids
その開始点として使用できるはずです(各見出しのバッファーをマップし、見出しに移動してからアクションを実行します)。
出発点は(org-entry-put (point) "CUSTOM_ID" id)
、設定と(org-entry-get (point) "CUSTOM_ID")
取得です。何を使用するかは、id
名前を付ける方法によって決まります。
:ID:
それぞれのプロパティを作成するメソッドを提供しました(そして、不足している場所にそれらを含めるようにバッファーを更新します)。見出しに動的にIDを割り当てる関数を作成する場合(見出し名に基づいて?)、それをに置き換えることがorg-id-get-create
でき、:Custom_ID:
代わりにcreateを使用します。
my/org-update-ids
単一の要素にのみ影響します。すべてID
のを一度に更新する方法は?
goto-char
エントリが挿入されると失敗します)
:CUSTOM_ID:
値を自動生成するために何かを調理し、ここに投稿します。これは私の計画です:PROPERTIES:
。各サブセクションのブロックを入力するのは面倒です。代わりに、elispコードでこれらを生成し、:CUSTOM_ID:
存在しない場合は自動生成できます。org-export-before-processing-hook
ソースorgファイルが変更されないように、すべての。これを実装するには少し時間がかかるかもしれませんが、完了したらここに投稿します。