我正在使用列表来突出显示一些关键字。我遇到的问题是,我希望关键字的格式和关键字后面的单词的格式不同。关键字始终相同,但后面的单词可能不同。
这是我在 MS Word 中模拟的一个例子,以展示我想要的内容。
只要单词 answer 出现在 lstlisting 环境中,它就应该将该单词加粗(我已经处理过了),并将其下一个单词设为红色,并且后面总是会跟着一个逗号。
我看过一些答案,例如强调(颜色)列表中两个分隔符之间的内容,但不强调分隔符本身但我无法修改它来让它适合我。
这是我尝试过的。
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\lstdefinestyle{MyList}{%
basicstyle=\ttfamily,%
keywords={Answer},%
keywordstyle=\bfseries,%
}
\lstset{%
moredelim=**[is][\beginlstdelim{Answer:\ }\color{red}]{,},
}
\begin{document}
\begin{lstlisting}
Here is some question text.
Answer: True, because of theorem 1.3.
\end{lstlisting}
\end{document}
该代码导致了很多问题。
答案1
列表需要一些技巧才能正常运行。制作Answer:
和,
配对分隔符的基本想法是可行的,但我们不希望分隔符也变成红色,因此您可以使用i
不可见的键。然后您需要重新插入Answer:
并,
以某种方式插入。Answer:
这很容易——您只需将其作为样式代码的一部分输入即可。
listings 包没有提供一个简单的钩子来在末尾的分隔符处添加代码,所以这有点困难。这里的技巧是 listings 需要有一个组,以便将样式代码的范围保持在本地,并且在分隔文本之后,它必须关闭该组以结束样式代码。因此,我们可以使用 crazy tex 原语\aftergroup
在组关闭后插入逗号。这样不会崩溃(这是\aftergroup
在未知代码中间使用的预期结果),而是将逗号插入到我们需要的位置。
还有最后一个问题,就是出于某种奇怪的原因,如果我们将此代码直接放入样式参数中,列表会因一些奇怪的错误而中断。为了解决这个问题,我将其放入一个单独的命令中,然后将该命令放入样式参数中。
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{geometry}
\newcommand\mydelimcode{\textbf{Answer:}\color{red}\aftergroup,}
\lstset{%
basicstyle=\ttfamily,
moredelim=**[is][\mydelimcode]{Answer:}{,},
}
\begin{document}
\begin{lstlisting}
Here is some question text.
Answer: True, because of theorem 1.3.
Here is some question text.
Answer: False, because of theorem 2.6.
Here is some question text.
Answer: 6^2, because you have 6 choices for each entry in a list of length 2.
\end{lstlisting}
\end{document}