将命令作为环境参数传递

将命令作为环境参数传递

我正在尝试实现两个版本的环境numberedlist

  • 如果没有争论传递给它,它应该启动环境enumerate并通过默认值作为其论点,
  • 如果一个论点(或列表)传递给它,它应该启动环境enumerate并通过默认值+传递的参数作为其参数。

我的 MWE 无法正常工作。它打印出参数而不是使用它们。

\documentclass{article}
\usepackage{ifthen}
\usepackage{enumitem}

\newenvironment{numberedlist}[1][]{%
\let\tempstring{topsep=0.3cm,noitemsep,itemindent=0.5cm,labelsep=0.5cm}%default value
\ifthenelse{\equal{#1}{}}{}{%
    \let\tempstring{\tempstring{}#1}%add further params
}%
\begin{enumerate}[\tempstring]%
}{\end{enumerate}}


\begin{document}

\begin{numberedlist}
\item item 1
\item item 2
\item item 3
\end{numberedlist}

\begin{numberedlist}[resume]
\item continue the list with 4th item!
\item item 5
\item item 6
\end {numberedlist}

\end{document}

答案1

您必须展开默认选项列表才能\begin{enumerate}看到它:

\documentclass{article}
\usepackage{enumitem}

\newcommand\numberedlistdefault{%
  topsep=0.3cm,noitemsep,itemindent=0.5cm,labelsep=0.5cm% default value
}

\newenvironment{numberedlist}[1][]
 {\expandafter\enumerate\expandafter[\numberedlistdefault,#1]}
 {\endenumerate}


\begin{document}

\begin{numberedlist}
\item item 1
\item item 2
\item item 3
\end{numberedlist}

\begin{numberedlist}[resume]
\item continue the list with 4th item!
\item item 5
\item item 6
\end {numberedlist}

\end{document}

但没有宏可能更简单:

\newenvironment{numberedlist}[1][]
 {\enumerate[
    topsep=0.3cm,
    noitemsep,
    itemindent=0.5cm,
    labelsep=0.5cm,
    #1
  ]}
 {\endenumerate}

你不需要条件,因为enumitem很乐意接受空选项。

在此处输入图片描述

相关内容