例子

例子

在 Emacs 上,我尝试使用 Okular 进行前向搜索。目前,我有以下命令:

okular --unique %o#src:%n`pwd`/./%b

但是,这并没有像我预期的那样将我带到正确的行。所以,这里有一个问题。为了解决这个问题,我尝试阅读手动的对于 okular 我可以找到。

可疑的是,没有任何%命令出现在那里。出现的三个命令是:

(1)%f-文件名

(2)%l- 文件的行号

(3)%c- 文件的列号

%如果您能解释一下我写的命令中出现了哪些命令,并帮助我找到在这种情况下有效的前向搜索命令,我将非常高兴。

您可能想知道的相关版本:

Emacs ------- 24.3.1

奥克拉 ------- 0.16.2

AucTeX ------- 11.86

TeXLive ------ 2012

请随时询问任何相关的问题。

PS 依我拙见,这个问题与前面的问题并不重复。我问了一个非常精确的问题,不是工作方法,而是对我已有内容的修复。:-)但是,我确实同意这只是边界技术。

答案1

--synctex=1传递给 TeX 引擎时,同步TeX创建 Okular 可用于正向搜索的元数据。要让 Okular 在正确的位置打开 PDF,您必须生成 SyncTeX 元数据并像这样调用 Okular:

okular document_name#named_destination

从 TeX Live 2011 开始,语法为named_destination

src:<line_number><directory_containing_main_tex_file>/./<relative_path_to_file.tex>

注意<directory_containing_main_tex_file>必须是绝对路径。这个要求是TeX Live 2011 新增,这就是为什么 AUCTeX 中的前向搜索不再“有效”的原因。

<relative_path_to_file.tex>.tex是从包含主文件的目录到 Emacs 中正在访问的文件的相对路径。

例子

假如你有以下两个 TeX 文件:

  • /tmp/foo/main.tex

    \documentclass{}
    \begin{document}
    \input{bar/stuff}
    \end{document}
    
  • /tmp/foo/bar/stuff.tex

    hello world
    \clearpage{}
    blah
    %%% Local Variables:
    %%% mode: latex
    %%% TeX-master: "../main"
    %%% End:
    

并运行:

cd /tmp/foo
pdflatex --synctex=1 main

然后执行以下命令:

okular 'main.pdf#src:3/tmp/foo/./bar/stuff.tex' &

应该跳转到第 2 页(打印“blah”的位置)。

在 AUCTeX 中启用 SyncTeX

要配置 AUCTeX 以传递--synctex=1到 TeX 引擎并生成 PDF,请执行以下操作:

  • 启用 PDF 模式:
    1. 类型M-x customize-variable <RET> TeX-PDF-mode <RET>
    2. 切换“Tex Pdf 模式”(非零)
    3. 点击“状态”并选择“保存以供将来的会话”
  • 启用 SyncTeX:
    1. 类型M-x customize-variable <RET> TeX-source-correlate-mode <RET>
    2. 切换“Tex 源相关模式”(非零)
    3. 点击“状态”并选择“保存以供将来的会话”

配置 AUCTeX 以启动 Okular

要配置 AUCTeX 使用适当的命令行参数启动 Okular,请执行以下操作:

  1. 定义新的扩展器来获取主文件的目录.tex
    1. 类型M-x customize-variable <RET> TeX-expand-list <RET>
    2. 向列表中添加新条目:
      • 钥匙:%(masterdir)
      • 扩展器:(lambda nil (file-truename (TeX-master-directory)))
      • 参数:无
    3. 点击“状态”并选择“保存以供将来的会话”
  2. 为 Okular 定义一个新的视图程序:

    1. 类型M-x customize-variable <RET> TeX-view-program-list <RET>
    2. 向列表中添加新条目:

      • 姓名:Okular
      • 选择:命令
      • 命令:okular --unique %o#src:%n%(masterdir)./%b

        请注意,在执行命令之前%o,、、和会被 AUCTeX 替换,因此永远不会看到它们(它看到的是扩展)。%n%(masterdir)%bokular

        %o是生成的 PDF 的名称,%n是您正在访问的文件的行号,%(masterdir)是包含主.tex文件的目录的绝对路径,是从主文件到您正在访问的文件的%b相对路径。.tex

    3. 点击“状态”并选择“保存以供将来的会话”
  3. 将 Okular 配置为 PDF 查看器:
    1. 类型M-x customize-variable <RET> TeX-view-program-selection <RET>
    2. output-pdf查看器更改为Okular
    3. 点击“状态”并选择“保存以供将来的会话”

或者您可以将以下内容放入您的.emacs

;; use Okular to view AUCTeX-generated PDFs
(when (require 'latex nil t)
  (push '("%(masterdir)" (lambda nil (file-truename (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))

答案2

在你的.emacs位置

(eval-after-load "tex"
  '(add-to-list 'TeX-expand-list '("%a" (lambda nil (expand-file-name (buffer-file-name))))))

现在您可以使用

("okular --unique %o" (mode-io-correlate "#src:%n%a"))

用于 Okular 命令。

更新:需要说明的是,这一变化已经引入在 AUCTeX 的开发版本中,从下一个稳定版本(11.88?)开始,不再需要使用肮脏的黑客来使用 Okular 进行前向搜索。

答案3

有一天,我精心设计的 Emacs/Okular 配置无法工作,于是我偷了这个代码:

   ;; Quick-Fix BEGIN
(add-hook 'LaTeX-mode-hook
            '(lambda ()
                 (add-to-list 'TeX-expand-list
                                  '("%u" Okular-make-url))))
(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)
   (expand-file-name (TeX-master-directory))
   "./"
   (TeX-current-file-name-master-relative)))
;; Quick-Fix END

(setq TeX-view-program-list
      '(("Okular"
       ("okular --unique %u")))) ;; <<-- This is part of the quick-fix.
                                 ;; If all is in sync again, one can
                                 ;; hopefully use the regular method
                                 ;; from the next line again.
       ;; ("okular --unique %o" (mode-io-correlate "#src:%n%b")))))

(setq TeX-view-program-selection '((output-pdf "Okular")))


;;(setq TeX-view-program-list '(("Okular" "okular --unique %o#src:%n%(dir)./%b")))

高血压

相关内容