继上次学会在ppt里面插入带有高亮的c程序代码之后,zyy在这条不归路上越走越远…… 好的,长话短说,今天我介绍的是怎么在LaTeX中插入高亮的c程序代码。(其实不止c程序的代码,别的语言也是可以的,本文以c代码为例)(zyy你作业写完了吗!一天就知道写博客不去好好学习挂科了怎么办!)(……写完就去好好学习别着急…… ♪(^∇^*))

本文将介绍两种方法,当然两种都需要LaTeX(废话……),第二种需要额外的一个软件——Highlight。

[方法一]使用Listings宏包对代码进行高亮显示

这里不讲原理,直接说例子。

比如我们想插入这样的一段代码:

 1 /*
2 PROG:LeTeX test
3 NAME:zyy
4 */
5 #include <stdio.h>
6 int main()
7 {
8 //Note
9 printf("Hello world!\n");
10 return 0;
11 }

给出对应的tex的代码,注意listings对代码进行高亮要使用xcolor宏包(这里我找不到tex的高亮…… 醉了…… ):

 1 \documentclass[12pt]{article}
2 \usepackage{listings}
3 \usepackage{xcolor}
4 \lstset{
5 %行号
6 numbers=left,
7 %背景框
8 framexleftmargin=10mm,
9 frame=none,
10 %背景色
11 %backgroundcolor=\color[rgb]{1,1,0.76},
12 backgroundcolor=\color[RGB]{245,245,244},
13 %样式
14 keywordstyle=\bf\color{blue},
15 identifierstyle=\bf,
16 numberstyle=\color[RGB]{0,192,192},
17 commentstyle=\it\color[RGB]{0,96,96},
18 stringstyle=\rmfamily\slshape\color[RGB]{128,0,0},
19 %显示空格
20 showstringspaces=false
21 }
22
23 \begin{document}
24 \begin{lstlisting}[language={C}]
25 /*
26 PROG:LeTeX test
27 NAME:zyy
28 */
29 #include <stdio.h>
30 int main()
31 {
32 //Note
33 printf("Hello world!\n");
34 return 0;
35 }
36 \end{lstlisting}
37 \end{document}

实现的样子如下:

这里有一个弊端,就是似乎不能插入中文,我试过了用CJK的环境也不行,可能是因为我对LaTeX了解还很少,如果有人实现了代码中的中文显示,请不吝赐教!

当然,我个人是觉得这个不太好看,所以建议不怕麻烦的同学看后一种方法。

[方法二]使用Highlight对代码进行高亮处理

Highlight是一款软件,可以生成许多种程序语言的高亮,并以多种形式输出,其中包括LaTeX。

这里给出下载地址(真的没有广告费):http://www.andre-simon.de/zip/download.php

Highlight的使用也相当简单,下面是它的界面:

注意到左下角的选项版,选择LaTeX输出即可,其他参数可以自己设置。这里值得一提的是,高亮主题非常多,我没有全部尝试过,不过相对来说比较喜欢bclear,当然这一款的对比度并不是很强烈,所以看个人爱好选择吧。我的选择如下:

这里注意一下选择“内嵌页面样式(defs)”。将预览结果复制到剪贴板之后,新建一个.tex文档,粘贴即可。

当然这里会有几个小问题需要修改一下:

1、为了支持中文,需要用到CJK宏包。在前面加入“\usepackage{CJK}”,并在正文中相应地添加“\begin{CJK*}{GBK}{song}”和“\end{CJK*}”;

2、有一个似乎是为了插入双引号的方式,似乎有点问题(可能是LaTex的版本不兼容),作这样的修改即可:加入“\newcommand{\dq}{"}”,并把正文中的“\shorthandoff{"}”和“\shorthandon{"}”注释掉。

(这个语法我找了很久,才在这里找到解释,感谢:http://tex.stackexchange.com/questions/299721/using-dq-in-subsections-has-an-extra

3、它生成的代码的“\end{document}”之间有空格,把空格删掉。

首先给出代码:

 1 \documentclass{article}
2 \usepackage{color}
3 \usepackage{alltt}
4 \usepackage[T1]{fontenc}
5 \usepackage[latin1]{inputenc}
6 \usepackage{CJK}%中文
7
8 \newcommand{\hlstd}[1]{\textcolor[rgb]{0.2,0.2,0.2}{#1}}
9 \newcommand{\hlnum}[1]{\textcolor[rgb]{0.06,0.58,0.63}{#1}}
10 \newcommand{\hlesc}[1]{\textcolor[rgb]{0.86,0.41,0.09}{#1}}
11 \newcommand{\hlstr}[1]{\textcolor[rgb]{0.06,0.58,0.63}{#1}}
12 \newcommand{\hlpps}[1]{\textcolor[rgb]{0.06,0.58,0.63}{#1}}
13 \newcommand{\hlslc}[1]{\textcolor[rgb]{0.59,0.59,0.59}{#1}}
14 \newcommand{\hlcom}[1]{\textcolor[rgb]{0.59,0.59,0.59}{#1}}
15 \newcommand{\hlppc}[1]{\textcolor[rgb]{0.41,0.78,0.23}{#1}}
16 \newcommand{\hlopt}[1]{\textcolor[rgb]{0.2,0.2,0.2}{#1}}
17 \newcommand{\hlipl}[1]{\textcolor[rgb]{0.45,0.46,0.77}{#1}}
18 \newcommand{\hllin}[1]{\textcolor[rgb]{0.59,0.59,0.59}{#1}}
19 \newcommand{\hlkwa}[1]{\textcolor[rgb]{0.23,0.42,0.78}{#1}}
20 \newcommand{\hlkwb}[1]{\textcolor[rgb]{0.63,0,0.31}{#1}}
21 \newcommand{\hlkwc}[1]{\textcolor[rgb]{0,0.63,0.31}{#1}}
22 \newcommand{\hlkwd}[1]{\textcolor[rgb]{0.78,0.23,0.41}{#1}}
23 \definecolor{bgcolor}{rgb}{1,1,1}
24 \newcommand{\dq}{"}
25
26 \title{Source file}
27 \begin{document}
28 \begin{CJK*}{GBK}{song}
29 \pagecolor{bgcolor}
30 \newsavebox{\hlboxopenbrace}
31 \newsavebox{\hlboxclosebrace}
32 \newsavebox{\hlboxlessthan}
33 \newsavebox{\hlboxgreaterthan}
34 \newsavebox{\hlboxdollar}
35 \newsavebox{\hlboxunderscore}
36 \newsavebox{\hlboxand}
37 \newsavebox{\hlboxhash}
38 \newsavebox{\hlboxat}
39 \newsavebox{\hlboxbackslash}
40 \newsavebox{\hlboxpercent}
41 \newsavebox{\hlboxhat}
42 \setbox\hlboxopenbrace=\hbox{\verb.{.}
43 \setbox\hlboxclosebrace=\hbox{\verb.}.}
44 \setbox\hlboxlessthan=\hbox{\verb.<.}
45 \setbox\hlboxgreaterthan=\hbox{\verb.>.}
46 \setbox\hlboxdollar=\hbox{\verb.$.}
47 \setbox\hlboxunderscore=\hbox{\verb._.}
48 \setbox\hlboxand=\hbox{\verb.&.}
49 \setbox\hlboxhash=\hbox{\verb.#.}
50 \setbox\hlboxat=\hbox{\verb.@.}
51 \setbox\hlboxbackslash=\hbox{\verb.\.}
52 \setbox\hlboxpercent=\hbox{\verb.\%.}
53 \setbox\hlboxhat=\hbox{\verb.^.}
54 \def\urltilda{\kern -.15em\lower .7ex\hbox{\~{}}\kern .04em}
55 \noindent
56 \ttfamily
57 %\shorthandoff{"}
58 \hlstd{}\hllin{\ 1\ }\hlcom{/{*}}\\
59 \hllin{\ 2\ }\hlcom{项目:LeTeX测试}\\
60 \hllin{\ 3\ }\hlcom{作者:zyy}\\
61 \hllin{\ 4\ }\hlcom{{*}/}\hlstd{}\\
62 \hllin{\ 5\ }\hlppc{\#include\ \usebox{\hlboxlessthan}stdio.h\usebox{\hlboxgreaterthan}}\\
63 \hllin{\ 6\ }\hlstd{}\hlkwb{int\ }\hlstd{}\hlkwd{main}\hlstd{}\hlopt{()}\\
64 \hllin{\ 7\ }\hlstd{}\hlopt{\usebox{\hlboxopenbrace}}\\
65 \hllin{\ 8\ }\hlstd{\ }\hlslc{//这里是中文注释}\\
66 \hllin{\ 9\ }\hlstd{\ }\hlkwd{printf}\hlstd{}\hlopt{(}\hlstd{}\hlstr{\dq{}Hello\ world!}\hlesc{$\backslash$n}\hlstr{\dq{}}\hlstd{}\hlopt{);}\\
67 \hllin{10\ }\hlstd{\ }\hlkwa{return\ }\hlstd{}\hlnum{0}\hlstd{}\hlopt{;}\\
68 \hllin{11\ }\hlstd{}\hlopt{\usebox{\hlboxclosebrace}}\hlstd{}\\
69 \mbox{}
70 \normalfont
71 \normalsize
72 %\shorthandon{"}
73 \end{CJK*}
74 \end{document}
75 (* LaTeX generated by highlight 3.28, http://www.andre-simon.de/ *)

最后的效果是这样的:

这个比前一种方式好多了是吧?

[总结]

使用listings相当简便,要配置的东西并不多,也能实现高亮的效果;Highlight的高亮效果更加丰富,并且支持中文注释,只是实现略复杂一些。

时隔两年后的更新:

感谢@SYCstudio的交流,学习到了一种新的方法,使用minted宏包来实现代码高亮,个人觉得效果还不错,跟Highlight的效果差不多,就是最开始的配置稍微麻烦一点,不过配置好了之后每次使用会比较方便。这里贴一个介绍如何使用minted宏包的博客地址:https://blog.csdn.net/u012705410/article/details/50605374

希望跟大家一起交流,共同进步。

[杂记]如何在LaTeX里插入高亮代码的更多相关文章

  1. [杂记]如何在ppt里插入高亮代码

    在为c语言习题课准备课件的时候发现需要向ppt内插入代码,简单的文本粘贴没有高亮,格式也很混乱需要自己慢慢调,于是自己鼓捣了一下,实现了向ppt内插入高亮代码. [所需软件]Office PowerP ...

  2. 如何在latex 中插入EPS格式图片

    如何在latex 中插入EPS格式图片 第一步:生成.eps格式的图片 1.利用visio画图,另存为pdf格式的图片 利用Adobe Acrobat裁边,使图片大小合适 另存为.eps格式,如下图所 ...

  3. 在Latex中插入Python代码

    这里指的插入是指最终能在生成的pdf中显示高亮的Python代码. 在Latex中插入Python代码,需要一个第三发的宏包pythonhighlight: https://github.com/ol ...

  4. 15LaTeX学习系列之---LaTeX里插入数学公式

    目录 目录 前言 (一)常用的数学公式命令 ==1.上下标== ==2.矢量== ==3.括号== ==4.符号关系== ==5.三角形符号== ==6.求和与累积== ==7.积分与微分== ==8 ...

  5. 【转】LiveWriter插入高亮代码插件介绍 基于SyntaxHighighter

    转自:http://www.cnblogs.com/yaoshiyou/archive/2009/11/25/1610901.html 插件介绍 辛苦了两人小时写日志不小心浏览器崩溃了,发誓以后一定记 ...

  6. LiveWriter插入高亮代码插件介绍 基于SyntaxHighighter

    Codeint main() { int i; printf("%d",i); } 插件介绍 辛苦了两人小时写日志不小心浏览器崩溃了,发誓以后一定记得用Word先写好. 将Word ...

  7. 【Latex】如何在Latex中插入伪代码 —— clrscode3e

    1. 简介clrscode3e是<算法导论(第三版)>使用的伪代码的宏包,clrs其实表示的是Cormen.Leiserson.Rivest和Stein.它有个更老的版本clrscode, ...

  8. 在LaTeX里插入全页的pdf 分类: LaTex 2015-02-04 17:20 142人阅读 评论(0) 收藏

    要帮女友排版毕业论文,需要插入封面,省时省力的方法就是把学校给的Word封面保存成PDF然后插入到Latex文档中. 首先添加下面的宏: \usepackage[final]{pdfpages} 然后 ...

  9. 如何在CHROME里调试前端代码?

    以前看前端们调得很神的, 刚看书到这里,作一个记录,演练了一下,确实有点神!!! :) <!DOCTYPE html> <html lang="en"> & ...

随机推荐

  1. 前端3D引擎-Cesium自定义动态材质

    本文代码基于Vue-cli4和使用WebGL的地图引擎Cesium,主要内容为三维场景下不同对象的动态材质构建. 参考了很多文章,链接附在文末. 为不同的几何对象添加动态材质 不知道这一小节的名称概况 ...

  2. 大厂面试:一个四年多经验程序员的BAT面经(字节、阿里、腾讯)

    前言 上次写了篇欢聚时代的面经,公众号后台有些读者反馈说看的意犹未尽,希望我尽快更新其他大厂的面经,这里先说声抱歉,不是我太懒,而是项目组刚好有个活动要赶在春节前上线,所以这几天经常加班,只能工作之余 ...

  3. Nginx请求连接限制

    目录 Nginx的请求限制 HTTP协议的连接与请求 连接限制 配置示例 做个演示: 请求限制 配置示例 基本指令 limit_req_zone limit_req zone 做个演示: Nginx的 ...

  4. linu查看系统用户与显示命令行提示符格式信息

    目录 一:查看系统用户whoami 二:显示命令行提示符格式信息变量 一:查看系统用户whoami whoami : 当前窗口登录的用户 who : 当前用户登录系统的终端 作用: 显示当前用户登录了 ...

  5. 第08讲:Flink 窗口、时间和水印

    Flink系列文章 第01讲:Flink 的应用场景和架构模型 第02讲:Flink 入门程序 WordCount 和 SQL 实现 第03讲:Flink 的编程模型与其他框架比较 第04讲:Flin ...

  6. c++17 新特性

    编译环境说明:gcc 8.1 + eclipse +windows 10 eclipse cpp默认支持c++14,做c++17开发时,需要手动进行配置. 1.关键字 1)constexpr c++1 ...

  7. 使用Xamarin开发移动应用示例——数独游戏(六)使用数据库

    项目代码可以从Github下载:https://github.com/zhenl/ZL.Shudu .代码随项目进度更新. 现在我们希望为应用增加更多的功能,比如记录每个完成的游戏,可以让用户自己添加 ...

  8. RocketMq如何顺序消费的消息offest

    RocketMq对于消费者对于消息的如何处理的 1:如果设置了自动提交 返回: ConsumeOrderlyStatus.COMMIT, ConsumeOrderlyStatus.ROLLBACK, ...

  9. c#序列化感悟(重点讲讲二进制序列化)

    序列化是一种通过将对象转化为字节流,从而达到储存对象,或者将对象传输到内存,数据库或文件的一个过程,主要用途是保存对象的状态(包括对象的数据),方便对对象的重建,反之读取就是反序列化. 三种序列化类型 ...

  10. AT2272 [ARC066B] Xor Sum

    我们可以知道异或可以看成不进位的加法,那么我们就可以得到 \(a + b = a\) ^ \(b + ((a \& b) << 1)\),不难发现 \(\frac{v - u}{2 ...