跨emacs org-mode文件引用唯一ID

时间:2014-11-25 16:56:40

标签: emacs org-mode

我有几个.org文件,我希望能够使用ID在它们之间创建链接。我使用DOI作为唯一标识符。我可以使用属性链接到文件中:

* Paper 1
  :PROPERTIES:
  :CUSTOM_ID: 10.1088/0953-8984/23/21/213001
  :END:

* Paper 2
  :PROPERTIES:
  :CUSTOM_ID: 10.1038/nphys2935
See also [[#10.1088/0953-8984/23/21/213001]]

有没有办法让custom_id成为全局的,所以我可以从另一个文件中引用它?

我认为org-id是我需要更进一步的,但我发现文档有点令人困惑。我尝试在.emacs

中添加以下行
;; Use global IDs
(require 'org-id)
(setq org-id-link-to-org-use-id use-existing)

;; Update ID file .org-id-locations on startup
(org-id-update-id-locations)

但文件.emacs.d/.org-id-locations只有nil

似乎不会自动生成全局链接(Assign IDs to every entry in Org-mode)。我尝试(使用光标在标题上)使用M-x org-id-get-create,但这似乎没有做任何事情。

编辑:(基于有用的评论)

在一个会话中,我可以在标题(我上面的示例中为M-x org-store-link)上使用Paper 1存储和创建链接。然后我可以使用M-x org-insert-link,并输入ID以插入链接。该链接看起来像[[id:10.1088/0953-8984/23/21/213001][Paper 1]]。但是我遇到了两个问题:(1)我希望自动存储ID。 (2)当我关闭并重新打开文件时,链接不起作用。

编辑:一个相关的问题:

https://emacs.stackexchange.com/questions/2186/have-org-modes-exported-html-use-custom-id-when-linking-to-sub-sections-in-toc

1 个答案:

答案 0 :(得分:4)

所以这就是我提出的解决方案。

  1. 在我的.emacs配置中,我保留了与我的问题相同的设置:

    (require 'org-id)
    (setq org-id-link-to-org-use-id use-existing)
    
    ;; Update ID file on startup
    (org-id-update-id-locations)
    
  2. 这些文件必须是议程列表的一部分(或使用org-id-extra-filesSee org-id documentation)添加到其他文件列表中

  3. ID抽屉中使用CUSTOM_ID代替PROPERTIES

    * Paper 1
      :PROPERTIES:
      :ID: 10.1088/0953-8984/23/21/213001
      :END:
    
  4. 需要创建每个ID(如果需要,在我的情况下我已经拥有它们),并且添加到ID文件的链接(链接存储在.emacs.d/.org-id-locations中)。这是使用org-id-get-create完成的:光标位于标题上,使用

    调用它
    M-x org-id-get-create
    
  5. 使用[[id:10.1088/0953-8984/23/21/213001][Paper 1]]链接到ID。

  6. 当我想要创建ID时,我必须多考虑一下;我可以通过将ID存储绑定到我将对所有标题执行的另一个功能来自动化该过程。