Latex和Listings:高亮代码的某些部分

10
我正在使用Latex和“listings”包在文档中显示一些C ++代码(带有语法高亮)。
我需要突出显示代码的某些部分。这种特定的突出显示与语法高亮无关,只是我想突出显示代码的某些部分,以便读者可以关注它。
我希望能够使某些变量名称以粗体显示,并显示黄色背景。这是我在MSWord中完成的事情,我希望能够在Latex中再现它(当然,不包括红色和绿色下划线)。

.

我还没有找到使用listings包的方法。这可行吗?
3个回答

10

很不幸,@Konrad的方法完全绕过了listings格式。如果高亮文本包含任何程序关键字,则这些关键字将不会像在非高亮行上那样由listings包突出显示。理想情况下应该使用\highlight{\lstinline{...}},但是似乎你不能在listings环境中嵌套\lstinline宏。

TeX StackExchange网站有一个基本相同的问题,其中有一个基于tikz包的好答案和一个进一步的改进。它可以在保持listings自动格式化高亮文本的同时覆盖高亮显示。

整个基于tikz的方法发展成了自己的生命,最终导致了一个好的、健壮的解决方案。目前这是我所知道的在保持自动语法高亮的情况下突出显示选定的listings行的最佳方法。它实际上同样适用于在给定页面上任何一对位置之间描绘高亮。


6

您可以在 listings 区域内启用任意的 LaTeX 命令:

\begin{listings}[escapeinside=\{\}]
{\highlight{Colonnes[3] = 9}}
\end{listings}

\highlight 是你自己编写的高亮宏(macro)。请参阅列表文档中的第4.14节(“逃逸到LaTeX”)以获取更多详细信息。请注意,现在您需要转义代码中特殊字符的每个其他出现-因此对于C ++代码,{} 可能是一个不好的选择。


1
谢谢提示!我无法使用escapeinside使其工作(不知道为什么,出现了我不理解的错误),但是使用escapechar=\%使其工作。记录一下,我这样定义\highlight宏:\newcommand\highlight[1]{\colorbox{yellow}{#1}}使用xcolor包。 - Jérôme

4

在C或C++代码中,我认为字符`可以自由地作为转义字符。

lstset {
...
escapeinside=\`\`,
...
}

然后,您可以像这样使用它。
\begin{lstlisting}
const_cast<T>(`\it{exception}`)
\end{lstlisting}

单词exception变成了exception。顺便提一下,字符`是Markdown格式中的代码字符,所以在C或C++的代码列表中很容易使用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接