LaTeX源代码显示宏包listings应用备忘之新语言定义

  我目前了解的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宏包的说明文档。

猜你喜欢

转载自www.cnblogs.com/atthefirst/p/10338453.html