2010-05-05 132 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