基本问题:
需要编写一个 Emacs lisp 函数来处理从 Emacs 中的 TeX 文件到 PDF 输出中对应于 TeX 文件中当前位置的行的前向搜索。Synctex 允许这种操作。但是,从 TeXlive 2011 的新版本开始,synctex 文件的引用方式有所不同,需要编写 Emacs 函数。
背景:
TeXlive 2011 中的 Synctex 使用不同的语法来引用 TeX 源(从技术上讲,我认为它与 TeXlive 2011 中的 pdflatex 创建 synctex 文件的方式有关)。在 TeXlive 2010 中,仅使用相对路径引用 TeX 源;在 TeXlive 2011 TeX 源中使用/full/path/to/tex/source/./tex-source-file.tex
.
无论如何,这使得从 Emacs 中的 TeX 源到 Okular 中断中的 pdf 输出的前向搜索。在 Emacs 中向 Okular 进行前向搜索的一种方法涉及如下函数:
(defun okular-make-url () (concat
"file://"
(expand-file-name (funcall file (TeX-output-extension) t)
(file-name-directory (TeX-master-file)))
"#src:"
(TeX-current-line)
(TeX-current-file-name-master-relative)))
(和
(add-to-list 'TeX-expand-list
'("%u" okular-make-url))
(setq TeX-view-program-list '(("Okular" "okular --unique %u")))
)
这会生成如下命令:
okular --unique my-file.pdf#src:88my-file.tex
其中,截至 TeXlive 2010,正确跳转到 pdf 输出中与 TeX 输入的第 88 行相对应的行。但是,如上所述,它不适用于 TeXlive 2011,因为处理 TeX 源的 synctex 路径的新方法。
需要什么:
需要的是重写okular-make-url
它会产生类似的东西:
okular --unique my-file.pdf#src:88/full/path/to/my/tex/source/./my-file.tex
即,使用 (1) 文件的完整路径 + (2)"./" + (3) 文件名。
我对 Emacs lisp 命令(尤其是 AUCTeX elisp 代码)不够熟练,无法确定如何执行此操作。显然,它与更改okular-make-url
函数的最后一部分有关。
建议?