SumatraPDF 阅读器该怎么设置——以 TeXStudio 和 VS Code 为例 - 啸行

发布于 2021-03-26 16:46:16

SumatraPDF 阅读器在 LaTeX 用户群中比较常见。 以前 CTeX 套装将它集成以配合 WinEdt 使用,现如今依然有很多 WinEdt 用户青睐于这样的搭配,SumatraPDF 官网也给出了 Use Sumatra as a pre-viewer for LaTeX editors 的手册,其中就包含了 TeXnicCenter、WinEdt、Emacs 和 Vim。

目前我常用的两款编辑器为 TeXStudio 和 VS Code,而今天(2019.10.29)恰巧碰到了契机,稍微研究了一下和 SumatraPDF 有关的设置方案。 以下就是今天的心得。

在介绍心得之前,假设 main.tex 已经被编译为 main.pdf,其中 main.tex 内容如下:

\documentclass{article}
\usepackage{lipsum}
\begin{document}
  \section{main file} 
  \lipsum[1]
  \input{subfile.tex}
\end{document}

而 subfile.tex 内容如下:

\section{subfile}
\lipsum[2]
\[ a = b \]

同时,假设<sumatrapdfroot>是 SumatraPDF 的路径,同理,<texstudioroot><vscoderoot>分别是 TeXStudio 和 VS Code 的路径。

在配置之前,我首先简要介绍下使用命令行的方法。 事实上,SumatraPDF 允许通过添加命令行参数来形成不同的阅读效果。 对 LaTeX 用户而言,最重要的效果就是正反向搜索。 在这里给出我所使用的命令行代码。

使用 TeXStudio 进行反向搜索的代码是:

<sumatrapdfroot>\SumatraPDF.exe -reuse-instance -forward-search main.tex 4 -inverse-search "\"<texstudioroot>\texstudio.exe\" \"%f\" -line %l" main.pdf

其中,

-reuse-instance

表示只打开一个 SumatraPDF 窗口;

-forward-search main.tex 4

表示对 main.tex 的第 4 行进行正向搜索(在 SumatraPDF 中表现为 main.pdf 对应位置变蓝);

-inverse-search "\"<texstudioroot>\texstudio.exe\" \"%f\" -line %l" main.pdf

表示使用 TeXStudio 对 main.pdf 进行反向搜索(表现为双击 main.pdf 的某部分会在 TeXStudio 中返回对应的 tex 文件的某行)。

使用 VS Code 进行反向搜索的代码是:

<sumatrapdfroot>\SumatraPDF.exe -reuse-instance -forward-search main.tex 4 -inverse-search "\"<vscoderoot>\bin\code.cmd\" -r -g \"%f:%l\"" main.pdf

其中code.cmd是 VS Code 为用户配置好的批处理文件,用于打开code.exe并进行一些相关设置,有关命令行的分析大体和上面类似。

明白了命令行的原理就很容易在两款软件中进行设置了。

首先是 TeXStudio 的设置。在 Options > Configure TeXstudio 中选择 Show Advanced Options,而后在 Build > User commands 中添加

"<sumatrapdfdir>\SumatraPDF.exe" -reuse-instance -forward-search ?c:rme" @ -inverse-search "<texstudiodir>\texstudio.exe %%f -line %%l" "?m.pdf"

将其命名为user0:sumatrapdf。 这里的 ?c:rme@%%?m. 均是 TeXStudio 自己定义的有特殊含义的字符。 接下来,在 Build > Build & View 中将txs:///compile | txs:///view改为txs:///compile | txs:///user0。 最后在 Menus 中将 View 的命令由txs:///view改为txs:///user0。 完成以上设置后,关闭窗口。 这时, 用户使用快捷键F5F7均可打开 SumatraPDF 并且实现了正反向搜索。 在我的手册 Install-LaTeX 中还介绍了使用 DDE 配置正反向搜索的方法,感兴趣的用户可以参考。

接下来介绍 VS Code 中的配置方案。 首先用户要安装 LaTeX-Workshop,然后打开设置的 json 文件,在其中添加以下代码:

"latex-workshop.view.pdf.viewer": "external",
"latex-workshop.view.pdf.ref.viewer":"external",
"latex-workshop.view.pdf.external.viewer.command": "<sumatrapdfroot>/SumatraPDF.exe",
"latex-workshop.view.pdf.external.viewer.args": [
    "-inverse-search",
    "\"<vscoderoot>/bin/code.cmd\" -r -g \"%f:%l\"",
    "%PDF%"
],
"latex-workshop.view.pdf.external.synctex.command": "<sumatrapdfroot>/SumatraPDF.exe",
"latex-workshop.view.pdf.external.synctex.args":[
    "-forward-search",
    "%TEX%",
    "%LINE%",
    "%PDF%",
],

注意在 json 文件中要将路径中的\写作/。 下面略加解释以上设置的用意。

为了能够使用 SumatraPDF 进行正反向搜索,首先需要将

"latex-workshop.view.pdf.viewer"

"latex-workshop.view.pdf.ref.viewer"

都设置为外部(external)。 然后在

"latex-workshop.view.pdf.external.viewer.command"

"latex-workshop.view.pdf.external.viewer.args"

中分别设置打开 PDF 阅读器的命令和所需参数。 这些参数用于进行反向搜索。 类似地,正面搜索的命令和参数分别定义在

"latex-workshop.view.pdf.external.synctex.command"

"latex-workshop.view.pdf.external.synctex.args"

完成以上设置,用户使用时在左侧点击 View LaTeX PDF 便可打开 SumatraPDF,之后点击 navigate, select and edit > SyncTeX from cursor 便可进行正向搜索。 当然,VS Code 还提供了快捷键供用户使用,用户可以自行查询或更改为自己喜欢的按键组合。

最后需要指出的是,目前 TeXStudio 和 VS Code 的 LaTeX-Workshop 都提供了内置阅读器以展示编译结果。 内置阅读器对于正反向搜索的支持也不错,大部分情况都可以满足要求,而一些特殊的要求(如动画效果等)只能在 Adobe Reader 等少数几款阅读器中显示。

除了 PDF 文件,SumatraPDF 还支持很多其他格式的文件阅读,例如 djvu,因此我还是推荐用户常备它。

以上心得均为个人查询和探索的结果,若有错漏,还请指出。 谢谢大家的阅读。

2 条评论

发布
问题