相信剛入門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中下載。