我目前了解的LaTeX中有关源代码显示的宏包有两个,这里介绍其中的listings宏包。listings宏包中已经定义了部分计算机语言的显示样式,但还是有些语言没有定义,我们一起看一下如何定义新的语言样式。下面的内容仅是示例,并不严谨,大家请按照自己的情况进行详细定义。

环境

  操作系统:Ubuntu 16.04 64位桌面版
  LaTeX工具:TeXstudio 2.10.8
  编译方式:LuaLaTeX

代码

  1. \documentclass{article}
  2. %
  3. \usepackage{ctex} % 汉字支持
  4. \usepackage{geometry} % 页面布局支持
  5. \usepackage{listings} % 源代码显示支持
  6. \usepackage[colorlinks,linkcolor=blue]{hyperref}
  7. %
  8. % 设置页面为A4纸,并设置页边距
  9. \geometry{a4paper,left=3.18cm,right=3.18cm,top=2.4cm,bottom=2.4cm}
  10. %
  11. % 以下两行命令用于解决LuaLaTeX编译模式下listings宏包不能正常工作的问题
  12. \newdimen\cht%
  13. \newdimen\cdp%
  14. %
  15. \lstdefinelanguage{golang} {
  16. classoffset=0,%
  17. morekeywords={package,import,for,if,range,iota,make,switch,default,case,%
  18. return},%
  19. keywordstyle=\color[RGB]{49,54,59}\bfseries,%
  20. classoffset=1,%
  21. morekeywords={const,func,var,type,struct,},%
  22. keywordstyle=\color[RGB]{41,128,185},%
  23. classoffset=2,%
  24. morekeywords={main,Printf,Println,Split,len},%
  25. keywordstyle=\color[RGB]{127,140,141},%
  26. classoffset=3,%
  27. morekeywords={fmt,flag,html,os,strings},%
  28. keywordstyle=\color[RGB]{39,174,96},%
  29. classoffset=4,%
  30. morekeywords={string,int,byte},%
  31. keywordstyle=\color[RGB]{41,128,185},%
  32. classoffset=0,%
  33. % 把双引号内容视为字符串,并定义颜色
  34. morestring=[b][{\color[RGB]{211,54,130}}]",
  35. % 把单引号内容视为字符串,并定义颜色
  36. morestring=[d][{\color[RGB]{61,174,233}}]',
  37. sensitive=true,
  38. % 这里的颜色定义需要用大括号括起来,否则报错
  39. morecomment=[l][{\color[RGB]{127,140,141}}]{//},
  40. % 这里的颜色定义需要用大括号括起来,否则报错
  41. morecomment=[s][{\color[RGB]{127,140,141}}]{/*}{*/}
  42. }
  43. %
  44. % 代码显示样式设置
  45. \lstset{%
  46. language=golang,
  47. breaklines,% 自动换行
  48. basicstyle=\small,% 设置字体大小
  49. frame=single,% 单线框
  50. numbers=left,% 行号在左边
  51. numberstyle=\tiny,% 行号字体大小
  52. }%
  53. %
  54. \begin{document}
  55. %
  56. \begin{lstlisting}
  57. package main
  58. import "fmt"
  59. var (
  60. a [30000]byte
  61. prog = "++++++++++[>++++++++++<-]>++++.+."
  62. p, pc int
  63. )
  64. func loop(inc int) {
  65. for i := inc; i != 0; pc += inc {
  66. switch prog[pc+inc] {
  67. case '[':
  68. i++
  69. case ']':
  70. i--
  71. }
  72. }
  73. }
  74. func main() {
  75. for {
  76. switch prog[pc] {
  77. case '>':
  78. p++
  79. case '<':
  80. p--
  81. case '+':
  82. a[p]++
  83. case '-':
  84. a[p]--
  85. case '.':
  86. fmt.Print(string(a[p]))
  87. case '[':
  88. if a[p] == 0 {
  89. loop(1)
  90. }
  91. case ']':
  92. if a[p] != 0 {
  93. loop(-1)
  94. }
  95. default:
  96. fmt.Println("Illegal instruction")
  97. }
  98. pc++
  99. if pc == len(prog) {
  100. return
  101. }
  102. }
  103. }
  104. \end{lstlisting}
  105. %
  106. \end{document}


效果如下


说明
  1、classoffset命令可以让我们给关键字分类并定义不同的颜色。
  2、morekeywords命令内是关键字。其他内容基本上一看就明白,这里不再说明,深入了解可参考listings宏包的说明文档。

LaTeX源代码显示宏包listings应用备忘之新语言定义的更多相关文章

  1. LaTeX的一些宏包及细节知识

    文章来源:LaTeX的一些宏包及细节知识http://blog.chinaunix.net/uid-20289887-id-1710422.html ps:我的机器上软件并不能直接运行通,下面“代码” ...

  2. LaTeX使用titlesec宏包改变章节编号形式的方法

    1.titleformat宏包命令详解 LaTeX中可以用titlesec宏包中的titleformat命令来改变标题形式: 导入宏包: \usepackage{titlesec} 改变标题的代码如下 ...

  3. Windows 下 LaTeX 手动安装宏包(package)以及生成帮助文档的整套流程

    本文简单介绍如何手动安装一个 LaTeX 宏包. 一般来说,下载的 TeX 发行版已经自带了很多宏包,可以满足绝大部分需求,但是偶尔我 们也可能碰到需要使用的宏包碰巧没有安装的情况,这时我们就需要自己 ...

  4. 解决“用PicGo-2.3.0-beta5 + GitHub做博客图床,github仓库图片文件不显示”的问题记录(备忘)

    解决"用PicGo-2.3.0-beta5 + GitHub做博客图床,github仓库图片文件不显示"的问题记录(备忘) 历时几个小时百度,终于靠自己理解解决了GitHub仓库图 ...

  5. LaTeX中titlesec宏包的使用

    在 xelatex 中使用 \usepackage 指令使用 titlesec 宏包时,可以指定一些格式选项,如下: \usepackage[center]{titlesec} 其中 center 可 ...

  6. LaTeX的tasks宏包

    tasks 宏包 LaTeX的列表(list)通常是将项(item,条目)一个一个垂直的平行显示,所谓"列"表的由来. 水平分列列表,即将多个项分散到各列而不是一列,在出考卷的选择 ...

  7. LaTeX手动安装宏包(package)以及生成帮助文档的整套流程

    注意:版权所有,转载请注明出处. 我使用的是ctex套装,本来已经自带了许多package,但是有时候还是需要使用一些没有预装的宏包,这时就需要自己安装package了.下载package可以从CTA ...

  8. thinkphp -- 解决连接mssql后台管理菜单显示中文乱码问题(备忘)

    一开始使用的是mysql,数据库的编码是UTF-8 后来换数据库,mysql换成mssql2005,数据库编码为GBK,管理菜单出现乱码,如下所示(左图正常,右图乱码) 解决方法如下: 第一,查看数据 ...

  9. unix下各种包安装方法备忘

    deb包 : sudo dpkg -i google-chrome-stable_amd64.deb

随机推荐

  1. 使用keychain永久存储数据

    使用keychain永久存储数据 https://github.com/soffes/sskeychain keychain当然还是使用开源的好:),keychain是干啥用的?这个,baidu一下你 ...

  2. UNIX高级环境编程(3)Files And Directories - stat函数,文件类型,和各种ID

    在前面的两篇,我们了解了IO操作的一些基本操作函数,包括open.read和write. 在本篇我们来学习一下文件系统的其他特性和一个文件的属性,涉及的函数功能包括: 查看文件的所有属性: 改变文件所 ...

  3. [原创]获取JS数组最大值、最小值

    核心关键 JS有Array数组对象,使用prototype内置属性扩展,增加Array数组max().min()方法 具体代码 //最小值 Array.prototype.min = function ...

  4. 17 汽车服务工程 李腾飞 MP4

  5. struts2.5动态方法绑定问题

    <global-allowed-methods>regex:.*</global-allowed-methods> <?xml version="1.0&quo ...

  6. 详解权限管理(RBAC)的实现方法

    在说权限管理前,应该先知道权限管理要有哪些功能: ().用户只能访问,指定的控制器,指定的方法 ().用户可以存在于多个用户组里 ().用户组可以选择,指定的控制器,指定的方法 ().可以添加控制器和 ...

  7. handsontable 和 echarts都定义了require方法,初始化时冲突了,怎么办?

    echarts初始化时报这个错误. require.config is not a function  方案一: 让其中一方的初始化不依赖于 require即可 1.去掉 var testDrowEc ...

  8. 最强自定义PHP集成环境,系统缺失dll和vc也能正常运行

    PHPWAMP支持iis.apache.nginx等web服务器,并全部支持php多版本同时运行,无限自定义mysql.php PHPWAMP支持32和64,支持自定义自动匹配系统所需dll和vc,纯 ...

  9. python多进程(三)

    消息队列 消息队列”是在消息的传输过程中保存消息的容器. 消息队列最经典的用法就是消费者和生成者之间通过消息管道来传递消息,消费者和生成者是不通的进程.生产者往管道中写消息,消费者从管道中读消息.   ...

  10. Tomcat6的相关配置

    1. Tomcat无安装部署: 本文windows用的是win7,ubuntu用的是12.04 LTS,tomcat版本是1.6 1.1. windows上的tomcat无安装部署 1.1.1. 确认 ...