添加在 lstinputlisting 中被忽略的特殊关键字

添加在 lstinputlisting 中被忽略的特殊关键字

我想知道如何添加特殊关键字被忽略在包\lstinputlisting中使用listings

屏幕截图显示了我的问题。我正在编写ROOT数据分析框架的教程文档(https://root.cern.ch) 有自己的 C++ 解释器,其用户提示符root [n]如下所示。

在此处输入图片描述

在大多数情况下,使用lstlisting环境和c++选项对于 ROOT 解释器来说工作正常。但是当root (cont'ed, cancel with .@)在解释器上打印时,此消息中的单引号被视为 C 字符串的开头,因此代码的颜色变为绿色。

\begin{lstlisting}[language=c++,breaklines=true]
root [0] TH2D* h2 = new TH2D("h2", "2D Gaussian Distribution;#it{x};#it{y};Entries", 100, -10, 10, 100, -10, 10)
(TH2D *) 0x7fe8c3615eb0
root [1] const Double_t kSigma = 2.
(const Double_t) 2.00000
root [2] for(Int_t i = 0; i < 100000; i++){
root (cont'ed, cancel with .@) [3] Double_t x = gRandom->Gaus(0, kSigma);
root (cont'ed, cancel with .@) [4] Double_t y = gRandom->Gaus(0, kSigma);
root (cont'ed, cancel with .@) [5] h2->Fill(x, y);
root (cont'ed, cancel with .@) [6] }
root [7] TCanvas* can = new TCanvas("can", "can", 600, 600)
(TCanvas *) 0x7fe8c359a9a0
root [8] h2->Draw("colz")
\end{lstlisting}

我想知道如何命令listings包忽略这个单引号。有没有办法将字符串添加cont'ed到“忽略”列表之类的东西中?

答案1

我已经找到了一个使用的尝试性解决方案mathescape,但仍在寻找更好的解决方案。

\newcommand{\conted}{\texttt{cont'ed}} % for ROOT 6 prompt

\begin{lstlisting}[language=c++,breaklines=true,mathescape]
root [0] TH2D* h2 = new TH2D("h2", "2D Gaussian Distribution;#it{x};#it{y};Entries", 100, -10, 10, 100, -10, 10)
(TH2D *) 0x7fe8c3615eb0
root [1] const Double_t kSigma = 2.
(const Double_t) 2.00000
root [2] for(Int_t i = 0; i < 100000; i++){
root ($\conted$, cancel with .@) [3] Double_t x = gRandom->Gaus(0, kSigma);
root ($\conted$, cancel with .@) [4] Double_t y = gRandom->Gaus(0, kSigma);
root ($\conted$, cancel with .@) [5] h2->Fill(x, y);
root ($\conted$, cancel with .@) [6] }
root [7] TCanvas* can = new TCanvas("can", "can", 600, 600)
(TCanvas *) 0x7fe8c359a9a0
root [8] h2->Draw("colz")
\end{lstlisting}

相关内容