利用LaTeX展现C++代码

最近由于需要在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包用户手册


  1. 所谓前导言,就是大多数LaTeX教科书,国外或者国内的,定义的,在\documentclass以下,\begin{document}以上的那部分区域。 ?
时间: 2024-10-05 06:13:11

利用LaTeX展现C++代码的相关文章

开源项目成熟度分析工具-利用github api获取代码库的信息

1.github api github api是http形式的api,功能还是比较丰富的,博主因为项目的原因主要用到的是提取project信息这项功能,返回的数据是JSON格式. api页:https://developer.github.com/v3/ Options: (H) means HTTP/HTTPS only, (F) means FTP only --anyauth Pick "any" authentication method (H) -a, --append Ap

利用正则表达式去掉html代码

using System.Text.RegularExpressions; // 利用正则表达式去掉"<"和">"之间的内容. private string StripHT(string strHtml){   Regex regex=new Regex("<.+?>",RegexOptions.IgnoreCase);   string strOutput=regex.Replace(strHtml,"&quo

20145311利用gdb调试汇编代码

利用GDB调试汇编代码 首先编写c语言原代码,我使用的是同学分析过的代码 #include<stdio.h>short addend1 = 1;static int addend2 = 2;const static long addend3 = 3; static int g(int x){    return x + addend1;} static const int f(int x){    return g(x + addend2);} int main(void){    retur

【tool】利用测试概念进行代码设计时的七条基本原则

跟其它编码原则一样,这些原则也不是不容置疑或不可改变的教条.有时候打破这些规则也是必要的.因此,理解每条原则背后的动机和判断何时这些动机不适用(或应让位给更关心的问题)的能力是很重要的. 原则 1. 到 GUI 视图的外面去 尽可能把代码移到 GUI 视图的外面.然后各种 GUI 动作就能成了模型上的简单方法调用.为什么您需要这样做呢? 对 GUI 测试者来说,通过方法调用测试功能比间接地测试功能容易的多. 另一个好处是它使修改程序功能而不影响视图变的更容易. 当然,视图中也可能存在错误.在理想

利用android proguard混淆代码

利用android proguard混淆代码 2014-02-05 17:50 1207人阅读 评论(1) 收藏 举报 网上虽然有很多相关博客,不过貌似都不是最新版的..于是百度+谷歌+github上的开源demo,终于成功的配置了android proguard. 最新版的android sdk的默认配置已经可以满足我们的大多数要求了,我们只需要按照sdk的提示就可以配置大部分的必须配置,然后再加上一些基本的 自定义配置就行了. 第一步,取消project.properties里面关于prog

初学者利用git 上传代码到Coding的简单操作步骤

初学者利用git 上传代码到Coding的简单操作步骤 1.首先登陆coding网站注册账号https://coding.net/ (注册完后需登陆邮箱激活邮件) 2.登陆刚注册的coding账号 ,添加项目 添加项目-〉输入项目名称-〉输入对项目的简单描述---〉选择"公开"-〉创建项目 到此为止,后面需要将本次实验内容push到该项目chap1下. 此处,需要记录http://git.coding.net/gdcs16_000/chap1.git   (gdcs16_000为你的注

[06] 利用mybatis-generator自动生成代码

1.mybatis-generator 概述 MyBatis官方提供了逆向工程 mybatis-generator,可以针对数据库表自动生成MyBatis执行所需要的代码(如Mapper.java.Mapper.xml.POJO).mybatis-generator 有三种用法:命令行.eclipse插件.maven插件.而maven插件的方式比较通用,本文也将概述maven插件的使用方式. 2.pom.xml中配置plugin (官方文档:Running MyBatis Generator W

Git利用命令行提交代码步骤

利用命令行提交代码步骤进入你的项目目录1:拉取服务器代码,避免覆盖他人代码git pull2:查看当前项目中有哪些文件被修改过git status具体状态如下:1:Untracked: 未跟踪,一般为新增文件,此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.2:Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作.3:deleted: 文件已删除,本地删除,服务器上还没有删除.4:renamed: 3:将状态改变的代码提交

利用fabric自动化发布代码

这几天,在测试环境开发python程序,但是生产的测试环境上和测试环境不一样,发布的程序涉及到3个角色,node,web和monitor,里面的配置文件要根据生产环境进行替换,用手工替换几次以后,感觉太过麻烦了,就想利用fabric进行编写脚本自动化.为什么想到用fabric?因为入门简单,文档多! 脚本的思路大致说下: 1)在本地服务器通过svn checkout命令把最新的代码,下载下来! 2)然后对里面的配置文件进行个性化的替换,然后打包成 tar.gz形式 3)分发到不同角色的服务器上,