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]
LaTeX
moretexcs={...}
deletetexcs=[1]{c,d}
还请注意,在输出的第二行中,所有大写的宏名称都按照字段定义突出显示moreemph
。这是由于listings
文档中提到的一个错误:
错误:
texcs...
干扰其他关键字列表。例如,如果emph
包含单词foo
,则控制序列\foo
将显示在中emphstyle
。