2025-04-03 Latex学习1——本地配置Latex + VScode环境

文章目录

  • [1 安装 Latex](#1 安装 Latex)
  • [2 安装 VScode](#2 安装 VScode)
  • [3 配置环境](#3 配置环境)
    • [3.1 汉化 VScode](#3.1 汉化 VScode)
    • [3.2 安装 latex 插件](#3.2 安装 latex 插件)
    • [3.3 配置解释](#3.3 配置解释)
  • [4 编译示例](#4 编译示例)
  • [5 加快你的编译](#5 加快你的编译)
    • [5.1 取消压缩](#5.1 取消压缩)
    • [5.2 使用 PDF 代替图片](#5.2 使用 PDF 代替图片)
  • [6 参考文章](#6 参考文章)

1 安装 Latex

本文配置环境:

  • Windows11
  1. 打开清华大学开源软件镜像站:https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/Images/,下载 texlive.iso 文件。
  1. 使用资源管理器打开。
  1. 右键"install-tl-windows.bat"文件,选择以管理员身份运行(进行安装),需等待一会儿。
  1. 进行如下配置:

    • installation root:修改安装路径。
    • 安装 TeXworks 前端:取消勾选(使用 VScode 就不用这个)。

    设置完成后点击安装。

  1. 点击键盘上的菜单按键,输入"pow",打开 Windows PoeweShell。

    输入命令 "latex",检查是否安装成功。

2 安装 VScode

  1. 打开 VScode 官网:https://code.visualstudio.com/,下载安装包。
  1. 运行安装包,勾选"创建桌面快捷方式"和"添加到系统 PATH"。

    安装路径自行修改(严禁路径含中文或空格)。

3 配置环境

3.1 汉化 VScode

  1. 打开 VScode,点击左侧插件图标,搜索"chinese",安装汉化插件。
  1. 安装完成后,点击重启,启用汉化。

3.2 安装 latex 插件

  1. 点击左侧插件图标,搜索"latex",安装"LaTeX Workshop"插件。
  1. 点击左下角设置按钮,选择设置,打开设置面板。
  1. 点击右上角文件按钮,打开设置的 json 配置文件。
  1. 将以下代码拷贝到 json 文件中。
json 复制代码
{
    "workbench.colorTheme": "Default Light Modern",

    "editor.wordWrap": "on",

    //------------------------------LaTeX 配置----------------------------------

    // 右键菜单
    "latex-workshop.showContextMenu": true,

    // 从使用的包中自动补全命令和环境
    "latex-workshop.intellisense.package.enabled": true,

    // 编译出错时设置是否弹出气泡设置
    "latex-workshop.message.error.show": false,
    "latex-workshop.message.warning.show": false,

    // 输出路径
    "latex-workshop.latex.outDir": "./build",

    // 编译工具和命令
    "latex-workshop.latex.tools": [
        {
            "name": "xelatex",
            "command": "xelatex",
            "args": [
                "-synctex=1",
                "-interaction=nonstopmode",
                "-file-line-error",
                "--output-directory=%OUTDIR%",
                "%DOCFILE%"
            ]
        },
        {
            "name": "pdflatex",
            "command": "pdflatex",
            "args": [
                "-synctex=1",
                "-interaction=nonstopmode",
                "-file-line-error",
                "--output-directory=%OUTDIR%",
                "%DOCFILE%"
            ]
        },
        {
            "name": "latexmk",
            "command": "latexmk",
            "args": [
                "-synctex=1",
                "-interaction=nonstopmode",
                "-file-line-error",
                "-pdf",
                "--output-directory=%OUTDIR%",
                "%DOCFILE%"
            ]
        },
        {
            "name": "bibtex",
            "command": "bibtex",
            "args": [
                "%OUTDIR%/%DOCFILE%",
                // "--output-directory=%OUTDIR%",
            ]
        }
    ],
    "latex-workshop.latex.recipes": [
        {
            "name": "XeLaTeX",
            "tools": [
                "xelatex"
            ]
        },
        {
            "name": "PDFLaTeX",
            "tools": [
                "pdflatex"
            ]
        },
        {
            "name": "BibTeX",
            "tools": [
                "bibtex"
            ]
        },
        {
            "name": "LaTeXmk",
            "tools": [
                "latexmk"
            ]
        },
        {
            "name": "xelatex -> bibtex -> xelatex*2",
            "tools": [
                "xelatex",
                "bibtex",
                "xelatex",
                "xelatex"
            ]
        },
        {
            "name": "pdflatex -> bibtex -> pdflatex*2",
            "tools": [
                "pdflatex",
                "bibtex",
                "pdflatex",
                "pdflatex"
            ]
        },
    ],
    
    // 文件清理。此属性必须是字符串数组
    "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",
        // "*.synctex.gz"
    ],

    // 设置为 onBuilt 在构建成功后清除辅助文件
    "latex-workshop.latex.autoClean.run": "onBuilt",

    // 使用第一个编译组合
    "latex-workshop.latex.recipe.default": "lastUsed",
    
    // 设置是否自动编译
    "latex-workshop.latex.autoBuild.run": "never",

    // 用于反向同步的内部查看器的键绑定。ctrl/cmd +点击(默认)或双击
    "latex-workshop.view.pdf.internal.synctex.keybinding": "double-click",
}

​ 到此配置环境完成。

3.3 配置解释

  1. 编译输出路径

    这里设置为当前目录下的 "./build" 文件夹。设置为空则是同目录。

    json 复制代码
    // 输出路径
    "latex-workshop.latex.outDir": "./build",
  2. 编译工具命令

    定义了单个工具,具体内容看注释。参考文档:Compile · James-Yu/LaTeX-Workshop Wiki

    json 复制代码
    // 编译工具和命令
    "latex-workshop.latex.tools": [
        {
            "name": "xelatex",
            "command": "xelatex",
            "args": [
                "-synctex=1",
                "-interaction=nonstopmode",
                "-file-line-error",
                "--output-directory=%OUTDIR%",
                "%DOCFILE%"
            ]
        },
        {
            "name": "pdflatex",
            "command": "pdflatex",
            "args": [
                "-synctex=1",
                "-interaction=nonstopmode",
                "-file-line-error",
                "--output-directory=%OUTDIR%",
                "%DOCFILE%"
            ]
        },
        {
            "name": "latexmk",
            "command": "latexmk",
            "args": [
                "-synctex=1",
                "-interaction=nonstopmode",
                "-file-line-error",
                "-pdf",
                "--output-directory=%OUTDIR%",
                "%DOCFILE%"
            ]
        },
        {
            "name": "bibtex",
            "command": "bibtex",
            "args": [
                "%OUTDIR%/%DOCFILE%",
                // "--output-directory=%OUTDIR%",
            ]
        }
    ],
  3. 编译工具链

    定义编译工具链,由一个或多个工具组成。在插件中显示如下

    json 复制代码
    "latex-workshop.latex.recipes": [
        {
            "name": "XeLaTeX",
            "tools": [
                "xelatex"
            ]
        },
        {
            "name": "PDFLaTeX",
            "tools": [
                "pdflatex"
            ]
        },
        {
            "name": "BibTeX",
            "tools": [
                "bibtex"
            ]
        },
        {
            "name": "LaTeXmk",
            "tools": [
                "latexmk"
            ]
        },
        {
            "name": "xelatex -> bibtex -> xelatex*2",
            "tools": [
                "xelatex",
                "bibtex",
                "xelatex",
                "xelatex"
            ]
        },
        {
            "name": "pdflatex -> bibtex -> pdflatex*2",
            "tools": [
                "pdflatex",
                "bibtex",
                "pdflatex",
                "pdflatex"
            ]
        },
    ],

    对于最后两个编译链,解释如下(以 xeletax 为例):

    • xeletax * 1:生成辅助文件,为后续处理做准备。具体过程包括
      • 解析主 .tex 文件。
      • 生成 .aux 文件(包含引用和参考文献信息)。
      • 生成 .log 文件(日志信息)。
      • 生成 .synctex.gz 文件(用于反向搜索)。
      • 生成初步的 PDF(此时引用和参考文献标记为问号 [?])。
    • bibtex:处理参考文献。具体过程包括
      • 读取 .aux 文件中的引用信息。
      • 从 .bib 文献数据库中提取相关条目。
      • 生成 .bbl 文件(格式化后的参考文献列表)。
      • 生成 .blg 文件(bibtex 日志)。
    • xeletax * 2:将参考文献信息整合到文档中。具体过程包括
      • 读取 .bbl 文件内容。
      • 更新文档中的引用标记。
      • 重新生成 .aux 文件(现在包含正确的参考文献信息)。
      • 生成中间 PDF(此时参考文献已正确显示,但交叉引用可能仍不正确)。
    • xeletax * 3:解决所有交叉引用。具体过程包括
      • 读取更新后的 .aux 文件。
      • 解析所有交叉引用(章节、图表、公式编号等)。
      • 确保所有引用编号最终正确。
      • 生成最终 PDF(所有引用和参考文献都正确显示)。

    如果跳过某些步骤:

    • 只编译一次(xelatex):引用显示为 [?]。
    • 编译两次,无 bibtex(xelatex -> xelatex):参考文献缺失。
    • 编译两次,有 bibtex(xelatex -> bibtex -> xelatex):交叉引用可能不正确。
  4. 文件清理

    编译过程中,latex 会生成许多中间文件。

    • clean.fileTypes:定义编译完成后清理的文件后缀名。
    • autoClean.run:决定编译完成后是否清理文件。
    json 复制代码
    // 文件清理。此属性必须是字符串数组
    "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",
        // "*.synctex.gz"
    ],
    
    // 设置为 onBuilt 在构建成功后清除辅助文件
    "latex-workshop.latex.autoClean.run": "onBuilt",
  5. 自动编译

    可以选择在文件内容更改时或保存文件时自动编译。

    文件较大时,编译时间会很长,个人不习惯自动编译,因此选择 never。

    json 复制代码
    // 使用上一个编译组合
    "latex-workshop.latex.recipe.default": "lastUsed",
    
    // 设置是否自动编译
    "latex-workshop.latex.autoBuild.run": "never",
  6. 反向定位

    设置从 pdf 到 tex 文件的反向定位方式,个人习惯鼠标双击定位。

    json 复制代码
    // 用于反向同步的内部查看器的键绑定。ctrl/cmd +点击(默认)或双击
    "latex-workshop.view.pdf.internal.synctex.keybinding": "double-click",

​ 上述所有内容可直接在用户设置中搜索对应内容配置,并查看相关介绍。以反向定位为例:

4 编译示例

  1. 创建文件夹 test,使用 VScode 打开该文件夹。
  2. 新建 "new.tex" 文件,输入如下内容。
tex 复制代码
\documentclass{article} 

\begin{document}

hello world!

\end{document}
  1. 进入 TEX 插件页面,选择编译方式,点击编译。这里选择 LaTeXmk。选择 XeLaTeX 或 PDFLaTeX 也可。

    若左侧没有 TEX 插件栏,新建 tex 文件即可显示。

  1. 回到文件页面,可看到当前目录下新建了 ./build 文件夹,编译的 pdf 放在该目录中。右上角点击双栏按钮可在右侧查看编译后的 pdf。

    说明:"new.synctex.gz" 存放反向编译内容,删除后不可以双击 pdf 定位到对应 tex 位置。

  1. 编译一次后,可点击左上角编译按钮进行快速编译,选择的编译方式由如下设置决定:

    json 复制代码
    // 使用上一个编译组合
    "latex-workshop.latex.recipe.default": "lastUsed",

5 加快你的编译

5.1 取消压缩

​ 最立竿见影的方法是取消 LaTeX 编译器对 PDF 的压缩。方法是在 tex 文档开头加入如下代码:

tex 复制代码
\documentclass{article} 

\usepackage{...}

\special{dvipdfmx:config z 0} % 取消 PDF 压缩,加快速度,最终版本生成时注释该行

\begin{document}

hello world!

\end{document}

​ 该方法可以将速度加快 3~5 倍(60s -> 15s),但代价是 PDF 大小会成倍增加(60MB -> 700MB)。

5.2 使用 PDF 代替图片

​ 对于图像文件,建议保存为 .pdf 。

​ 因为 .pdf 图像的编译速度比 .png 文件快,其编译过程不需要调用 libpng 库。

6 参考文章

相关推荐
西岸行者2 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意2 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码2 天前
嵌入式学习路线
学习
毛小茛3 天前
计算机系统概论——校验码
学习
babe小鑫3 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms3 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下3 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。3 天前
2026.2.25监控学习
学习
im_AMBER3 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J3 天前
从“Hello World“ 开始 C++
c语言·c++·学习