两年前打美赛试着用过latex,还记得当时用的是sublime+SumatraPDF+latex 可以实现双向定位。但当时出现了很多加入图片的位置无法正确出现的bug ,总之是一地鸡毛,最后也铩羽而归(当然也是因为自己很菜)
2019年了,vscode越来越火,各种插件层出不断,自然会出现对latex的扩展。然后我尝试了一个晚上,用来调整这个bib文件的配置,讨论如下。(其实算是个新手,对latex的编译过程没怎么理解,是在这个晚上反复试验后才逐渐摸索到了一些门道)
网上配置vscode+latex的教程很多。关键在于setting.json的修改。
我第一次参考的是这篇文章:
https://blog.csdn.net/qq_28303495/article/details/89848209
{
"latex-workshop.latex.recipes": [
{
"name": "xelatex",
"tools": [
"xelatex"
]
},
{
"name": "latexmk",
"tools": [
"latexmk"
]
},
{
"name": "pdflatex -> bibtex -> pdflatex*2",
"tools": [
"pdflatex",
"bibtex",
"pdflatex",
"pdflatex"
]
}
],
"latex-workshop.latex.tools": [{
"name": "latexmk",
"command": "latexmk",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"-pdf",
"%DOC%"
]
}, {
"name": "xelatex",
"command": "xelatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOC%"
]
}, {
"name": "pdflatex",
"command": "pdflatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOC%"
]
}, {
"name": "bibtex",
"command": "bibtex",
"args": [
"%DOCFILE%"
]
}],
"latex-workshop.view.pdf.viewer": "tab",
"latex-workshop.latex.clean.fileTypes": [
"*.aux",
"*.bbl",
"*.blg",
"*.idx",
"*.ind",
"*.lof",
"*.lot",
"*.out",
"*.toc",
"*.acn",
"*.acr",
"*.alg",
"*.glg",
"*.glo",
"*.gls",
"*.ist",
"*.fls",
"*.log",
"*.fdb_latexmk"
],
}
有两个注意事项:在修改setting.json时应该注意不是覆盖,而是添加进去。因为原来很可能有其他的配置语句也在里面(比如我自己的有一些个性化的设置和leetcode插件的配置)。直接覆盖会损失惨重···
第二个注意事项:latex-workshop.latex.recipes暂时只能使用第一个(这个观点来自于https://www.meiwen.com.cn/subject/cejdrxtx.html)使我最终才豁然开朗,当然这是后话。
这个配置的问题在于,只会使用第一个recipe
{
"name": "xelatex",
"tools": [
"xelatex"
]
},
所以会导致什么问题呢?
参考文献导入的时候会产生一些坑(如何导入参考文献:https://blog.csdn.net/evergreeen/article/details/7710001)
假设我们的核心文件是hello.tex,我们的参考文件是ref.bib,在hello.tex文末通过 \bibliography{ref} 来指明引用的文件叫做ref.bib。然后编译hello.tex,发现文章除了参考文献之外的其他内容都是正常的,唯独参考文献。这是因为只用了xelatex来编译hello.tex。而ref.bib也需要编译,通过bibtex。而直接在命令行里输入bibtex ref.bib会有问题报错说找不到ref.aux。本文件夹里只有hello.aux,因此只需要将ref.bib改名为hello.bib即可(在hello.tex中也需要将对应的 \bibliography{ref} 改为 \bibliography{hello}),然后先编译hello.tex(这个能在vscode里通过ctrl+s自动保存hello.tex进而自动编译)生成hello.aux,再通过命令行编译hello.bib生成hello.bbl,然后再编译hello.tex更新hello.aux,然后再编译hello.tex将其与参考文献(hello.bbl)真正结合起来。所以一共需要编译4次!
很麻烦!那么我们只需要对上述的三个recipe调换顺序即可,把第三个放到第一位置:
"latex-workshop.latex.recipes": [
{
"name": "pdflatex -> bibtex -> pdflatex*2",
"tools": [
"pdflatex",
"bibtex",
"pdflatex",
"pdflatex"
]
}
{
"name": "xelatex",
"tools": [
"xelatex"
]
},
{
"name": "latexmk",
"tools": [
"latexmk"
]
},
],
这样就可以了通过一次单纯的ctrl+s自动顺序完成全部4次编译!而且也不必保证.bib文件名必须与.tex一致。缺点是每次都会编译4次,花费约7秒钟。如果只是单纯的一次编译仅需要不到3秒(pdflatex,xelatex,latexmk可以互换,个人感觉采用pdflatex比xelatex快,latexmk最慢)。
另一篇博客(https://blog.csdn.net/zxyhappiness/article/details/98639094)采用的是
{
"latex-workshop.latex.recipes":[
{
"name": "xe->bib->xe->xe",
"tools": [
"xelatex",
"bibtex",
"xelatex",
"xelatex"
]
}
],
"latex-workshop.latex.tools":[
{
// 编译工具和命令
"name": "xelatex",
"command": "xelatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"-pdf",
"%DOCFILE%"
]
},
{
"name": "pdflatex",
"command": "pdflatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOCFILE%"
]
},
{
"name": "bibtex",
"command": "bibtex",
"args": [
"%DOCFILE%"
]
}
],
他没有这两项"latex-workshop.view.pdf.viewer" (用来指定pdf预览的工具,tab就是在vscode内部,也是默认方式,external是用采用第三方pdf阅读器打开),"latex-workshop.latex.clean.fileTypes"(指定清除的文件类型)。
就在我快写完这篇博客时我突然间看到这个窗口,其实是可以直接鼠标选择采用哪种recipe(组合)进行编译的。是我智障了orz。用脑子想想,保存时自动编译的功能当然选择第一个recipe因为它没得选,但是可以手动点击编译时是有图形界面可以选择的呀!