Org 写文档导出时,ref link 错乱的解决办法

用 org-mode 写文档的一个大难题就是 ref link 错乱的问题。

是这样的,我的公式是由前到后自动编号的(通过一个简单的函数)。然后如果调节章节顺序的话,后面的公式会跑到前面,这样虽然公式编号会重新自动编号,但是原来交叉引用的编号就都错了。导致导出后的文档中,点击 ref link 会链接到错误的公式。这个问题比较棘手,不知道大家有没有好的办法,或者提供一些解决问题的思路,我来实现也行(当然如果超出我能力范围太多那就不行了 :joy:)。

其实一个笨办法就是 label 全部使用命名的形式,而不是用数字编号。当然,我觉得还是像我这种懒人比较多吧,不愿意每个公式都要想一个名字 :joy:

f28,a25,gg5这样不就可以了。

有没有更优雅的解决办法? :joy:

既然是自动编号,在重现编号的时候把对应的编号也重排一下就可以了。

调整前:

eq 1
eq 2
ref 1  <==== 指向 eq 1
eq 3
eq 4

调整后(把 eq 3 和 eq 4 挪到最前面)

eq 1 (3)
eq 2 (4)
eq 3 (1)
eq 4 (2)
ref 1   <=== 现在指向原来的 eq3

能把函数贴出来嘛?

;; Based on this answer: http://stackoverflow.com/a/29676851
(defun et/update-equation-labels (&rest args)
  "Update latex equation labels (if any) when exit from src block
editing"
  (save-excursion
    (goto-char (point-min))
    (let ((count 1))
      (while (re-search-forward "\\label{eq[a-zA-Z:-_]*\\([0-9]+\\)}" nil t)
        (replace-match (format "%d" count) nil nil nil 1)
        (setq count (1+ count))))))

`

感觉有些奇怪。按照这个写法不该从第一个开始刷新吗。


From my Spacemacs via Conkeror

是从第一个开始刷新。没有动 eqref,只动了 label

Edit: 我把例子稍微修改了一下,现在应该可以看得更清楚了。

除了用 #+name: 之外,就没有别的办法了吗?