2010-05-05 136 views
8

我正在使用Latex和listings包在文档内显示一些C++代码(带语法高亮显示)。latex and listings:突出显示代码的某些部分

我需要突出显示代码的某些部分。这个特定的亮点与语法高亮没有任何关系,它只是我想突出显示的代码的一部分,以便读者可以专注于它。

我希望我可以使一些变量名称,例如,在粗体显示,并在黄色背景。这里是我用MSWord做的事情,我想用Latex重现(当然,不是红色和绿色的下划线):

http://img210.imageshack.us/img210/5302/coden.png

我还没有找到一种方法来处理listings包。可能吗?

回答

6

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

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

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

+1

感谢您的提示!我无法使用'escapeinside'工作(不知道为什么,有错误我不明白),但是它使用'escapechar = \%'工作。 对于记录,我所定义的'\ highlight'宏这种方式: \ newcommand \亮点[1] {\ {颜色框黄色} {#1}}使用包 'xcolor'。 – 2010-05-05 14:53:39

10

不幸的是@Konrad's approach完全从listings完全逃脱格式化。如果突出显示的文本包含任何节目关键字,那么这些关键字将不会被listings包高亮显示,因为它们将位于非突出显示的行上。理想可能是使用\highlight{\lstinline{...}},但似乎无法在listings环境中嵌套\lstinline宏。

TeX StackExchange站点有essentially the same question,其中nice answer based on the tikz packagefurther refinement thereof。它覆盖突出显示,同时让listings自动格式突出显示的文本。

这整个tikz为基础的方法took on a life of its own,最终导致good, robust solution。这是目前最为人所知的(对我而言)突出显示选定的listings行,同时保持自动语法突出显示。它实际上也可以用于抚摸给定页面上的任意一对位置之间的高光。

3

在C或C++代码中,我认为字符`是免费的转义字符。

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

然后,你可以使用它像

\begin{lstlisting} 
const_cast<T>(`\it{exception}`) 
\end{lstlisting} 

exception然后成为例外。顺便说一句,字符`是Markdown格式 字符的代码,所以它非常容易在C或C++中使用,如代码清单。

+0

这应该得到更多upvotes。效果很好。 – meijuh 2014-06-23 14:25:16