Skip to content

如何使用 minted 宏包代码高亮?

在论文中不可避免的要加入「代码块」。一般我们代码高亮使用的都是minted宏包

使用示例

编辑main.tex,在导言区导入宏包:

latex
\usepackage[chapter, newfloat]{minted}  % chatper按章编号,newfloat 用于下一行
\SetupFloatingEnvironment{listing}{name = 代码}  % 修改caption和autorefname为中文
\renewcommand*{\thelisting}{\thechapter-\arabic{listing}}  % 编号格式中 1.1 改为 1-1
\captionsetup[listing]{font=small, labelsep=space}  % 修改 caption 的样式

在正文写:

latex
\begin{listing}[ht]
  \begin{minted}{python3}
    >>> import antigravity
  \end{minted}
  \caption{反重力} \label{raw:antigravity}
\end{listing}

排查问题

如果你发现插入 minted 环境后,编译失败,你可以尝试如下的方法解决:

删除 minted 宏包的缓存文件夹

如果你出现了类似如下的编译报错:

txt
! Undefined control sequence.

则可能是由于 minted 缓存导致。一般如果你编译过带有 minted 环境的 LaTeX 项目,根目录都会有一个名称为 _minted_minted-{jobname} 的缓存文件夹。你可以尝试将这一文件夹删除,重新编译,排查问题。

minted command cache folder

排查是否正确安装 Python 与 pygments

仅限 minted v2

该问题只可能在 minted v2 上出现。如遇到此问题,也可考虑升级到 v3。

如果你出现了类似如下的编译报错:

txt
"Package minted Error: You must have `pygmentize' installed to use this package."

那么是由于你的 Python 环境中缺少必要的库。minted 背后事实上用的是 Python 的 pygments 库进行代码渲染和高亮,因此你也必须安装 Python 环境和 pygments 库。你可以使用 Python 的官方包管理工具 pip 安装 pygments

bash
pip install pygments

之后,你需要确认可执行文件 pygmentize.exe 位于系统路径上。用如下的方法进行验证,如果出现类似输出,说明你的安装应该没有问题:

bash
pygmentize -V

Output of command pygmentize

添加额外的编译参数

仅限 minted v2

该问题只可能在 minted v2 上出现。如遇到此问题,也可考虑升级到 v3。

如果你出现了类似如下的编译报错:

txt
Package minted Error: You must invoke LaTeX with the -shell-escape flag.

这是由于你的编译命令中没有添加 -shell-escape 参数,minted 宏包需要这一参数才能正确编译 LaTeX 文档。以 VS Code 的 LaTeX Workshop 为例,如果你使用 xelatex 编译,那么你需要将 xelatex 的编译参数修改如下:

diff
{
    "name": "xelatex",
    "command": "xelatex",
    "args": [
        "-synctex=1",
        "-interaction=nonstopmode",
        "-file-line-error",
        "-pdf",
+       "-shell-escape",
        "-outdir=%OUTDIR%",
        "-cd",
        "%DOC%"
    ],
    "env": {}
}

如果你使用 latexmk 编译,那么你需要将 latexmk 的编译参数修改如下:

diff
{
    "name": "latexmk",
    "command": "latexmk",
    "args": [
        "-synctex=1",
        "-interaction=nonstopmode",
        "-file-line-error",
        "-xelatex",
+       "-shell-escape",
        "-outdir=%OUTDIR%",
        "-cd",
        "%DOC%"
    ],
    "env": {}
},