为什么最简单的 \newenvironment 不能按预期工作?

为什么最简单的 \newenvironment 不能按预期工作?
\documentclass{article}
\usepackage{listings}

\newenvironment{hello}{\begin{lstlisting}[language=sh]}{\end{lstlisting}}

\begin{document}

\begin{hello}
ls
\end{hello}

\end{document}

该代码无法通过 xelatex 编译,编译器已挂起。

根本原因是什么?

答案1

listings本质上是一个逐字环境,它关闭正常的乳胶处理,特别\end{hello}是不会结束环境。

该软件包具有定义自定义环境的功能,请参阅列表手册第 4.16 节。

\documentclass{article}
\usepackage{listings}

\lstnewenvironment{hello}{\lstset{language=sh}}{}

\begin{document}

\begin{hello}
ls
\end{hello}

\end{document}

相关内容