在下面的代码中,我为 编写了两个宏\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}
enumitem
PS 在制作我的 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}