用 org-mode 写文档的一个大难题就是 ref link 错乱的问题。
是这样的,我的公式是由前到后自动编号的(通过一个简单的函数)。然后如果调节章节顺序的话,后面的公式会跑到前面,这样虽然公式编号会重新自动编号,但是原来交叉引用的编号就都错了。导致导出后的文档中,点击 ref link 会链接到错误的公式。这个问题比较棘手,不知道大家有没有好的办法,或者提供一些解决问题的思路,我来实现也行(当然如果超出我能力范围太多那就不行了 )。
用 org-mode 写文档的一个大难题就是 ref link 错乱的问题。
是这样的,我的公式是由前到后自动编号的(通过一个简单的函数)。然后如果调节章节顺序的话,后面的公式会跑到前面,这样虽然公式编号会重新自动编号,但是原来交叉引用的编号就都错了。导致导出后的文档中,点击 ref link 会链接到错误的公式。这个问题比较棘手,不知道大家有没有好的办法,或者提供一些解决问题的思路,我来实现也行(当然如果超出我能力范围太多那就不行了 )。
其实一个笨办法就是 label 全部使用命名的形式,而不是用数字编号。当然,我觉得还是像我这种懒人比较多吧,不愿意每个公式都要想一个名字
f28,a25,gg5这样不就可以了。
有没有更优雅的解决办法?
既然是自动编号,在重现编号的时候把对应的编号也重排一下就可以了。
调整前:
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:
之外,就没有别的办法了吗?