lstinline 在用作另一个命令的参数时丢失括号

lstinline 在用作另一个命令的参数时丢失括号

我正在使用listingsJava 语言的包(与所有类似 C 的语言一样,Java 语言使用括号作为块分隔符)。我打算将其\lstinline{...}用作排版霍尔三元组的命令的第二个参数。

虽然\lstinline|while (...) { ... } |正确排版了括号,但如果\lstinline|...|将其作为参数传递给任何宏,它们将被删除。例如:

\documentclass{article}
\usepackage{listings}
\lstset{language=Java}

\newcommand{\hoare}[3]{\{ $#1$ \} #2 \{ $#3$ \} }
\newcommand{\true}{\mathbf{true}}
\newcommand{\false}{\mathbf{false}}

\begin{document}
\hoare{\true}{\lstinline|while(true) { }|}{\false}
\end{document}

我怎样才能重新戴上牙套?

答案1

您可以引用括号以使其可见:

\hoare{\true}{\lstinline|while(true) \{ \}|}{\false}

带括号的 lstinline

直接调用时,\lstinline|while(true) \{ \}|也会打印反斜杠,但不会打印在宏参数中,因为外部宏已经处理了引用的括号。

相关内容