为什么没有语言的列表列表使用 identifierstyle?

为什么没有语言的列表列表使用 identifierstyle?

这是我的代码:

\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\lstset{
    keywordstyle=\color{blue},
    identifierstyle=\color{red},
}
\lstnewenvironment{algol}{\lstset{language=algol}}{}
\begin{document}

\begin{lstlisting}
foo
\end{lstlisting}

\begin{algol}
int foo
\end{algol}

\end{document}

输出如下:

在此处输入图片描述

为什么第一个示例以(红色)lstlisting呈现?选择哪种语言的语法高亮进行此呈现?identifierstyle

下面是重现此问题的又一个最小示例:

\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\lstset{
    identifierstyle=\color{red},
}
\begin{document}
\begin{lstlisting}
foo
\end{lstlisting}
\end{document}

这会像之前一样生成红色的字符串“foo”。为什么即使没有启用任何语言语法也会出现这种情况?

答案1

listings根据列表的当前 catcode 机制,将输入文本拆分为几个标记类。解析标识符的默认规则是:单个字母后跟一串字母或数字。默认情况下,字母为- 、 - 、 和az数字AZ- @。以下示例说明了这一点:$_09

\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\lstset{
    identifierstyle=\color{red}
}
\begin{document}
\begin{lstlisting}
foo
foo123
foo@bar__123
123$foo
\end{lstlisting}
\end{document}

在此处输入图片描述

每个标识符都使用当前的 进行设置identifiersstyle。任何其他字符都将停止当前标识符解析,并以基本样式设置其余文本,直到找到另一个标识符(或其他特殊语法元素,如分隔环境等)。

在此标识符解析机制的基础上,您可以定义特殊标识符,例如关键字,您还可以为其提供额外的样式,或者更改 catcodes 以使更多/更少的字母成为标识符的一部分(参见alsoletteralsoother)。

相关内容