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

编辑器 2019-10-29 21:38  浏览 :2575
[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,因此我还是推荐用户常备它。 以上心得均为个人查询和探索的结果,若有错漏,还请指出。 谢谢大家的阅读。
发布评论
登录后方可评论!点击登录
全部评论 (2)
frank.xin
1楼 · 2019-10-30 09:51

如果配置完不生效,可以关闭软件重新打开再试一次,另外直接打开 SumatraPDF 是大概率无法反向搜索的,需要在编辑器内部点击预览打开的 SumatraPDF 才可以。VSCode 中可以通过在某一行文字使用快捷键 `Ctrl`+'Alt`+`J` 定位到 PDF 的对应位置。

乙醇
2楼 · 2020-03-04 00:58

在我的测试中, 在设置完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