Я пытаюсь записать математику в листинге кода, вот так:
\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 хочет, чтобы двойная цифра $$
завершила отображение математики, поэтому выдает примитивную ошибку.
По сути, обнаружение ошибок в языке обработки макросов — это скорее удача, чем задумка.