解决vscode编译latex的两个小困扰

在vscode中编译LaTeX时,时常会遇到几个小问题。

今天我尝试将这些小问题与copilot进行交流,没想到它很快给出了比较专业准确的回答,经过几轮对话,最终问题也都得到了解决。最后我把copilot的回答总结了一下得到了这篇文档,文中的解决办法全部来自copilot,因此个别细节的正确性还有待考证。

LaTeX Workshop扩展的报错弹窗

问题描述

每次在写.tex文件时使用Ctrl+S来保存当前完成的工作,扩展LaTeX Workshop都会默认会编译一遍,但是这样编译肯定是会报错的,因为我设置的默认编译器是pdflatex,而一般写中文文档时需要用xelatex编译,有时还有bibtex,因此每次按下Ctrl+S后LaTeX Workshop扩展都给我弹窗提示报错

1
Recipe terminated with error. Retry building the project.

那么有没有什么解决办法呢?比如让Ctrl+S变为单纯的保存功能而不自动进行编译,或者隐藏LaTeX Workshop扩展的弹窗提示报错?

在此之前我已经设置了常用编译链xelatex -> bibtex -> xelatex*2的快捷键为Alt+X,因此我希望取消这个保存(Ctrl+S)后自动用pdflatex编译的功能。

解决办法

在 VS Code 中,可以通过修改设置来禁止 LaTeX Workshop 扩展在保存文件时自动编译 LaTeX 文件。以下是具体步骤:

  1. 打开 VS Code 的设置。你可以通过顶部菜单的 文件 -> 首选项 -> 设置,或者使用快捷键 Ctrl+, 来打开。
  2. 在设置中,找到 LaTeX Workshop 部分。
  3. LaTeX Workshop 设置中,找到 latex.autoBuild.onSave.enabled 选项,它默认是 onFileChange,现在选择 never

现在,当你保存 LaTeX 文件时,VS Code 不会自动编译它。

补充一

至于隐藏 LaTeX Workshop 扩展的弹窗提示报错,copilot没有找到直接的设置选项。但是,你可以尝试在设置中找到 latex.recipe.default 选项,然后将其设置为一个不会产生错误的编译命令,这可能可以避免弹窗提示报错。

补充二

这个设置决定了 LaTeX Workshop 扩展何时自动编译 LaTeX 项目。

  • onSave:在保存 .tex 文件时编译项目。也就是说,每当你在 VS Code 中保存 LaTeX 文件时,VS Code 将自动编译你的 LaTeX 项目。
  • onFileChange:在检测到任何依赖文件的变化时编译项目,即使这些变化是由其他应用程序引起的。

latexmk编译命令绑定快捷键

问题描述

每次用latexmk命令编译时,都需要在内置终端输入latexmk main.tex,虽然只是一段短短的字符,但是在vscode中怎么能不用快捷键呢?因此我决定把这个命令和Ctrl+D绑定一下,这样和保存Ctrl+S就可以一起丝滑操作了,先保存再编译,而且也没有报错弹窗了,非常nice!

解决办法

  1. 在 VS Code 中,你可以通过创建一个任务(task)来运行 latexmk 命令,然后将这个任务绑定到快捷键 Ctrl+S。以下是具体步骤:

    1. 在 VS Code 中,打开你的工作区的 .vscode 目录(如果没有,你需要创建一个)
    2. .vscode 目录中,创建一个名为 tasks.json 的文件
    3. tasks.json 文件中,添加以下内容:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    {
    "version": "2.0.0",
    "tasks": [
    {
    "label": "build latex",
    "type": "shell",
    "command": "latexmk",
    "args": ["main.tex"],
    "group": {
    "kind": "build",
    "isDefault": true
    }
    }
    ]
    }

    这将创建一个名为 "build latex" 的任务,它会运行 latexmk main.tex 命令。

    1. 打开 VS Code 的键盘快捷键设置。你可以通过顶部菜单的 文件 -> 首选项 -> 键盘快捷键,或者使用快捷键 Ctrl+K Ctrl+S 来打开。
    2. 在键盘快捷键设置中,找到 任务:运行生成任务 这一项,然后将其快捷键设置为 Ctrl+D

    现在,每次你按 Ctrl+D,VS Code 就会运行 "build latex" 任务,即运行 latexmk main.tex 命令。

其他问答:latexmk是什么

latexmk 是一个用于自动编译 LaTeX 文档的工具。它可以自动运行 LaTeX 编译器,以及其他必要的工具(如 bibtex 或 biber),以生成最终的文档。

基本的 latexmk 命令如下:

1
latexmk [选项] [文件...]

其中,[选项] 是可选的命令行选项,[文件...] 是一个或多个要编译的 LaTeX 文件。

一些常用的 latexmk 选项包括:

  • -pdf:生成 PDF 文件(使用 pdflatex)。
  • -bibtex:运行 bibtex 或 biber(如果需要)。
  • -c:清理所有非日志文件。
  • -C:清理所有生成的文件,包括 PDF 文件。

例如,如果你有一个名为 main.tex 的 LaTeX 文件,你可以使用以下命令来编译它:

1
latexmk -pdf -bibtex main.tex

这将使用 pdflatex 和 bibtex(如果需要)来编译 main.tex,并生成一个 PDF 文件。