我正在尝试在代码列表中写入数学运算,如下所示:
\documentclass{article}
\usepackage{listings}
\begin{document}
\begin[mathescape]{lstlisting}
$\infty$
\end{lstlisting}
\end{document}
我收到以下错误:
! Display math should end with $$.
<to be read again>
\infty
l.10 $\infty
$
?
答案1
listings
这是一个不这样做的论点\begin
%%%%%%%%%%%%
\begin{lstlisting}[mathescape]
$\infty$
\end{lstlisting}
出现该错误的原因是 TeX 允许你省略强制参数周围的括号,如果这样,则采用第一个标记。所以
\begin[mathescape]{lstlisting}$\infty$
是
\begin{[}mathescape]{lstlisting}$\infty$
现在\begin
基本上是\begingroup\csname[\endcsname
这样的
\begingroup\[mathescape]{lstlisting}$\infty$
因此\[
开始显示数学并mathescape]{lstlisting}
在显示数学模式下排版为字符,然后$
满足单数但 TeX 想要双数$$
来结束显示数学因此发出原始错误。
基本上,宏处理语言中的错误检测通常更多是靠运气而不是设计。