3

基本问题:

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

建议?

4

2 回答 2

2

以下似乎有效:

  1. 更新到最新版本的 Okular (v0.13) - 这可能是必要的,也可能不是必要的。
  2. 定义新的扩展器以获取 TeX 源的当前目录:
    1. 转到“Customize AUCTeX”选择“TeXCommand”,然后转到“TeX Expand List”并添加一个:
    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

于 2011-08-01T21:16:28.007 回答
0

正在编辑的.tex文件位于与TeX-master. 以下确实有效:

  1. 定义新的扩展器以获取 TeX 源的当前目录:
    1. M-x customize-variable <RET> TeX-expand-list <RET>
    2. 在列表中添加一个新条目:
      • 钥匙:%(masterdir)
      • 扩展器:(lambda nil (expand-file-name (TeX-master-directory)))
      • 参数:无
  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)
于 2014-02-17T18:14:38.643 回答