ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

LaTeX之listings宏包定义语言示例

2021-11-21 17:02:13  阅读:369  来源: 互联网

标签:LaTeX string 示例 color 定义语言 关键字 let validators 定义


虽然listings宏包(1.8c版)默认支持的编程语言不少,但还是有限,这里介绍一下如何定义新语言的显示样式风格。

环境

  • Ubuntu 20.04
  • LuaLaTeX 1.10.0
  • listings 1.80c(2019/09/10)

代码

% 博客园,繁星间漫步,陆巍的博客
\documentclass{article}% 中文板式:ctexart,英文版式:article

\usepackage{ctex}% 中文支持
\usepackage{geometry}% 用于页面设置
\usepackage[dvipsnames, svgnames, x11names]{xcolor}% 颜色支持
\usepackage{listings}% 代码显示支持

\setmainfont{Ubuntu Mono}% 设置全局英文字体

% 设置为A4纸,边距适中模式(参考永中office)
\geometry{
  width = 210mm,
  height = 297mm,
  left = 19.1mm,
  right = 19.1mm,
  top = 25.4mm,
  bottom = 25.4mm
}

% 代码显示样式设置
\lstset{
  breaklines,% 自动换行
  basicstyle=\small,% 设置字体大小
  frame=single,% 单线框
  numbers=left,% 行号在左边
  numberstyle=\tiny,% 行号字体大小
  keywordstyle = \color[RGB]{0, 0, 160},% 关键字颜色
  commentstyle = \color[RGB]{160, 160, 160},% 注释颜色
  stringstyle  = \color[RGB]{0, 0, 255},% 字符串颜色
}

% 定义TypeScript脚本语言显示样式
\lstdefinelanguage{TypeScript}{
  morekeywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break, public, let, class, export, throw, implements, import, this, interface, of},% 定义2类关键字
  keywordstyle=\color{purple}\bfseries,% 2类关键字风格
  classoffset=2,% 关键字类别2
  morekeywords={string, boolean, },% 定义1类关键字
  keywordstyle=\color{OliveGreen}\bfseries,% 1类关键字风格
  classoffset=1,% 关键字类别1
  morekeywords={constructor,},% 定义1类关键字
  keywordstyle=\color{Cerulean}\bfseries,% 1类关键字风格
  classoffset=0,% 关键字类别0
  identifierstyle=\color{black},% 标识符风格
  sensitive=true,% 大小写敏感。
  comment=[l]{//},% 定义单行注释
  morecomment=[s]{/*}{*/},% 定义多行注释
  commentstyle=\color{MidnightBlue}\ttfamily,% 注释风格
  stringstyle=\color{Orchid}\ttfamily,% 字符串风格
  morestring=[b]',% 定义字符串
  morestring=[b]"% 定义字符串
}

\begin{document}

\section{TypeScript示例}
\begin{lstlisting}[language=TypeScript]
interface StringValidator {
    isAcceptable(s: string): boolean;
}

let lettersRegexp = /^[A-Za-z]+$/;
let numberRegexp = /^[0-9]+$/;

class LettersOnlyValidator implements StringValidator {
    isAcceptable(s: string) {
        return lettersRegexp.test(s);
    }
}

class ZipCodeValidator implements StringValidator {
    isAcceptable(s: string) {
        return s.length === 5 && numberRegexp.test(s);
    }
}

// Some samples to try
let strings = ["Hello", "98052", "101"];

// Validators to use
let validators: { [s: string]: StringValidator; } = {};
validators["ZIP code"] = new ZipCodeValidator();
validators["Letters only"] = new LettersOnlyValidator();

// Show whether each string passed each validator
for (let s of strings) {
    for (let name in validators) {
        let isMatch = validators[name].isAcceptable(s);
        console.log(`'${ s }' ${ isMatch ? "matches" : "does not match" } '${ name }'.`);
    }
}
\end{lstlisting}

\end{document}

效果

LaTeX之listings宏包定义语言示例效果图

注意事项

以上代码中的注释已经比较清楚,就不多作解释,只是要注意:当我们把关键字分为几类时,在定义中的“classoffset”设置,需要倒着来,如上面的2、1、0。

标签:LaTeX,string,示例,color,定义语言,关键字,let,validators,定义
来源: https://www.cnblogs.com/among-the-stars/p/15585068.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有