为什么当我尝试在用户定义的环境中使用“begin{lstlisting}”时 pdfLaTeX 会失败?

为什么当我尝试在用户定义的环境中使用“begin{lstlisting}”时 pdfLaTeX 会失败?

我在使用该软件包时遇到了麻烦listings。我无法通过编译以下最小示例pdfLaTeX

\documentclass[a4paper, 11pt, twoside, openright, english]{memoir}

\usepackage{listings}

\newenvironment{haskellCode}
{%
  \begin{lstlisting}%
}
{%
  \end{lstlisting}%
}

\begin{document}
\begin{haskellCode}
  test
\end{haskellCode}
\end{document}

编译过程就停止了,并要求我输入:

* <The hell? I'll just try pressing ENTER then...>
(Please type a command or say `\end')
*

但是如果我将代码haskellCode直接移入文档(即lstlisting直接使用),它可以很好地编译。

知道发生了什么事以及如何解决吗?

答案1

lstlisting环境在很多方面与环境相似verbatim,并且 TeX 必须明确“看到”\end{lstlisting}才能知道它已完成。

解决方案是使用\lstnewenvironment

\lstnewenvironment{haskellCode}{}{}

就是您所需要的;当然,您可以向“开始”和“结束”部分添加许多自定义内容。

相关内容