我正在尝试使用 listings 包为 Windows INI 文件创建一个简单的样式
我想要这样的结果:
- 紫色 [部分] 标签
- 红色赋值运算符(= 和 :)
- 以 (; 或 #) 开头的灰色注释行
以下是 Notepad++ 突出显示的方式。
到目前为止,我能够实现紫色的 [标签] 和 ; 注释。但我无法使赋值运算符突出显示,也无法使 # 注释正常工作。
\documentclass{article}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{listings}
\lstdefinelanguage{Ini}
{
basicstyle=\ttfamily\small,
columns=fullflexible,
tag=[s]{[]},
tagstyle=\color{Orchid}\bfseries,
usekeywordsintag=true,
morecomment=[l]{;},
commentstyle=\color{gray}\ttfamily,
alsoletter={=},
ndkeywords={=},
ndkeywordstyle=\color{green}\bfseries
}[html]
\title{INI test}
\author{Me}
\begin{document}
\maketitle
INI file highlighting test.
\begin{lstlisting}[language={Ini}]
; comment1
[section1]
var1 = val1
var2 = val2
#comment2
[section2]
var1: val1
var2: val2
\end{lstlisting}
\end{document}
答案1
我认为实现这一点的最佳方法是避免使用html
样式作为基础:
\lstdefinelanguage{Ini}
{
basicstyle=\ttfamily\small,
columns=fullflexible,
morecomment=[s][\color{Orchid}\bfseries]{[}{]},
morecomment=[l]{\#},
morecomment=[l]{;},
commentstyle=\color{gray}\ttfamily,
morekeywords={},
otherkeywords={=,:},
keywordstyle={\color{green}\bfseries}
}
这满足了要求,但不会突出显示 ini 值中的 html。
你的问题是:
#
不能指定为注释分隔符,除非对其进行转义(它是一个特殊字符)- 突出显示符号而不是更改其类别,最好使用
otherkeywords
(只有morekeywords
在先使用时才能使用,因此morekeywords={}
输入) - 你滥用了
tags
wheremorecomment
,这已经足够了(你也可以使用moredelim
)