使用minted宏包实现源代码语法高亮排版 - registor

发布于 2021-03-26 16:11:07

在 LaTeX 中,常用 listings 宏包实现源代码语法高亮排版。另一个类似的是 minted 宏包,该宏包借助于 Python 的 Pygments 工具包,能够更加灵活地实现不同语言、不同配色方案的源代码语法高亮排版。

软件安装

minted 宏包已包含在 TeXLive 发行版中(其它发行版请自查),无需再独立安装。但要使用 minted 宏包,必须有 Python 支持,并且需安装其 Pygments 语法高亮显示工具包。

安装Python

Python 是跨平台的,不同平台的安装方式,请参考 Python 主页相关指南。

安装 Pygments 工具包

安装完成 Python 后,可以使用其 easy_install 工具或是 pip 工具,安装 Pygments 工具包。 例如,对于 Ubuntu Linux 下 Python3,可以在终端执行如下命令安装:

sudo pip3 install Pygments

对于 Windows 下 Python3,可以以管理员权限打开命令行窗口,然后执行如下命令安装:

pip3 install Pygments

更多详情,请参阅Pygments官网

测试 Pygments 工具包

在终端或命令行窗口,执行如下命令可以得到支持的高亮显示样式:

pygmentize -L styles

在终端或命令行窗口,执行如下命令可以得到支持的语言类型:

pygmentize -L lexers

如果在命令行无法执行这两个命令,说明 Python 或 Pygments 工具包安装中有错误,请重新进行安装和测试,直至这两个命令能够正常执行。

LaTeX 编译参数设置

由于 minted 宏包借助外部工具实现排版,因此,需为LaTeX编译命令添加-shell-escape编译参数,如:

xelatex -shell-escape jobname.tex
pdflatex -shell-escape jobname.tex
latex -shell-escape jobname.tex

如果使用的是集成IDE环境,请在其配置中确认带有该参数进行 LaTeX 编译。

源代码高亮显示排版环境及命令

minted 宏包提供了行间排版环境minted、单行排版命令\mint、行内排版命令\mintinline和从文件读取源代码文件排版命令\inputminted

一个简单的排版示例如:

\documentclass{ctexart}
% 引入minted宏包
\usepackage{minted}

\begin{document} 
这是一个简单的Python代码:
\begin{minted}{python}
  def boring(args = None):
      pass
\end{minted}
可以对Python有一个简单的了解。

可以通过:
\mint{python}|import this|
导入相关模块。

可以通过\mintinline{python}{print(x**2)}输出结果。

下面是一个输出Hello World的C语言代码:
\inputminted{c}{helloworld.c}

\end{document}

其排版结果为:
image.png
其中能够使用的语言类型名称,请在命令行使用pygmentize -L lexers进行查看。

排版细节控制

minted 宏包的排版环境和命令都可以通过可选参数或者通过该宏包提供的设置命令来实现详细控制,详情请查阅其使用说明。

强烈建议:可以在相关开发环境 IDE 中采用其 IDE 提供的工具对源代码按需要在开发环境 IDE 中实现排版后,再用 minted 宏包载入到 LaTeX 中进行排版。

自定义排版环境和命令

该宏包还提供了\newminted\newmint\newmintinline\newmintedfile4 个命令用于自定义需要的排版环境和命令,如:

% minted代码排版样式设置
\usemintedstyle{default} 
% 定义C语言代码参数
% 公有设置
\setminted{fontsize=\tiny, breaklines=true, breakautoindent=false}
% 定义不同字号的行内代码排版命令
\newmintinline{c}{fontsize=\normalsize, autogobble}
\newmintinline[cinttscr]{c}{fontsize=\scriptsize, escapeinside=||, autogobble}
\newmintinline[cinttfts]{c}{fontsize=\footnotesize, escapeinside=||, autogobble}
\newmintinline[cintttny]{c}{fontsize=\tiny, escapeinside=||, autogobble}
\newmintinline[cinttlrg]{c}{fontsize=\large, escapeinside=||, autogobble}
% 定义ccode环境
\newminted{c}{frame=lines, autogobble}
% 定义\cfile命令
\newmintedfile{c}{frame=lines}

另外,如果要在 beamer 中使用 minted 排版,需要在 frame 环境中使用[fragile]可选参数,如:

\begin{frame}[fragile]{数据类型概述}{引例}
...
\end{frame}

minted 宏包还提供了浮动体等强大功能,有关其使用细节,请在命令行通过texdoc minted命令阅读其使用说明书。

Happy LaTeXing!

0 条评论

发布
问题