LaTeX 插入高亮代码(LaTex、Python、Java、C、C++等主流语言都支持)

相信刚入门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

环境配置

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]{<language>}
<code>
\end{minted}

使用\mint命令来代替该环境语法如下:

\mint{python}|import numpy as np|

该部分会占据一行。
行内使用使用语法如下:

使用\mintinline{python}{import numpy as np}导入即可

通过文件来输入需要高亮的代码语法如下:

\inputminted[<options>]{<language>}{<filename>}.

更多参数设置和使用可参照相关文档。

lstlisting

这里只作简要介绍。简单配置如下:

\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中下载。

科皮子菊 CSDN认证博客专家 数据分析 NLP Python
数据挖掘工程师,会点Python、Java、C++、C,懂些基本算法数据结构、机器学习算法、深度学学算法及相关框架,除此之外还了解些LaTeX排版,Linux使用等,发表过几篇中文期刊论文和国际会议论文,也写过几篇专利,在技术的海洋里蹒跚前行,日积跬步,乐此不疲!个人订阅号【AIAS编程有道】,B站主页【科皮子菊】
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页