很不幸,@Konrad的方法完全绕过了listings
格式。如果高亮文本包含任何程序关键字,则这些关键字将不会像在非高亮行上那样由listings
包突出显示。理想情况下应该使用\highlight{\lstinline{...}}
,但是似乎你不能在listings
环境中嵌套\lstinline
宏。
TeX StackExchange网站有一个基本相同的问题,其中有一个基于tikz包的好答案和一个进一步的改进。它可以在保持listings
自动格式化高亮文本的同时覆盖高亮显示。
整个基于tikz
的方法发展成了自己的生命,最终导致了一个好的、健壮的解决方案。目前这是我所知道的在保持自动语法高亮的情况下突出显示选定的listings
行的最佳方法。它实际上同样适用于在给定页面上任何一对位置之间描绘高亮。
您可以在 listings
区域内启用任意的 LaTeX 命令:
\begin{listings}[escapeinside=\{\}]
{\highlight{Colonnes[3] = 9}}
\end{listings}
\highlight
是你自己编写的高亮宏(macro)。请参阅列表文档中的第4.14节(“逃逸到LaTeX”)以获取更多详细信息。请注意,现在您需要转义代码中特殊字符的每个其他出现-因此对于C ++代码,{}
可能是一个不好的选择。
在C或C++代码中,我认为字符`可以自由地作为转义字符。
lstset {
...
escapeinside=\`\`,
...
}
\begin{lstlisting}
const_cast<T>(`\it{exception}`)
\end{lstlisting}
单词exception
变成了exception。顺便提一下,字符`是Markdown格式中的代码字符,所以在C或C++的代码列表中很容易使用它。
escapeinside
使其工作(不知道为什么,出现了我不理解的错误),但是使用escapechar=\%
使其工作。记录一下,我这样定义\highlight
宏:\newcommand\highlight[1]{\colorbox{yellow}{#1}}使用xcolor
包。 - Jérôme