SumatraPDF 阅读器该怎么设置——以 TeXStudio 和 VS Code 为例
编辑器
2019-10-29 21:38 浏览 :8341
[SumatraPDF](https://www.sumatrapdfreader.org/download-free-pdf-viewer.html) 阅读器在 LaTeX 用户群中比较常见。
以前 CTeX 套装将它集成以配合 WinEdt 使用,现如今依然有很多 WinEdt 用户青睐于这样的搭配,SumatraPDF 官网也给出了 [Use Sumatra as a pre-viewer for LaTeX editors](https://www.sumatrapdfreader.org/docs/Use-Sumatra-as-a-pre-viewer-for-LaTeX-editors.html) 的手册,其中就包含了 TeXnicCenter、WinEdt、Emacs 和 Vim。
目前我常用的两款编辑器为 TeXStudio 和 VS Code,而今天(2019.10.29)恰巧碰到了契机,稍微研究了一下和 SumatraPDF 有关的设置方案。
以下就是今天的心得。
在介绍心得之前,假设 main.tex 已经被编译为 main.pdf,其中 main.tex 内容如下:
```tex
\documentclass{article}
\usepackage{lipsum}
\begin{document}
\section{main file}
\lipsum[1]
\input{subfile.tex}
\end{document}
```
而 subfile.tex 内容如下:
```tex
\section{subfile}
\lipsum[2]
\[ a = b \]
```
同时,假设 `` 是 SumatraPDF 的路径,同理,`` 和 `` 分别是 TeXStudio 和 VS Code 的路径。
在配置之前,我首先简要介绍下使用命令行的方法。
事实上,SumatraPDF 允许通过添加命令行参数来形成不同的阅读效果。
对 LaTeX 用户而言,最重要的效果就是正反向搜索。
在这里给出我所使用的命令行代码。
使用 TeXStudio 进行反向搜索的代码是:
```bash
\SumatraPDF.exe -reuse-instance -forward-search main.tex 4 -inverse-search "\"\texstudio.exe\" \"%f\" -line %l" main.pdf
```
其中,
```bash
-reuse-instance
```
表示只打开一个 SumatraPDF 窗口;
```bash
-forward-search main.tex 4
```
表示对 main.tex 的第 4 行进行正向搜索(在 SumatraPDF 中表现为 main.pdf 对应位置变蓝);
```bash
-inverse-search "\"\texstudio.exe\" \"%f\" -line %l" main.pdf
```
表示使用 TeXStudio 对 main.pdf 进行反向搜索(表现为双击 main.pdf 的某部分会在 TeXStudio 中返回对应的 tex 文件的某行)。
使用 VS Code 进行反向搜索的代码是:
```bash
\SumatraPDF.exe -reuse-instance -forward-search main.tex 4 -inverse-search "\"\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 中添加
```
"\SumatraPDF.exe" -reuse-instance -forward-search ?c:rme" @ -inverse-search "\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`。
完成以上设置后,关闭窗口。
这时, 用户使用快捷键 `F5` 和 `F7`均可打开 SumatraPDF 并且实现了正反向搜索。
在我的手册 [Install-LaTeX](https://github.com/OsbertWang/install-latex) 中还介绍了使用 DDE 配置正反向搜索的方法,感兴趣的用户可以参考。
接下来介绍 VS Code 中的配置方案。
首先用户要安装 LaTeX-Workshop,然后打开设置的 json 文件,在其中添加以下代码:
```json
"latex-workshop.view.pdf.viewer": "external",
"latex-workshop.view.pdf.ref.viewer":"external",
"latex-workshop.view.pdf.external.viewer.command": "/SumatraPDF.exe",
"latex-workshop.view.pdf.external.viewer.args": [
"-inverse-search",
"\"/bin/code.cmd\" -r -g \"%f:%l\"",
"%PDF%"
],
"latex-workshop.view.pdf.external.synctex.command": "/SumatraPDF.exe",
"latex-workshop.view.pdf.external.synctex.args":[
"-forward-search",
"%TEX%",
"%LINE%",
"%PDF%",
],
```
注意在 json 文件中要将路径中的 `\` 写作 `/`。
下面略加解释以上设置的用意。
为了能够使用 SumatraPDF 进行正反向搜索,首先需要将
```json
"latex-workshop.view.pdf.viewer"
```
和
```json
"latex-workshop.view.pdf.ref.viewer"
```
都设置为外部(external)。
然后在
```json
"latex-workshop.view.pdf.external.viewer.command"
```
和
```json
"latex-workshop.view.pdf.external.viewer.args"
```
中分别设置打开 PDF 阅读器的命令和所需参数。
这些参数用于进行反向搜索。
类似地,正面搜索的命令和参数分别定义在
```json
"latex-workshop.view.pdf.external.synctex.command"
```
和
```json
"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,因此我还是推荐用户常备它。
以上心得均为个人查询和探索的结果,若有错漏,还请指出。
谢谢大家的阅读。
如果配置完不生效,可以关闭软件重新打开再试一次,另外直接打开 SumatraPDF 是大概率无法反向搜索的,需要在编辑器内部点击预览打开的 SumatraPDF 才可以。VSCode 中可以通过在某一行文字使用快捷键 `Ctrl`+'Alt`+`J` 定位到 PDF 的对应位置。
在我的测试中, 在设置完vscode中的latex workshop中的json文件后, 仍需要将反向搜索的命令添加到SumatraPDF中, 但是按照我的想法来看, 反向搜索应该是由SumatraPDF主导的, 在SumatraPDF的设置中填写"\Code.exe" "\resources\app\out\cli.js" -r -g "%f":"%l", 且在latex workshop中填写反向搜索相关的命令才可以实现反向搜索, 也就是同时使用您的配置和 https://zhuanlan.zhihu.com/p/38178015 中的配置才可以达到反向搜索的目的, 不知道在您那里需不需要额外配置SumatraPDF