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

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

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

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

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

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

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

  1. 1 \documentclass[12pt]{article}
  2. 2 \usepackage{listings}
  3. 3 \usepackage{xcolor}
  4. 4 \lstset{
  5. 5 %行号
  6. 6 numbers=left,
  7. 7 %背景框
  8. 8 framexleftmargin=10mm,
  9. 9 frame=none,
  10. 10 %背景色
  11. 11 %backgroundcolor=\color[rgb]{1,1,0.76},
  12. 12 backgroundcolor=\color[RGB]{245,245,244},
  13. 13 %样式
  14. 14 keywordstyle=\bf\color{blue},
  15. 15 identifierstyle=\bf,
  16. 16 numberstyle=\color[RGB]{0,192,192},
  17. 17 commentstyle=\it\color[RGB]{0,96,96},
  18. 18 stringstyle=\rmfamily\slshape\color[RGB]{128,0,0},
  19. 19 %显示空格
  20. 20 showstringspaces=false
  21. 21 }
  22. 22
  23. 23 \begin{document}
  24. 24 \begin{lstlisting}[language={C}]
  25. 25 /*
  26. 26 PROG:LeTeX test
  27. 27 NAME:zyy
  28. 28 */
  29. 29 #include <stdio.h>
  30. 30 int main()
  31. 31 {
  32. 32 //Note
  33. 33 printf("Hello world!\n");
  34. 34 return 0;
  35. 35 }
  36. 36 \end{lstlisting}
  37. 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. 1 \documentclass{article}
  2. 2 \usepackage{color}
  3. 3 \usepackage{alltt}
  4. 4 \usepackage[T1]{fontenc}
  5. 5 \usepackage[latin1]{inputenc}
  6. 6 \usepackage{CJK}%中文
  7. 7
  8. 8 \newcommand{\hlstd}[1]{\textcolor[rgb]{0.2,0.2,0.2}{#1}}
  9. 9 \newcommand{\hlnum}[1]{\textcolor[rgb]{0.06,0.58,0.63}{#1}}
  10. 10 \newcommand{\hlesc}[1]{\textcolor[rgb]{0.86,0.41,0.09}{#1}}
  11. 11 \newcommand{\hlstr}[1]{\textcolor[rgb]{0.06,0.58,0.63}{#1}}
  12. 12 \newcommand{\hlpps}[1]{\textcolor[rgb]{0.06,0.58,0.63}{#1}}
  13. 13 \newcommand{\hlslc}[1]{\textcolor[rgb]{0.59,0.59,0.59}{#1}}
  14. 14 \newcommand{\hlcom}[1]{\textcolor[rgb]{0.59,0.59,0.59}{#1}}
  15. 15 \newcommand{\hlppc}[1]{\textcolor[rgb]{0.41,0.78,0.23}{#1}}
  16. 16 \newcommand{\hlopt}[1]{\textcolor[rgb]{0.2,0.2,0.2}{#1}}
  17. 17 \newcommand{\hlipl}[1]{\textcolor[rgb]{0.45,0.46,0.77}{#1}}
  18. 18 \newcommand{\hllin}[1]{\textcolor[rgb]{0.59,0.59,0.59}{#1}}
  19. 19 \newcommand{\hlkwa}[1]{\textcolor[rgb]{0.23,0.42,0.78}{#1}}
  20. 20 \newcommand{\hlkwb}[1]{\textcolor[rgb]{0.63,0,0.31}{#1}}
  21. 21 \newcommand{\hlkwc}[1]{\textcolor[rgb]{0,0.63,0.31}{#1}}
  22. 22 \newcommand{\hlkwd}[1]{\textcolor[rgb]{0.78,0.23,0.41}{#1}}
  23. 23 \definecolor{bgcolor}{rgb}{1,1,1}
  24. 24 \newcommand{\dq}{"}
  25. 25
  26. 26 \title{Source file}
  27. 27 \begin{document}
  28. 28 \begin{CJK*}{GBK}{song}
  29. 29 \pagecolor{bgcolor}
  30. 30 \newsavebox{\hlboxopenbrace}
  31. 31 \newsavebox{\hlboxclosebrace}
  32. 32 \newsavebox{\hlboxlessthan}
  33. 33 \newsavebox{\hlboxgreaterthan}
  34. 34 \newsavebox{\hlboxdollar}
  35. 35 \newsavebox{\hlboxunderscore}
  36. 36 \newsavebox{\hlboxand}
  37. 37 \newsavebox{\hlboxhash}
  38. 38 \newsavebox{\hlboxat}
  39. 39 \newsavebox{\hlboxbackslash}
  40. 40 \newsavebox{\hlboxpercent}
  41. 41 \newsavebox{\hlboxhat}
  42. 42 \setbox\hlboxopenbrace=\hbox{\verb.{.}
  43. 43 \setbox\hlboxclosebrace=\hbox{\verb.}.}
  44. 44 \setbox\hlboxlessthan=\hbox{\verb.<.}
  45. 45 \setbox\hlboxgreaterthan=\hbox{\verb.>.}
  46. 46 \setbox\hlboxdollar=\hbox{\verb.$.}
  47. 47 \setbox\hlboxunderscore=\hbox{\verb._.}
  48. 48 \setbox\hlboxand=\hbox{\verb.&.}
  49. 49 \setbox\hlboxhash=\hbox{\verb.#.}
  50. 50 \setbox\hlboxat=\hbox{\verb.@.}
  51. 51 \setbox\hlboxbackslash=\hbox{\verb.\.}
  52. 52 \setbox\hlboxpercent=\hbox{\verb.\%.}
  53. 53 \setbox\hlboxhat=\hbox{\verb.^.}
  54. 54 \def\urltilda{\kern -.15em\lower .7ex\hbox{\~{}}\kern .04em}
  55. 55 \noindent
  56. 56 \ttfamily
  57. 57 %\shorthandoff{"}
  58. 58 \hlstd{}\hllin{\ 1\ }\hlcom{/{*}}\\
  59. 59 \hllin{\ 2\ }\hlcom{项目:LeTeX测试}\\
  60. 60 \hllin{\ 3\ }\hlcom{作者:zyy}\\
  61. 61 \hllin{\ 4\ }\hlcom{{*}/}\hlstd{}\\
  62. 62 \hllin{\ 5\ }\hlppc{\#include\ \usebox{\hlboxlessthan}stdio.h\usebox{\hlboxgreaterthan}}\\
  63. 63 \hllin{\ 6\ }\hlstd{}\hlkwb{int\ }\hlstd{}\hlkwd{main}\hlstd{}\hlopt{()}\\
  64. 64 \hllin{\ 7\ }\hlstd{}\hlopt{\usebox{\hlboxopenbrace}}\\
  65. 65 \hllin{\ 8\ }\hlstd{\ }\hlslc{//这里是中文注释}\\
  66. 66 \hllin{\ 9\ }\hlstd{\ }\hlkwd{printf}\hlstd{}\hlopt{(}\hlstd{}\hlstr{\dq{}Hello\ world!}\hlesc{$\backslash$n}\hlstr{\dq{}}\hlstd{}\hlopt{);}\\
  67. 67 \hllin{10\ }\hlstd{\ }\hlkwa{return\ }\hlstd{}\hlnum{0}\hlstd{}\hlopt{;}\\
  68. 68 \hllin{11\ }\hlstd{}\hlopt{\usebox{\hlboxclosebrace}}\hlstd{}\\
  69. 69 \mbox{}
  70. 70 \normalfont
  71. 71 \normalsize
  72. 72 %\shorthandon{"}
  73. 73 \end{CJK*}
  74. 74 \end{document}
  75. 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. winform设置所有窗体统一图标

    class WindowHookerManager { static WindowHooker hooker = new WindowHooker(); public static void SetA ...

  2. vs python2.7 bug

    微软vs里面小细节的bug真他妈的多

  3. vue学习10-计算属性

    计算属性 1 <!DOCTYPE html> 2 <html lang='en'> 3 <head> 4 <meta charset='UTF-8'> ...

  4. 集合框架-TreeSet集合

    1 package cn.itcast.p5.treeset.demo; 2 3 import java.util.Iterator; 4 import java.util.TreeSet; 5 6 ...

  5. 微信小程序入门教程之二:页面样式

    这个系列的上一篇教程,教大家写了一个最简单的 Hello world 微信小程序. 但是,那只是一个裸页面,并不好看.今天接着往下讲,如何为这个页面添加样式,使它看上去更美观,教大家写出实际可以使用的 ...

  6. STC8H开发(八): NRF24L01无线传输音频(对讲机原型)

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  7. 字节Android Native Crash治理之Memory Corruption工具原理与实践

    作者:字节跳动终端技术--庞翔宇 内容摘要 ​ MemCorruption工具是字节跳动AppHealth (Client Infrastructure - AppHealth) 团队开发的一款用于定 ...

  8. python31day

    内容回顾 网编总结,思维导图 计划 并发编程的开始,计划6天 操作系统1天 进程2天 线程2天 携程1天 今日内容 操作系统 多道操作系统: 从顺序的一个个执行的思路变成:并行轮流使用cpu 一个程序 ...

  9. JavaScripts之迪卡算法求积(n*n)适用于SKU信息计算等场景

    迪卡算法求积(n * n) 使用 array.reduce 的方式实现 笛卡尔积算法 const arr = [ ['黑色', '白色', '蓝色'], ['1.2KG', '2.0KG', '3.0 ...

  10. maven的三种项目打包方式----jar,war,pom

    1.pom工程:**用在父级工程或聚合工程中.用来做jar包的版本控制.必须指明这个聚合工程的打包方式为pom 2.war工程:将会打包成war,发布在服务器上的工程.如网站或服务.在SpringBo ...