我listings
在毕业论文中使用了 package 作为源代码,除了 Java、C# 等主流语言外,还需要包含语言语法(.g)的源代码,这些语言是纯标记语言,格式如下:
options {
language=Java;
//backtrack=true;
// please comment it in for correct lexer generation!
// the definitions of many operators require backtracking!
}
// program blocks
program
: (declaration)+
;
declaration
: metaDeclaration
| actionDeclaration
| globalDeclaration
| eventDeclaration
;
metaDeclaration
: 'meta' metaParam STRING? ';'
;
metaParam
: 'version'
| 'name'
| 'icon'
| 'color'
| 'private'
;
globalDeclaration
: 'var' varIdentifier ':' typeIdentifier
codeblock
;
我想要达到的是以下(或类似)的代码着色(见图):
我该怎么做?有没有我可以使用预设的语言模板?
编辑:我知道如何通过添加新关键字和颜色规则来添加自己的语言。我缺少以下内容:
- 如何将以双斜杠开头的行设置为注释(可能采用 C 模板?)
- 所有字符串都应为绿色。字符串是以单引号开头和结尾的字符序列,如上例所示。内容无关紧要,应始终用一种颜色着色。
- 所有文字都应为深蓝色。文字是完全用大写字母书写的非字符串(请参见我的代码中的“STRING”)
- 选项应为黑色。它们遵循以下模式:文本后跟花括号,花括号中的参数被指定为“param = value”(参见选项)
- 所有不符合上述规则的东西都应保持洋红色(=规则,上面有很多例子)。
我知道如何完成第一点,但我需要帮助完成其余的定制。
答案1
更新后的版本:
这是一个满足您的要求的更新版本:
- 双斜线注释以灰色和斜体显示
- 单引号中的字符串为绿色
- 文字(全部大写)为深蓝色(但需要指定)
options{}
为黑色,直到}
遇到尾随。- 其余均为洋红色
- 已启用换行(参见第 5-7 行)
代码:
\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\lstset{% This applies to ALL lstlisting
backgroundcolor=\color{yellow!10},%
numbers=left, numberstyle=\tiny, stepnumber=2, numbersep=5pt,%
}%
% Applies only when you use it
\lstdefinestyle{MyLang}{
basicstyle=\small\ttfamily\color{magenta},%
breaklines=true,% allow line breaks
moredelim=[s][\color{green!50!black}\ttfamily]{'}{'},% single quotes in green
moredelim=*[s][\color{black}\ttfamily]{options}{\}},% options in black (until trailing })
commentstyle={\color{gray}\itshape},% gray italics for comments
morecomment=[l]{//},% define // comment
emph={%
STRING% literal strings listed here
},emphstyle={\color{blue}\ttfamily},% and formatted in blue
alsoletter={:,|,;},%
morekeywords={:,|,;},% define the special characters
keywordstyle={\color{black}},% and format them in black
}
\begin{document}
\begin{lstlisting}[style=MyLang]
options {
language=Java;
//backtrack=true;
// please comment it in for correct lexer generation!
// the definitions of many operators require backtracking!
}
// program blocks
program
: (declaration)+
;
declaration
: metaDeclaration
| actionDeclaration
| globalDeclaration
| eventDeclaration
;
metaDeclaration
: 'meta' metaParam STRING? ';'
;
metaParam
: 'version'
| 'name'
| 'icon'
| 'color'
| 'private'
;
globalDeclaration
: 'var' varIdentifier ':' typeIdentifier
codeblock
;\end{lstlisting}
\end{document}
初始版本
改编自用附加关键字来扩展语言?应该可以让你开始:
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\lstset{%
backgroundcolor=\color{yellow!20},%
basicstyle=\small\ttfamily\color{blue},%
numbers=left, numberstyle=\tiny, stepnumber=2, numbersep=5pt,%
}%
% Add your keywords here, and have this in a separate file
% and include it in your preamble
\lstset{emph={%
color, icon, meta, name, private, var%
},emphstyle={\color{green}}%
}%
\begin{document}
\begin{lstlisting}
metaParam
: 'version'
| 'name'
| 'icon'
| 'color'
| 'private'
;
globalDeclaration
: 'var' varIdentifier ':' typeIdentifier
codeblock
;
\end{lstlisting}
\end{document}