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

环境

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

代码

\documentclass{article}
%
\usepackage{ctex} % 汉字支持
\usepackage{geometry} % 页面布局支持
\usepackage{listings} % 源代码显示支持
\usepackage[colorlinks,linkcolor=blue]{hyperref}
%
% 设置页面为A4纸,并设置页边距
\geometry{a4paper,left=3.18cm,right=3.18cm,top=2.4cm,bottom=2.4cm}
%
% 以下两行命令用于解决LuaLaTeX编译模式下listings宏包不能正常工作的问题
\newdimen\cht%
\newdimen\cdp%
%
\lstdefinelanguage{golang} {
  classoffset=0,%
  morekeywords={package,import,for,if,range,iota,make,switch,default,case,%
      return},%
  keywordstyle=\color[RGB]{49,54,59}\bfseries,%
  classoffset=1,%
  morekeywords={const,func,var,type,struct,},%
  keywordstyle=\color[RGB]{41,128,185},%
  classoffset=2,%
  morekeywords={main,Printf,Println,Split,len},%
  keywordstyle=\color[RGB]{127,140,141},%
  classoffset=3,%
  morekeywords={fmt,flag,html,os,strings},%
  keywordstyle=\color[RGB]{39,174,96},%
  classoffset=4,%
  morekeywords={string,int,byte},%
  keywordstyle=\color[RGB]{41,128,185},%
  classoffset=0,%
  % 把双引号内容视为字符串,并定义颜色
  morestring=[b][{\color[RGB]{211,54,130}}]",
   % 把单引号内容视为字符串,并定义颜色
  morestring=[d][{\color[RGB]{61,174,233}}]',
  sensitive=true,
  % 这里的颜色定义需要用大括号括起来,否则报错
  morecomment=[l][{\color[RGB]{127,140,141}}]{//},
  % 这里的颜色定义需要用大括号括起来,否则报错
  morecomment=[s][{\color[RGB]{127,140,141}}]{/*}{*/}
}
%
% 代码显示样式设置
\lstset{%
  language=golang,
  breaklines,% 自动换行
  basicstyle=\small,% 设置字体大小
  frame=single,% 单线框
  numbers=left,% 行号在左边
  numberstyle=\tiny,% 行号字体大小
}%
%
\begin{document}
%
\begin{lstlisting}
package main

import "fmt"

var (
    a [30000]byte
    prog = "++++++++++[>++++++++++<-]>++++.+."
    p, pc int
)
func loop(inc int) {
    for i := inc; i != 0; pc += inc {
        switch prog[pc+inc] {
        case '[':
            i++
        case ']':
            i--
        }
    }
}
func main() {
    for {
        switch prog[pc] {
        case '>':
            p++
        case '<':
            p--
        case '+':
            a[p]++
        case '-':
            a[p]--
        case '.':
            fmt.Print(string(a[p]))
        case '[':
            if a[p] == 0 {
                loop(1)
            }
        case ']':
            if a[p] != 0 {
                loop(-1)
            }
        default:
            fmt.Println("Illegal instruction")
        }
        pc++
        if pc == len(prog) {
            return
        }
    }
}
\end{lstlisting}
%
\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. docker实战 (1) 关于docker的安装

    docker定义: Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制 ...

  2. Week5——applet

    1.定义 applet是一种Java程序.它一般运行在支持Java的Web浏览器内.因为它有完整的Java API支持,所以applet是一个全功能的Java应用程序. 2.特点(不同于Java  a ...

  3. PyQt4(使用ui)

    1.使用qt designer设计界面,保存为test1.ui: 2.使用pyuic4 test1.ui -o ui.py生成ui代码. 3.程序载入. import sys import ui fr ...

  4. 回归JavaScript基础(六)

    主题:引用类型Date.RegExp的介绍. 上节主要主要介绍了Object.Array引用类型.这节将继续为大家介绍引用类型,并对书中的一些知识点进行总结与归纳,也借此巩固自己对JavaScript ...

  5. aws rhel 7 安装GUI ,配置VNC

    预计阅读时间:15分钟 预计配置时间:30分钟  (前提是已经申请AWS的EC2的rhel7 云主机并且成功运行) 目前AWS 亚马逊云免费试用一年,申请一个学习使用 痛点:没有GUI,无法搭建Jen ...

  6. [翻译] USING GIT IN XCODE [6] 在XCODE中使用GIT[6]

    USING GIT IN XCODE KEEPING IN SYNC WITH REMOTE REPOSITORIES As you make changes in your local workin ...

  7. sonar常见

    sonar在linux上安装好之后,若之后又更改了sonar的配置,则需要重启服务,重启方法如下: 1.进入到sonar的安装目录下,打开bin目录,会看到所有操作系统的文件夹 2.若操作系统为lin ...

  8. 【C语言】 任意十进制数字转十六进制

    大概思路:输入任意十进制数字 首先确定位数: 使用整形数组来存储十六进制数: a[0] 表示十六进制数字的位数: #include <stdio.h> #include <stdli ...

  9. 《C++ Primer Plus》读书笔记之六—函数探幽

    第八章 函数探幽 1.常规函数与内联函数的主要区别不在于编写方式,而在于C++编译器如何将它们组合到程序中. 2.常规函数调用使程序跳到另外一个地址(函数地址),并在函数结束时返回,更详细的的实现过程 ...

  10. Python成员运算符

    Python成员运算符 其他语言没有,是否包含运算符,主要应用在字符串或者集合中 测试实例中包含了一系列的成员,包括字符串,列表或元组. #使用场景01:字符串是否包含另外一个字符串? str01 = ...