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中下載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章