利用LaTeX展现C++代码

原文转自:http://blog.csdn.net/robertchenguangzhi/article/details/45126785


最近由于需要在LaTeX中展现C++代码,于是就在网络上搜索别人提供的解决方案。结果大失所望,所搜索出来的LaTeX代码要么不能运行,要么运行结果不符合自己的需要。国内的利用百度进行搜索,国外的利用yahoo进行搜索。最可恨的是有的贴出来的LaTeX代码进行讲解的少,而且前导 (preamble) 中缺失相应的包,浪费了用户的时间。本来想直接利用别人的,反而没有达到应有的效果。这就刺激了我,我花了时间捋捋LaTeX展现代码的机制,终于弄懂了其中的机理,现讲解如下.

1 前导言加入的包

展现代码在LaTeX中需要使用listings包,由于代码中要用不同颜色的字体显示更加好看,又需要xcolor包。LaTeX中的包就像C++语言中的头文件那样,只有引入它们相应的功能才能具备。最终,前导言1应该这样书写:

\usepackage{listings}
\usepackage[usenames,dvipsnames]{xcolor}
  • 1
  • 2
  • 1
  • 2

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                      
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

上面的设置中,为了更好的使用颜色,我们定义了三种自定义的颜色,然后在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}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

上面是具体使用listings包的方式,你需要将完整的C++代码包含在环境lstlisting中。最后的运行结果如下: 
运行结果

4 结束语

该包是很好玩的,更加详细的介绍请参考listings包用户手册


  1. 所谓前导言,就是大多数LaTeX教科书,国外或者国内的,定义的,在\documentclass以下,\begin{document}以上的那部分区域。 

猜你喜欢

转载自blog.csdn.net/hjq376247328/article/details/65937087