如何在引用文本中使用 lstlisting“moredelim”

如何在引用文本中使用 lstlisting“moredelim”

更新:Arun 的回答(如下)对我有用,因为我反正不用语法高亮。谢谢!

这是我原来的问题:

我使用以下设置,通过在加粗部分的开始和结束处放置三个星号,可以在 lstlisting 环境中将文本标记为粗体:

 \lstset{moredelim=[is][\bfseries]{***}{***}}

在大多数情况下,此方法有效,但当我尝试在引用的文本中使用它时会失败。例如,以下内容有效:

 \begin{lstlisting}
 this is a ***test***!
 \end{lstlisting}

但以下却不行:

 \begin{lstlisting}
 "this is a ***test***!"
 \end{lstlisting}

第二种形式只是打印文字星号。有没有办法关闭引号内 lstlisting 的特殊行为?

布莱恩

编辑:我在下面添加了一个完整的最小示例。

\documentclass{article}

\usepackage{listings}
\lstset{ % Set options for ``listing'':
language=C++,
commentstyle=,
keywordstyle=,
identifierstyle=,
basicstyle=\ttfamily,
breaklines=false,
frame=,
showstringspaces=false
}
\lstset{moredelim=[is][\bfseries]{***}{***}}

\begin{document}

This works:

 \begin{lstlisting}
 this is a ***test***!
 \end{lstlisting}

This doesn't:

 \begin{lstlisting}
 "this is a ***test***!"
 \end{lstlisting}

\end{document}

答案1

一种可能的解决方案是添加morestring=*[b]"到您的\lstset。这重新声明了"..."字符串语法,但星号表示listings仍在这些字符串内应用其格式。

这是我的代码;因为 LaTeX默认情况下没有粗体打字机字体,我改用斜体。

\documentclass{article}
\usepackage{listings}
\lstset{ % Set options for ``listing'':
    language=C++,
    % ... same options ... 
    showstringspaces=false,
    morestring=*[b]"
}
\lstset{moredelim=[is][\itshape]{***}{***}}
\begin{document}
\begin{lstlisting}
this is a ***test***!
\end{lstlisting}
With quotes:
\begin{lstlisting}
"this is a ***test***!"
\end{lstlisting}
\end{document}

在此处输入图片描述

然而,有一个警告:这种重新定义意味着listings适用全部格式化字符串内部,而不仅仅是新的分隔符。例如,this是 C++ 关键字,因此如果您使用\lstset{keywordstyle=\color{blue}},则this引号内的也是彩色的:

在此处输入图片描述

这可能不是期望的行为。如果是这样,您可能必须使用 以外的其他内容moredelim,例如escapeinside

相关内容