基本问题:
需要编写一个Emacs-lisp函数,处理从Emacs中的TeX文件到PDF输出中对应于TeX文件中当前位置的行的前向搜索。Synctex允许这种操作。然而,在TeXlive 2011的新版本中,synctex文件的引用有所不同,需要编写Emacs函数。
背景:
TeXlive 2011中的Synctex使用不同的语法来引用TeX源(从技术上讲,我认为这与TeXlive2011中的pdflatex创建Synctex文件的方式有关(。在TeXlive 2010中,TeX源只是使用相对路径进行引用;在TeXlive 2011中,使用CCD_ 1来引用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行的行。但是,如上所述,由于处理到TeX源的synctex路径的新方法,它不适用于TeXlive 2011。
需要什么:
需要的是对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
函数的最后一部分有关。
建议?
以下似乎有效:
- 更新到最新版本的Okular(v0.13(-这可能是必要的,也可能不是必要的
- 定义新的扩展器以获取TeX源的当前目录:
- 转到"自定义AUCTeX",选择"TeXCommand",然后转到"TeX扩展列表"并添加一个:
- 添加:
- 密钥:
%(dir)
- 扩展器:
(lambda nil default-directory)
- 密钥:
-
在你的.emacs中,而不是
(setq TeX-view-program-list '(("Okular" "okular --unique %o#src:%n%b")))
用途:
(setq TeX-view-program-list '(("Okular" "okular --unique %o#src:%n%(dir)./%b")))
发件人:https://bugs.kde.org/show_bug.cgi?id=274294#c18
当正在编辑的.tex
文件位于不同于TeX-master
的目录中时,BeSlayed的回答对我不起作用。以下内容确实有效:
- 定义新的扩展器以获取TeX源的当前目录:
M-x customize-variable <RET> TeX-expand-list <RET>
- 向列表中添加新条目:
- 密钥:
%(masterdir)
- 扩展器:
/full/path/to/tex/source/./tex-source-file.tex
0 - 参数:无
- 密钥:
- 为Okular定义新的视图程序:
M-x customize-variable <RET> TeX-view-program-list <RET>
- 向列表中添加新条目:
- 名称:
Okular
- 选择:命令
- 命令:
okular --unique %o#src:%n%(masterdir)./%b
- 名称:
- 将Okular配置为PDF查看器:
M-x customize-variable <RET> TeX-view-program-selection <RET>
- 对于
output-pdf
,将查看器更改为Okular
或者您可以在.emacs
中放入以下内容:
;; use Okular to view AUCTeX-generated PDFs
(push '("%(masterdir)" (lambda nil (expand-file-name (TeX-master-directory))))
TeX-expand-list)
(push '("Okular" "okular --unique %o#src:%n%(masterdir)./%b")
TeX-view-program-list)
(push '(output-pdf "Okular") TeX-view-program-selection)