最近由于需要在LaTeX中展现C++代码,于是就在网络上搜索别人提供的解决方案。结果大失所望,所搜索出来的LaTeX代码要么不能运行,要么运行结果不符合自己的需要。国内的利用百度进行搜索,国外的利用yahoo进行搜索。最可恨的是有的贴出来的LaTeX代码进行讲解的少,而且前导 (preamble) 中缺失相应的包,浪费了用户的时间。本来想直接利用别人的,反而没有达到应有的效果。这就刺激了我,我花了时间捋捋LaTeX展现代码的机制,终于弄懂了其中的机理,现讲解如下.
1 前导言加入的包
展现代码在LaTeX中需要使用listings包,由于代码中要用不同颜色的字体显示更加好看,又需要xcolor包。LaTeX中的包就像C++语言中的头文件那样,只有引入它们相应的功能才能具备。最终,前导言1应该这样书写:
\usepackage{listings}
\usepackage[usenames,dvipsnames]{xcolor}
2 listings包相应的参数设置
我们不做任何设置,也会得到运行结果,但那种结果的展现通常比较单调,不是我们想要的结果。我们在真正使用它之前,必须进行相应的设置才能达到我们需要的效果。真正费工夫的地方正在于此。经过多次调试,我的设置为:
\definecolor{mygreen}{rgb}{0,0.6,0}
\definecolor{mygray}{rgb}{0.5,0.5,0.5}
\definecolor{mymauve}{rgb}{0.58,0,0.82}
\lstset{
backgroundcolor=\color{lightgray},
basicstyle = \footnotesize,
breakatwhitespace = false,
breaklines = true,
captionpos = b,
commentstyle = \color{mygreen}\bfseries,
extendedchars = false,
frame =shadowbox,
framerule=0.5pt,
keepspaces=true,
keywordstyle=\color{blue}\bfseries, % keyword style
language = C++, % the language of code
otherkeywords={string},
numbers=left,
numbersep=5pt,
numberstyle=\tiny\color{mygray},
rulecolor=\color{black},
showspaces=false,
showstringspaces=false,
showtabs=false,
stepnumber=1,
stringstyle=\color{mymauve}, % string literal style
tabsize=2,
title=\lstname
}
上面的设置中,为了更好的使用颜色,我们定义了三种自定义的颜色,然后在listings的设置中使用它们。上面的设置选项大部分是顾名思义的,我讲解一下比较重要的几个选项的含义,其他的请读者参考相应的资料。
- basicstyle用来设置代码字体的格式
- captionpos用来设置代码块标题出现的位置
- commentstyle用来设置代码中注释的字体格式
- language用来指定是什么语言的代码,本例使用的是C++
- numbers用来指定代码块的行号出现的位置或者不出现
注意:上面的设置代码也应该出现的LaTeX的前导言中。
3 LaTeX展现C++的代码及运行结果
在LaTeX代码的正文中属性以下代码:
\begin{lstlisting}[caption={}]
#include "randomGenerator.h"
void normalNumGen(double mean, double sd,
int num, string filename){
const int nrolls=num; // number of eperiments
default_random_engine generator;
normal_distribution<double> dnorm(mean, sd);
ofstream outfile(filename,ios::out);
for(int i=0; i < nrolls; ++i){
double number = dnorm(generator);
outfile << number << endl;
}
}
\end{lstlisting}
上面是具体使用listings包的方式,你需要将完整的C++代码包含在环境lstlisting中。最后的运行结果如下:
4 结束语
该包是很好玩的,更加详细的介绍请参考listings包用户手册。
- 所谓前导言,就是大多数LaTeX教科书,国外或者国内的,定义的,在\documentclass以下,\begin{document}以上的那部分区域。 ?
时间: 2024-10-05 06:13:11