如何才能使标识符样式应用于‘%’(在 Perl 列表中)?

如何才能使标识符样式应用于‘%’(在 Perl 列表中)?

当使用带有符号的 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}

相关内容