vscode里面编写好代码后,Ctrl+s编译,然后尝试Ctrl+Alt+V查看PDF,每次显示:Cannot view file PDF file. File not found: file:F.pdf。
,然后再次Ctrl+s就可以了.但麻烦。
下面是我的jason文件:
{
"latex-workshop.latex.tools": [
// 定义编译工具 xelatex
{
"name": "xelatex",
"command": "xelatex",
"args": [
"-synctex=1", // 启用 SyncTeX 支持
"-interaction=nonstopmode", // 设置交互模式为非停止模式,以便自动处理错误
"-file-line-error", // 显示文件和行号错误信息
"-output-directory=./out", // 将输出文件保存在 ./out 目录中
"%DOC%" // 编译当前文档
]
},
// 定义编译工具 lualatex
{
"name": "lualatex",
"command": "lualatex",
"args": [
"-synctex=1", // 启用 SyncTeX 支持
"-interaction=nonstopmode", // 设置交互模式为非停止模式,以便自动处理错误
"-file-line-error", // 显示文件和行号错误信息
"-output-directory=./out", // 将输出文件保存在 ./out 目录中
"%DOC%" // 编译当前文档
]
}
],
"latex-workshop.latex.recipes": [
// 定义编译配方 xelatex with move
{
"name": "xelatex with move",
"tools": [
"xelatex"
],
"outputDir": "./out", // 设置编译输出文件的目录为 ./out
"viewer": {
"external": {
"command": "cp %DIR%/%DOCFILE%.pdf %DOCFILE%.pdf.backup && cp %DIR%/%DOCFILE%.pdf %DOCFILE%.pdf", // 复制生成的 PDF 文件到源文件目录
"forwardSearch": {
"args": [] // 设置正向搜索的参数
}
}
}
},
// 定义编译配方 lualatex
{
"name": "lualatex",
"tools": [
"lualatex"
],
"outputDir": "./out", // 设置编译输出文件的目录为 ./out
"viewer": {
"external": {
"command": "cp %DIR%/%DOCFILE%.pdf %DOCFILE%.pdf.backup && cp %DIR%/%DOCFILE%.pdf %DOCFILE%.pdf", // 复制生成的 PDF 文件到源文件目录
"forwardSearch": {
"args": [] // 设置正向搜索的参数
}
}
}
}
],
"latex-workshop.view.pdf.viewer": "tab", // 使用内置的 PDF 预览功能,在 VS Code 的标签页中显示 PDF 文件
"latex-workshop.synctex.afterBuild.enabled": true, // 启用编译后自动生成的 SyncTeX 文件
"latex-workshop.latex.autoBuild.run": "onSave", // 在保存文档时自动触发编译
"latex-workshop.latex.outDir": "./out", // 指定编译输出文件的目录
"latex-workshop.latex.clean.fileTypes": [
// 指定清理命令要删除的文件类型
"*.aux",
"*.bbl",
"*.blg",
"*.idx",
"*.ind",
"*.lof",
"*.lot",
"*.out",
"*.toc",
"*.acn",
"*.acr",
"*.alg",
"*.glg",
"*.glo",
"*.gls",
"*.fdb_latexmk",
"*.fls",
"*.log",
"*.nav",
"*.snm",
"*.synctex(busy)",
"*.synctex.gz",
"*.tdo",
"*.bcf",
"*.run.xml",
"*.vrb"
],
"latex-workshop.latex.watch.usePolling": true, // 启用文件轮询监视器
"latex-workshop.message.update.show": false, // 关闭 LaTeX Workshop 的更新消息通知
"explorer.confirmDelete": false, // 禁用删除确认
"editor.wordWrap": "on", // 启用自动换行
"latex-workshop.chktex.enabled": true, // 启用 ChkTeX 工具检查 LaTeX 文件中的语法问题
"editor.minimap.enabled": false, // 禁用小地图
"editor.unicodeHighlight.allowedLocales": {
"zh-hans": true // 允许中文
},
"security.workspace.trust.untrustedFiles": "open"
}
没有完全弄懂你的上述配置,但是要想解决的话,也许可以配置一个xelatex*2
的recipe
放到"latex-workshop.latex.recipes"
内部
{
"name": "xelatex*2",
"tools": [
"xelatex",
"xelatex",
],
},
我想要解决你的问题可能需要研究一下latex-workshop
插件预览pdf
文件的位置信息的文档
有可能这与你采用如下配置移动pdf文件位置有关
"outputDir": "./out", // 设置编译输出文件的目录为 ./out
"viewer": {
"external": {
"command": "cp %DIR%/%DOCFILE%.pdf %DOCFILE%.pdf.backup && cp %DIR%/%DOCFILE%.pdf %DOCFILE%.pdf", // 复制生成的 PDF 文件到源文件目录
"forwardSearch": {
"args": [] // 设置正向搜索的参数
}
}
}
个人觉得如非特别有必要,不要修改过多默认配置
连着两次(或以上次数)xelatex都不会生成out文件夹,需要先一次xelatex,然后Ctrl+Alt+V触发一下,再xelatex一次,就能生成out文件夹了(里面各种辅助文件包括pdf).
另外,只要成功生成一次pdf,以后这个文件就算各种操作(改文件名,改代码,删除out文件),只要编译一次即可.
@u124578 我可以问问为什么一定要
out
文件夹吗?除非是项目本身的路径格式要求,不然我认为普通的目录结构(如下)也是可以接受的.
我不太可能开一个虚拟机然后如你那样配置去尝试复现你的问题,而且对于你的那些快捷键的逻辑我也不能很好地确定.因此很难给出很好的答复.
但我感觉你要实现上述自动化需求的话,需要先配置一个
mkdir
的命令,实现在当前路径下如果没有out文件夹则新建的逻辑,然后再xelatex
编译,最后move the file.实际上latex-workshop默认的配置就很好了,没必要如此折腾一份配置单.如果还有更进一步的需要,我本人建议你去latex-workshop-issues提
issues
,作者回复处理速度挺快的.@u70550 我觉得你需要准确表述你需要这个命令做什么?
例如 按一个快捷键,自动用xelatex编译当前文件,之后把所有文件移动到out(如果没有则新建)文件夹.
@u70550 因为我有好几个tex文件在用一个测试文件夹下面,如果没有out文件夹,则所有的辅助文件都在一起阻碍了看tex文件.
还有就是网上各种各样的配置文件,我不想完全拿来就用,因为不懂的话没法修改.而且几乎都用那个
SmatraPDF
@u124578 这三个文件之间的关系是什么呢,如果他们无关的话,可以隔离一下,用
folder1/1.tex
folder2/2.tex
来组织你的文件,同时1.tex
这样的命名习惯不够好,完全不知道这个代码是在做什么.如果他们是并列的关系(比如一篇文章的三个章节),可以有一个
main.tex
,在其中用相对路径调用\input{xxxx}
来输出文档