vscode latex 踩坑记 : 文献索引 bib 文件和setting.json的那点事

两年前打美赛试着用过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因为它没得选,但是可以手动点击编译时是有图形界面可以选择的呀!

vscode latex 踩坑记 : 文献索引 bib 文件和setting.json的那点事_第1张图片

 

 

 

 

你可能感兴趣的:(latex)