相信刚入门LaTeX的盆友会感觉到LaTeX的强大之处,如果你了解markdown,那么使用LaTeX之后,你会感觉markdown除了便捷之外也就没有其它的优点了,因为LaTeX太强大了,也由于LaTeX门槛比较高,如果你使用texlive编译环境的话,那么需要安装的文件将达到7G左右,当然也有简版的。
使用LaTeX也是源于自己研究生的导师,在老师的介绍下,然后不断学习,不断了解,不断使用,也慢慢有所领悟,虽然无大的建树,不过还是会一点,因为LaTeX更像一门编程语言。
废话不多说,直接进入今天的主题,如何在LaTeX中插入高亮代码?我相信当前主流的语言都是可以使用的,至少我测试的语言是可以的,如:LaTex、Python、Java、C、C++。根据我当前的测试,先选用两个包做粗略的介绍,也会附上相关的文档。如果在知乎或者CSDN你可以看到使用比较多的就是minted、lstlisting这两个包,相关一些博文大多都是copy过来的,下面就进入正文吧。
说明一下编译环境:texlive2019。
大多情况下,如果你不引用自身的话使用一个包就可以了。但是如果你使用引用自身的话就会出错,如下代码:
\documentclass{article}
\usepackage{listings}
\begin{document}
代码演示:
\begin{lstlisting}[language = tex]
\begin{lstlisting}[language=Python]
import numpy as np
print(np.ones(5)
\end{lstlisting}
\end{lstlisting}
\end{document}
但在实际编译的过程中会出现:
上面的理想显示结果,我是使用minted包把lstlisting代码显示出来,如下:
\documentclass{article}
\usepackage{listings}
\usepackage{minted}
\usepackage{xcolor}
\begin{document}
code show:
\begin{minted}{tex}
\begin{lstlisting}[language=Python]
import numpy as np
print(np.ones(5)
\end{lstlisting}
\end{minted}
\end{document}
至于minted包如何使用,随后再做介绍。通过我也使用了minted包裹minted也是失败了,在StackOverflow上查找也没有找到,这里就不再赘述了。
失败总结,同一类型的包不能再包含统一类型的代码,否则会出现提前结束包的情况,导致出错。可能有解决这种错误的设置,目前经过一些测试也未成功避免,除非一种包的代码用另一种包引入,例如再minted包中插入lstlisting。当然如果同一个包的代码嵌套时,只要不出现\end{同一包名}也是可以的。好了,知道这个后,就可以单独介绍各个包了。
minted包依赖于xcolor包,依赖python环境以pygents包,在编译命令时还需要加入-shell-escape
参数。Python环境以及pygents包(pip install pygents
即可)配置对于有一定python基础的盆友就很简单了,对于上一节中的main.tex文件,编译的命令:xelatex -shell-escape main
,别忘了要导入宏包\usepackage{minted}
。如果你使用的是texstudio的话,配置起来也简单如图:
由于我经常使用xelatex进行编译,所有我就修改这个命令就行了,就是加入-shell-escape
,如下:
标准语法使用如下:
\begin{minted}[options]{}
\end{minted}
使用\mint
命令来代替该环境语法如下:
\mint{python}|import numpy as np|
该部分会占据一行。
行内使用使用语法如下:
使用\mintinline{python}{import numpy as np}导入即可
通过文件来输入需要高亮的代码语法如下:
\inputminted[]{}{}.
更多参数设置和使用可参照相关文档。
这里只作简要介绍。简单配置如下:
\usepackage{listings}
\newfontfamily\courier{Courier New}
\lstset{linewidth=1.1\textwidth,
numbers=left, %设置行号位置
basicstyle=\small\courier,
numberstyle=\tiny\courier, %设置行号大小
keywordstyle=\color{blue}\courier, %设置关键字颜色
%identifierstyle=\bf,
commentstyle=\it\color[cmyk]{1,0,1,0}\courier, %设置注释颜色
stringstyle=\it\color[RGB]{128,0,0}\courier,
%framexleftmargin=10mm,
frame=single, %设置边框格式
backgroundcolor=\color[RGB]{245,245,244},
%escapeinside=``, %逃逸字符(1左面的键),用于显示中文
breaklines, %自动折行
extendedchars=false, %解决代码跨页时,章节标题,页眉等汉字不显示的问题
xleftmargin=2em,xrightmargin=2em, aboveskip=1em, %设置边距
tabsize=4, %设置tab空格数
showspaces=false %不显示空格
basicstyle=\small\courier
}
然后就是使用了,例如:
\begin{lstlisting}[language = tex]
\begin{minted}[frame=lines,
framesep=2mm,
baselinestretch=1.2,
fontsize=\footnotesize,
linenos]{python}
import numpy as np
print(np.ones(1))
\end{minted}
\end{lstlisting}
不管你使用lstlisting还是minted,只要你想要好看的代码显示都需要对相关参数进行设置,我也在网上找到了相关的文档,具体参数也有介绍,这里就不再赘述,相关文档可在“AIAS编程有道”订阅号中回复“latex代码显示文档”即可获取,或者在CSDN中下载。