将 \newenvironment 参数传递给结束块?

将 \newenvironment 参数传递给结束块?

我正在尝试构建一个新环境,该环境将允许我使用新环境格式化任意列表类型(逐项列举、枚举、描述等)。因此,我将其作为参数传递给新环境,但当我尝试执行以下操作时,它会发出抱怨:

\newenvironment{mylist}[1]
{
\begin{#1}
#Environment definition here
}
{\end{#1}}

我收到以下错误:

! \endmylist 定义中的参数数量非法。1 l.15 {\end{#1}}

我怎样才能将参数传递到结束块?

答案1

一种可能性是使用xparse包:

\usepackage{xparse}
\NewDocumentEnvironment{mylist}{m}{%
  \begin{#1}%
  % other code
}{%
  \end{#1}%
}

答案2

environ包裹是实现此目的的另一种方法,因为它像宏一样协商环境内容(称为\BODY),并允许您根据需要在其周围放置参数。以下是一个例子:

在此处输入图片描述

\documentclass{article}

\usepackage{environ,lipsum}

\NewEnviron{myenv}[1]{%
  \textbullet~Some code #1 \textbullet\par% Use argument before \BODY ~ \begin{myenv}
  \BODY \par
  \textbullet~Some code #1 \textbullet% Use argument after \BODY ~ \end{myenv}
}

\begin{document}

\lipsum[1][1]

\begin{myenv}{argument}
  \lipsum[1][2-5]
\end{myenv}

\lipsum[1][6]

\end{document}

相关内容