在TeX文檔中插入源代碼 - [開源世界]

近期有了在TeX文檔中插入源代碼的需要。TeX的\verbatim可以幫助你保留輸入text的原始格式,但用於輸入源代碼還是顯得不夠專業。Google了一下發現TeX中支持插入源代碼的包也有不少,如LGrind、Listings等。LGrind似乎沒有包含在TeX Live的默認安裝包中,用apt-get嘗試安裝LGrind,發現居然要佔用近200M的空間,遂放棄之,最後我選擇了Listings宏包。


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的形式展現出來。


原文鏈接:http://bigwhite.blogbus.com/c1678111/index_2.html

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