Listings宏包短小而強大,其典型應用方式如下:
\usepackage{listings}
\lstset{...}
\begin{lstlisting}
#include
int main(int argc, const char *argv[]) {
printf("Hello World!\n");
return 0;
}
\end{lstlisting}
\lstinputlisting{HelloWorld.c}
其中\lstset用於全局設置插入源代碼的類型、各種語法元素的樣式、邊框和行號設置。你的源碼只需包裹在\begin{lstlisting}和\end{lstlisting}之間,源碼就能按照之前設置的格式顯示。\lstinputlisting支持將一個獨立的源代碼文件load進來,並按\lstset的格式顯示。下面是一個插入C語言源碼的例子:
\lstset{ language={[ANSI]C},
showspaces=false,
showtabs=false,
tabsize=4,
frame=single,
framerule=1pt,
framexleftmargin=5mm,
framexrightmargin=5mm,
framextopmargin=5mm,
framexbottommargin=5mm,
%numbers=left,
%numberstyle=\small,
basicstyle=\tt,
directivestyle=\tt,
identifierstyle=\tt,
commentstyle=\tt,
stringstyle=\tt,
keywordstyle=\color{blue}\tt }
\begin{lstlisting}[caption={example code}]
#include
int main(int argc, const char *argv[]) {
printf("Hello World!\n");
return 0;
}
\end{lstlisting}
上面lstset中每種語法元素的style都設置爲\tt。說到\tt,就不能不提到西方字母字族的種類,分爲serif、sans serif和monospace三類。其中serif來源於荷蘭語, "襯線"的意思,又稱爲Roman,一般用於正文的主字體,感覺很正式,我們常用的"Times New Roman"字體就歸於此族; sans serif中的sans來源自法文,意爲“非”,這類字體比較平滑,字體較大,適於在標題中使用,如"Arial"字體。monospace是等寬字族,也稱爲typewriter,程序源代碼用此族字體表示更爲美觀,常見的字體包括Courier New、Lucida Console等。其中\tt指的就是使用monospace字族; \rm表示使用serif字族,\sf則是使用sans serif字族的意思。
確定了字族後,我們可以通過TeX preamble區的字體設置得知具體的字體,如在上面例子中,我們是這麼設置字體的:
\setCJKmainfont{WenQuanYi Micro Hei}
\setCJKsansfont{WenQuanYi Micro Hei}
\setCJKmonofont{WenQuanYi Micro Hei}
\setmainfont{Times New Roman}
\setsansfont{Arial}
\setmonofont{Courier New}
CJK相關的字體設置影響的是中文字體,而真正對代碼起作用的是後面的英文字體設置。這裏我們的mono字體設置爲了"Courier New",這樣我們的源碼就會以Courier New的形式展現出來。