前言

在科研工作中,论文写作和排版是每个研究者必须面对的任务。然而,传统的文字处理工具(如 Word)在处理复杂公式、参考文献和多格式输出时,往往显得力不从心。LaTeX 凭借其强大的公式处理能力、灵活的参考文献管理和高质量的排版效果,成为学术界和科研领域的首选工具。

但对于初学者来说,LaTeX 的环境配置和工具选择可能会让人感到困惑。TexLive 是 LaTeX 的核心发行版,提供了完整的工具链和宏包支持;TexStudio 是一款专为 LaTeX 设计的集成开发环境,适合快速上手;而 VSCode 则凭借其强大的扩展性,成为越来越多科研工作者的选择。如何高效配置这些工具,并让它们协同工作,是提升科研效率的关键。

本文将以 TexLive + TexStudio + VSCode 为核心,详细介绍从环境搭建到高效使用的全流程。无论你是 LaTeX 新手,还是希望优化工作流的研究者,这篇指南都将帮助你快速掌握这些工具,让你的科研效率翻倍!

1、Texlive安装

1.1 Texlive 2023安装包下载

TexLive官网地址https://tug.org/texlive/

官网下载太慢,可以使用下面的国内镜像站来加速下载

清华大学开源镜像站:https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/Images/

北京外国语大学开源镜像站:https://mirrors.bfsu.edu.cn/CTAN/systems/texlive/Images/

南方科技大学开源镜像站:https://mirrors.sustech.edu.cn/CTAN/systems/texlive/Images/

1.2 Texlive 2023 安装

  • Step1:解压下载的 iso 文件,右键 install-tl-windows.bat,以管理员身份打开;

  • Step2:出现如下界面,修改安装路径,并点击 Advanced,然后选择Customize选择中英文语言包(节省空间),然后点击安装;

  • Step3点击安装,出现下面界面则安装成功,点击关闭即可。

Tip:安装完环境配置会自动添加,若没有,可以手动添加。

1.3 测试安装是否成功

打开命令行,分别输入tex -v, latex -v, xelatex -v, pdflatex - v 出现版本号证明安装成功!!!

2、TeXStudio安装与配置

2.1 TexStudio 简单介绍

TeXstudio 是一款功能强大的开源LaTeX编辑器,旨在简化LaTeX文档的编写和编辑。它提供了丰富的功能,包括语法高亮、自动补全、集成PDF查看器、拼写检查和多种编译选项,使用户能够高效地创建高质量的排版文档。

TeXstudio还支持多平台运行,适用于Windows、macOS和Linux系统。

TexStudio 官网https://texstudio.sourceforge.net/

2.2 TeXstudio 配置

2.2.1 配置TeX Studio的三个路径

BibTeXBibTeX 8-BitBiber 的路径设置为 TeXlive 安装路径下对应EXE文件。

2.2.2 添加行号和设置字体编码

2.2.3 设置编译器

点击构建选项,可以修改默认编译器、PDF查看器和默认文献工具等。

若写中文论文,则需修改默认编译器为XelaTeX. 若为英文,则用PdfLaTex

2.3 测试是否成功

输入下述代码,运行,将会得到下述结果。 代码部分,参考博客【latex】TeXlive和TexStudio安装及使用

 \documentclass[11pt]{ctexart}  
    \usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry}  
    \usepackage{algorithm}  
    \usepackage{algorithmicx}  
    \usepackage{algpseudocode}  
    \usepackage{amsmath}  
     
    \floatname{algorithm}{算法}  
    \renewcommand{\algorithmicrequire}{\textbf{输入:}}  
    \renewcommand{\algorithmicensure}{\textbf{输出:}}  
     
    \begin{document}  
    	\begin{algorithm}  
    		\caption{用归并排序求逆序数}  
    		\begin{algorithmic}[1] %每行显示行号  
    			\Require $Array$数组,$n$数组大小  
    			\Ensure 逆序数  
    			\Function {MergerSort}{$Array, left, right$}  
    			\State $result \gets 0$  
    			\If {$left < right$}  
    			\State $middle \gets (left + right) / 2$  
    			\State $result \gets result +$ \Call{MergerSort}{$Array, left, middle$}  
    			\State $result \gets result +$ \Call{MergerSort}{$Array, middle, right$}  
    			\State $result \gets result +$ \Call{Merger}{$Array,left,middle,right$}  
    			\EndIf  
    			\State \Return{$result$}  
    			\EndFunction  
    			\State  
    			\Function{Merger}{$Array, left, middle, right$}  
    			\State $i\gets left$  
    			\State $j\gets middle$  
    			\State $k\gets 0$  
    			\State $result \gets 0$  
    			\While{$i<middle$ \textbf{and} $j<right$}  
    			\If{$Array[i]<Array[j]$}  
    			\State $B[k++]\gets Array[i++]$  
    			\Else  
    			\State $B[k++] \gets Array[j++]$  
    			\State $result \gets result + (middle - i)$  
    			\EndIf  
    			\EndWhile  
    			\While{$i<middle$}  
    			\State $B[k++] \gets Array[i++]$  
    			\EndWhile  
    			\While{$j<right$}  
    			\State $B[k++] \gets Array[j++]$  
    			\EndWhile  
    			\For{$i = 0 \to k-1$}  
    			\State $Array[left + i] \gets B[i]$  
    			\EndFor  
    			\State \Return{$result$}  
    			\EndFunction  
    		\end{algorithmic}  
    	\end{algorithm}  
    \end{document} 

3、Vscode 安装与配置

3.1 Vscode 介绍与安装

Visual Studio Code(VSCode) 是一款由 Microsoft 开发的 免费、开源 的代码编辑器,支持 Windows、macOS 和 Linux。它具有 轻量级 的特点,同时提供 强大的扩展功能,支持多种编程语言(如 Python、C/C++、JavaScript、LaTeX 等)。VSCode 具备 智能代码补全、调试工具、Git 集成、远程开发 等功能,并可通过 插件 进一步扩展,适用于各种开发需求。

TexStudio 官网https://code.visualstudio.com/download

推荐扩展:Chinese languagecode spell checkerLaTeX Workshop (必须)

3.2 配置 json 文件

在 Vscode 设置中打开在 settings.json 进行编辑,酌情粘贴下面代码。

//------------------------------LaTeX 配置----------------------------------
    "latex-workshop.latex.autoBuild.run": "never", //设置是否自动编译
    "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.tools": [
        {
            "name": "xelatex",
            "command": "xelatex",
            "args": [
                "-synctex=1",
                "-interaction=nonstopmode",
                "-file-line-error",
                "%DOCFILE%"
            ]
        },
        {
            "name": "pdflatex",
            "command": "pdflatex",
            "args": [
                "-synctex=1",
                "-interaction=nonstopmode",
                "-file-line-error",
                "%DOCFILE%"
            ]
        },
        {
            "name": "latexmk",
            "command": "latexmk",
            "args": [
                "-synctex=1",
                "-interaction=nonstopmode",
                "-file-line-error",
                "-pdf",
                "-outdir=%OUTDIR%",
                "%DOCFILE%"
            ]
        },
        /*{
            "name": "lualatex",
            "command": "lualatex",
            "args": [
                "-synctex=1",
                "-interaction=nonstopmode",
                "-file-line-error",
                "-shell-escape", //这个命令行在网上的Latex Workshop设置里一般没有,所以直接recipe会报错
                "%DOCFILE%"
            ]
        },*/
        {
            "name": "bibtex",
            "command": "bibtex",
            "args": [
                "%DOCFILE%"
            ]
        }
    ],
    //用于配置编译链
    "latex-workshop.latex.recipes": [
        {
            "name": "XeLaTeX",
            "tools": [
                "xelatex"
            ]
        },
        {
            "name": "XeLaTeX*2",
            "tools": [
                "xelatex",
                "xelatex"
            ]
        },
        {
            "name": "PDFLaTeX",
            "tools": [
                "pdflatex"
            ]
        },
        {
            "name": "PDFLaTeX*2",
            "tools": [
                "pdflatex",
                "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"
    ],
    //设置为onFaild 在构建失败后清除辅助文件
    "latex-workshop.latex.autoClean.run": "onFailed",
    //使用上次的recipe编译组合
    "latex-workshop.latex.recipe.default": "lastUsed",
    //用于反向同步的内部查看器的键绑定。ctrl/cmd +点击(默认)或双击
    "latex-workshop.view.pdf.internal.synctex.keybinding": "double-click",
    // 设置VScode内部查看生成的pdf文件
    "latex-workshop.view.pdf.viewer": "tab", 

    //使用 SumatraPDF 预览编译好的PDF文件
    /*"latex-workshop.view.pdf.viewer": "external",
    //PDF查看器用于在\ref上的[View on PDF]链接
    "latex-workshop.view.pdf.ref.viewer": "auto",
    "latex-workshop.view.pdf.external.viewer.command": "C:/Users/Guoyi/AppData/Local/SumatraPDF/SumatraPDF.exe",  //注意修改路径
    "latex-workshop.view.pdf.external.viewer.args": [
        "%PDF%"
    ],
    "latex-workshop.view.pdf.external.synctex.command": "C:/Users/Guoyi/AppData/Local/SumatraPDF/SumatraPDF.exe", //注意修改路径
    "latex-workshop.view.pdf.external.synctex.args": [
        "-forward-search",
        "%TEX%",
        "%LINE%",
        "-reuse-instance",
        "-inverse-search",
        "\"D:/Vscode/Microsoft VS Code/Code.exe\" \"D:/Vscode/Microsoft VS Code/resources/app/out/cli.js\" --ms-enable-electron-run-as-node -r -g \"%f:%l\"",
        "%PDF%"
    ]*/

3.3 测试是否成功

新建 Tex 文件输入下述代码,运行即可。

\documentclass[11pt]{ctexart}  
\usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry}  
\usepackage{algorithm}  
\usepackage{algorithmicx}  
\usepackage{algpseudocode}  
\usepackage{amsmath}  

\floatname{algorithm}{算法}  
\renewcommand{\algorithmicrequire}{\textbf{输入:}}  
\renewcommand{\algorithmicensure}{\textbf{输出:}}  

\begin{document}  
	\begin{algorithm}  
		\caption{用归并排序求逆序数}  
		\begin{algorithmic}[1] %每行显示行号  
			\Require $Array$数组,$n$数组大小  
			\Ensure 逆序数  
			\Function {MergerSort}{$Array, left, right$}  
			\State $result \gets 0$  
			\If {$left < right$}  
			\State $middle \gets (left + right) / 2$  
			\State $result \gets result +$ \Call{MergerSort}{$Array, left, middle$}  
			\State $result \gets result +$ \Call{MergerSort}{$Array, middle, right$}  
			\State $result \gets result +$ \Call{Merger}{$Array,left,middle,right$}  
			\EndIf  
			\State \Return{$result$}  
			\EndFunction  
			\State  
			\Function{Merger}{$Array, left, middle, right$}  
			\State $i\gets left$  
			\State $j\gets middle$  
			\State $k\gets 0$  
			\State $result \gets 0$  
			\While{$i<middle$ \textbf{and} $j<right$}  
			\If{$Array[i]<Array[j]$}  
			\State $B[k++]\gets Array[i++]$  
			\Else  
			\State $B[k++] \gets Array[j++]$  
			\State $result \gets result + (middle - i)$  
			\EndIf  
			\EndWhile  
			\While{$i<middle$}  
			\State $B[k++] \gets Array[i++]$  
			\EndWhile  
			\While{$j<right$}  
			\State $B[k++] \gets Array[j++]$  
			\EndWhile  
			\For{$i = 0 \to k-1$}  
			\State $Array[left + i] \gets B[i]$  
			\EndFor  
			\State \Return{$result$}  
			\EndFunction  
		\end{algorithmic}  
	\end{algorithm}  
\end{document}

当发现页面下方出现 符号时,说明编译成功,相反,如果出现 × 符号,说明编译失败,就要找失败原因了。

预览PDF:选中 tex 文件中任意的代码,然后按Ctrl+Alt+V,出现编译好的 pdf 页面。

3.4 latexmk 和 xelatex 编译

3.4.1 latexmk:自动化多轮编译

latexmk 是一个自动化编译工具,可智能处理多轮编译和依赖关系。

它可以自动检测是否需要运行 xelatexbibtexmakeindex 等工具。默认调用 pdflatex,但可通过配置指定 xelatex 引擎。

  • 直接运行,自动检测当前目录下的 .tex 文件并编译(默认使用 LaTeX 引擎)

latexmk
  • 指定输出为 PDF(默认调用 pdflatex

latexmk -pdf
  • 显式指定要编译的 .tex 文件

latexmk myfile.tex
latexmk -pdf myfile.tex               # 组合使用 -pdf 选项

编译后自动预览:生成结果后立即打开 PDF 预览:

latexmk -pv                           # 预览当前目录的主文件
latexmk -pv myfile.tex                # 预览指定文件

保留必要文件:删除临时文件(保留 .tex, .bib, .pdf, .bbl, .synctex.gz 等)

latexmk -c                            # 清理当前目录
latexmk -c myfile.tex                 # 清理指定文件的临时文件

彻底清理:删除所有生成文件(包括.pdf,只保留.tex):

latexmk -C

编译 + 预览:生成 PDF 后直接打开预览窗口:

latexmk -pdf -pv myfile.tex

3.4.2 xelatex单次编译、需手动多次运行

xelatex 是直接调用 XeLaTeX 引擎生成 PDF,适合手动控制编译流程。但一次编译可能无法解决交叉引用、目录和参考文献(如 BibTeX)问题。

1. 基础编译

命令 功能说明
xelatex myfile.tex 单次编译生成 PDF
xelatex -synctex=1 myfile.tex 生成同步文件(支持 PDF 反向搜索)
xelatex -halt-on-error myfile.tex 首次错误终止

2. 处理复杂文档

对于含交叉引用、参考文献的文档,需手动多次运行:

# 第一次编译
xelatex myfile.tex

# 生成参考文献(若用 BibTeX)
bibtex myfile

# 第二次编译(插入参考文献)
xelatex myfile.tex

# 第三次编译(解决交叉引用)
xelatex myfile.tex

3.4.3 总结

Latex Workshop 默认使用latexmk 编译latexmk 是对 pdflatexxelatexlualatex 等编译命令的封装。

建议在 VSCode 中结合 LaTeX Workshop 扩展使用 latexmk,并通过快捷键快速编译(如默认的 Ctrl+Alt+B)。对于需要深度调试的情况,临时切换到直接调用 xelatex 命令会更高效。

3.5 其他小技巧

3.5.1 正反向定位

1. 正向同步测试,即从代码定位到 pdf 页面相应位置。有以下三种方法:

  • 使用侧边工具栏

image-20231005101704067

  • 使用右键菜单

image-20231005101906808

  • 使用快捷键

选中需要跳转的代码所在行,按Ctrl+Alt+J,右侧就会跳转到相应行。这里的快捷键为默认设置,可自行通过上文方式设置为您想要的快捷键。

2. 反向同步测试,即从 pdf 页面定位到代码相应位置

在编译生成的 pdf 上,选中想要跳转行,鼠标左键双击ctrl+鼠标左键单击,跳转到对应代码。

参考文章

[^1]: https://blog.csdn.net/Luan__Yu/article/details/143562703