NewDocumentCommand 枚举宏无法与换行符一起使用,而 \newcommand 可以工作

NewDocumentCommand 枚举宏无法与换行符一起使用,而 \newcommand 可以工作

在下面的代码中,我为 编写了两个宏\begin{enumerate}...\end{enumerate}。为了获取多个可选参数,我使用了newcommand 有多个可选参数\item。但是,当我在s之间添加额外的换行符时,\NewDocumentCommand宏会失败,而原始宏\begin{enumerate}...\end{enumerate}没有问题,\newcommand宏也没有问题。

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}

% if do enumitem before enumerate, cause error????? https://tex.stackexchange.com/questions/238691/enumitem-always-throwing-errors
\usepackage{enumerate}
\usepackage[shortlabels]{enumitem}


\newcommand{\myenumerate}[2][4]{\begin{enumerate}[(a), leftmargin=0.2in,parsep=0pt,itemsep=#1pt]
#2
\end{enumerate}}

\NewDocumentCommand{\myenumeratebad}{ O{10} O{a} m }{\begin{enumerate}[(#2),leftmargin=0.3in,parsep=0pt,itemsep=#1pt,topsep=8pt]
#3
\end{enumerate}}


\begin{document}

\begin{enumerate}[(i),leftmargin=0.3in,parsep=0pt,itemsep=4pt,topsep=8pt]
\item awef

\item awef
\end{enumerate}

\myenumerate[10]{
\item awe

\item awf
}

\myenumeratebad[10][i]{
\item awe
\item awf
}

\myenumeratebad[10][i]{
\item awe
\item awf
}

\end{document}

enumitemPS 在制作我的 MWE 时,在 之前放置 时出现问题enumerate,但反过来没有问题。我只是从这里的评论中了解到这一点的Enumitem 总是抛出错误

答案1

默认情况下\newcommand会创建一个定义的宏长的,即接受段落参数,即一个空行。(A短的宏使用\newcommand*

所有\NewDocumentCommand参数默认都是短的——除非参数以 为前缀+。(是的,你可以指定长度逐一论证,第 3 页xparse手动的

所以你需要

\NewDocumentCommand{\myenumeratebad}{ O{10} O{a} +m }{%
  \begin{enumerate}[(#2),leftmargin=0.3in,parsep=0pt,itemsep=#1pt,topsep=8pt]
  #3
  \end{enumerate}}

不过,您可能只是再次定义自己的环境:

\NewDocumentEnvironment{myenumerateenv}{O{10} O{a}}{%
  \begin{enumerate}[(#2),leftmargin=0.3in,parsep=0pt,itemsep=#1pt,topsep=8pt]}
  {\end{enumerate}}

您可以使用或不使用空行。

\begin{myenumerateenv}[10][i]
\item awe

\item awf
\end{myenumerateenv}

相关内容