使用列表来为下一个单词着色

使用列表来为下一个单词着色

我正在使用列表来突出显示一些关键字。我遇到的问题是,我希望关键字的格式和关键字后面的单词的格式不同。关键字始终相同,但后面的单词可能不同。

这是我在 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} 

相关内容