为什么 moretexcs 无法在 \lstset 或 \lstdefinestyle 中运行?

为什么 moretexcs 无法在 \lstset 或 \lstdefinestyle 中运行?

listings我对自己未能使用moretexcs带有\lstset或的密钥对包执行一些看似非常简单的操作感到非常困惑\lstdefinestyle

下面,我成功地使用该键moreemph添加A,B,C到第一个类(红色)和D,E,F第二个键(蓝色)。

但是,当我尝试使用该moretexcs键将标识符添加到texcs类别的相应操作时,它们都没有得到适当的格式化(橙色、紫色、灰色,分别代表类别 1、2、3);相反,它们保持绿色(默认basicstyle)。

我尝试过 (a) 使用moretexcs作为键\lstset和 (b) 使用moretexcs作为键来\lstdefinestyle定义样式mystyle,然后使用 调用该样式\lstset。 两者都不起作用。

至少,我知道listings这是 LaTeX,并且第一类texcs是橙色,因为\newcommand被正确识别为控制序列并使用正确的颜色格式化。

我的语法(对我而言)就像在karlkoeller 的回答到 ”列表中的问题,彩色分割命令“”。

我以前用过moretexcs,所以我很困惑,为什么我没能弄清楚。

我究竟做错了什么?

\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\lstset{%
    language=[LaTeX]{TeX},%
    basicstyle={\color{green}\ttfamily},%
    emphstyle=\color{red},%
    emphstyle=[2]\color{blue},%
    texcsstyle=*\color{orange},%
    texcsstyle=*[2]\color{violet},%
    texcsstyle=*[3]\color{gray}%
}
\begin{document}
\noindent\\Pre-population
\begin{lstlisting}
\newcommand
A B C D E F G a b c d e f g
\end{lstlisting}
\lstset{moreemph=[1]{A,B,C}}
\lstset{moreemph=[2]{D,E,F}}
\lstset{moretexcs=[1]{a,b}}
\lstset{moretexcs=[2]{c,d}}
\lstdefinestyle{mystyle}{moretexcs=[3]{e,f}}
\lstset{style=mystyle}
\noindent\\Post-population
\begin{lstlisting}
\newcommand
A B C D E F G a b c d e f g
\end{lstlisting}
\end{document}

输出如下:

在此处输入图片描述

答案1

字段texcs决定了列表中控制序列的排版方式。这些必须以 开头\,这就是为什么第二个示例中的单个字母不受给定样式的影响。当您在代码中使用实际控制序列时,效果是可见的:

\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\lstset{%
    language=[LaTeX]{TeX},%
    basicstyle={\color{green}\ttfamily},%
    emphstyle=\color{red},%
    emphstyle=[2]\color{blue},%
    texcsstyle=*[1]\color{orange},%
    texcsstyle=*[2]\color{violet},%
    texcsstyle=*[3]\color{gray}%
}

\begin{document}
\lstdefinestyle{mystyle}{
    moretexcs=[3]{f,g}
}
\lstset{
    moreemph=[1]{A,B,C},
    moreemph=[2]{D,E,F},
    moretexcs=[1]{a,b},
%    deletetexcs=[1]{c,d},
    moretexcs=[2]{c,d,e},
    moretexcs=[3]{f,g},
    style=mystyle
}
\begin{lstlisting}
 A  B  C  D  E  F  G  a  b  c  d  e  f  g  h
\A \B \C \D \E \F \G \a \b \c \d \e \f \g \h
\end{lstlisting}
\end{document}

在此处输入图片描述

请注意,虽然和\c是通过 定义的,但它们\d却会得到。这是因为两者都是通过 语言预定义的,因此被归类为第 1 类。您可以使用将它们从该类中删除,以获得预期的样式:texcsstyle[1]moretexcs[2]LaTeXmoretexcs={...}deletetexcs=[1]{c,d}

在此处输入图片描述

还请注意,在输出的第二行中,所有大写的宏名称都按照字段定义突出显示moreemph。这是由于listings文档中提到的一个错误:

错误:texcs...干扰其他关键字列表。例如,如果emph包含单词foo,则控制序列\foo将显示在中emphstyle

相关内容