Emacs/AUCTeX:重写 Okular-make-url 函数以使用新的 synctex(完整路径 + "./")语法



基本问题:

需要编写一个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函数的最后一部分有关。

建议?

以下似乎有效:

  1. 更新到最新版本的Okular(v0.13(-这可能是必要的,也可能不是必要的
  2. 定义新的扩展器以获取TeX源的当前目录:
    1. 转到"自定义AUCTeX",选择"TeXCommand",然后转到"TeX扩展列表"并添加一个:
    2. 添加:
      • 密钥:%(dir)
      • 扩展器:(lambda nil default-directory)
  3. 在你的.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的回答对我不起作用。以下内容确实有效:

  1. 定义新的扩展器以获取TeX源的当前目录:
    1. M-x customize-variable <RET> TeX-expand-list <RET>
    2. 向列表中添加新条目:
      • 密钥:%(masterdir)
      • 扩展器:/full/path/to/tex/source/./tex-source-file.tex0
      • 参数:无
  2. 为Okular定义新的视图程序:
    1. M-x customize-variable <RET> TeX-view-program-list <RET>
    2. 向列表中添加新条目:
      • 名称:Okular
      • 选择:命令
      • 命令:okular --unique %o#src:%n%(masterdir)./%b
  3. 将Okular配置为PDF查看器:
    1. M-x customize-variable <RET> TeX-view-program-selection <RET>
    2. 对于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)

最新更新