更新: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
。