在TeX⽂档中插⼊源代码-[开源世界]
近期有了在TeX⽂档中插⼊源代码的需要。TeX的\verbatim可以帮助你保留输⼊text的原始格式,但⽤于输⼊源代码还是显得不够专业。Google了⼀下发现TeX中⽀持插⼊源代码的包也有不少,如LGrind、Listings等。LGrind似乎没有包含在TeX Live的默认安装包中,⽤apt-get尝试安装LGrind,发现居然要占⽤近200M的空间,遂放弃之,最后我选择了Listings宏包。
Listings宏包短⼩⽽强⼤,其典型应⽤⽅式如下:
\upackage{listings}
餐饮项目计划书\lstt{...}
扒高踩低\begin{lstlisting}
#include
int main(int argc, const char *argv[]) {
printf("Hello World!\n");
缮制
return 0;
}
\end{lstlisting}
\lstinputlisting{HelloWorld.c}
其中\lstt⽤于全局设置插⼊源代码的类型、各种语法元素的样式、边框和⾏号设置。你的源码只需包裹在\begin{lstlisting}和
\end{lstlisting}之间,源码就能按照之前设置的格式显⽰。\lstinputlisting⽀持将⼀个独⽴的源代码⽂件load进来,并按\lstt的格式显⽰。下⾯是⼀个插⼊C语⾔源码的例⼦:
\lstt{ language={[ANSI]C},
showspaces=fal,
showtabs=fal,
tabsize=4,
frame=single,附宝
高中时期framerule=1pt,
framexleftmargin=5mm,
framexrightmargin=5mm,
framextopmargin=5mm,
framexbottommargin=5mm,
%numbers=left,
%numberstyle=\small,
索尼A33
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}
上⾯lstt中每种语法元素的style都设置为\tt。说到\tt,就不能不提到西⽅字母字族的种类,分为rif
、sans rif和monospace三类。其中rif来源于荷兰语, "衬线"的意思,⼜称为Roman,⼀般⽤于正⽂的主字体,感觉很正式,我们常⽤的"Times New Roman"字体就归于此族; sans rif中的sans来源⾃法⽂,意为“⾮”,这类字体⽐较平滑,字体较⼤,适于在标题中使⽤,如"Arial"字体。monospace是等宽字族,也称为typewriter,程序源代码⽤此族字体表⽰更为美观,常见的字体包括Courier New、Lucida Console等。其中\tt指的就是使⽤monospace字族; \rm表⽰使⽤rif字族,\sf则是使⽤sans rif字族的意思。
确定了字族后,我们可以通过TeX preamble区的字体设置得知具体的字体,如在上⾯例⼦中,我们是这么设置字体的:
abc是什么银行
\tCJKmainfont{WenQuanYi Micro Hei}
\tCJKsansfont{WenQuanYi Micro Hei}
\tCJKmonofont{WenQuanYi Micro Hei}
\tmainfont{Times New Roman}
\tsansfont{Arial}
\tmonofont{Courier New}
CJK相关的字体设置影响的是中⽂字体,⽽真正对代码起作⽤的是后⾯的英⽂字体设置。这⾥我们的mono字体设置为了"Courier New",这样我们的源码就会以Courier New的形式展现出来。