当使用带有符号的 Perl 变量名时listings
,$
和@
符号会以某种方式被着色identifierstyle
,但%
符号仍未改变样式。
因此,此代码:
\documentclass{article}
\usepackage{listings,xcolor}
\lstdefinestyle{perl}{
language=Perl,
basicstyle=\ttfamily,
keywordstyle=\bfseries\color{green!40!black},
commentstyle=\color{purple!40!black},
identifierstyle=\color{blue},
stringstyle=\color{orange},
}
\lstset{style=perl}
\begin{document}
\begin{lstlisting}
my ($a, $b, $c) = ('a'..'z');
my ($a, $b, @c) = ('a'..'z');
my ($a, $b, %c) = ('a'..'z');
\end{lstlisting}
\end{document}
给出结果:
有什么方法可以让我listings
理解应该具有与或%
相同的风格?$
@
手册中对关键字和注释的说明非常清楚,但并没有帮助我理解标识符和未设置样式的运算符 (?) 之间的区别。查看 Perl 语言定义也lstlang1.sty
没有帮助,因为那里没有关于 either$
和@
or 的内容%
。
答案1
简短回答
默认情况下,标识符不能以 开头。您可以在自定义样式的定义中指定 ,%
以 开头标识符。%
alsoletter={\%}
perl
详细解答
alsoletter
在手册的第 4.18 小节中查找密钥listings
:
所有标识符(关键字、指令等)都由字母和字母数字字符(字母和数字)组成。例如,如果您写
keywords={one-two,\#include}
,则减号必须变成数字,而升号必须变成字母,因为否则无法检测到关键字。
根据表 2,%
默认情况下,不将其视为“字母”,而是视为“其他”。样式Perl
(在 中定义lstdrvrs.dtx
,该文件随 一起提供listings.sty
)不会改变这一点。
因此,为了允许标识符以 开头%
,必须指定alsoletter={\%}
。请注意,%
此处必须对 进行转义;有关详细信息,请参阅第 4.1 节中的第 5 项。
\documentclass{article}
\usepackage{listings,xcolor}
\lstdefinestyle{perl}
{
language=Perl,
basicstyle=\ttfamily,
keywordstyle=\bfseries\color{green!40!black},
commentstyle=\color{purple!40!black},
identifierstyle=\color{blue},
stringstyle=\color{orange},
alsoletter={\%},
}
\lstset{style=perl}
\begin{document}
\begin{lstlisting}
my ($a, $b, $c) = ('a'..'z');
my ($a, $b, @c) = ('a'..'z');
my ($a, $b, %c) = ('a'..'z');
\end{lstlisting}
\end{document}