如何在可选参数列表中扩展宏
\newcommand{\sss}{%
label={$\bullet$},topsep=0mm, parsep=0mm,% leftmargin=3mm,rightmargin=0cm,labelwidth=5mm,labelsep=3mm%
}
\begin{itemize}[\sss]
\item gugus
\end{itemize}
这不起作用(没有给出任何好的调试信息)。那么扩展是错误的吗?
我怎样才能解决这个问题?
答案1
keyval 解析器通常不会扩展参数(否则诸如此类的事情会因为扩展过早font=\small
而严重崩溃。\small
所以最简单的方法是使用
\newenvironment{sss}{%
\begin{itemize}[label={$\bullet$},topsep=0mm, parsep=0mm,% leftmargin=3mm,rightmargin=0cm,labelwidth=5mm,labelsep=3mm%
]}
{\end{itemize}}
\begin{sss}
\item gugus
\end{sss}
答案2
通常,键值解析器需要直接查看语法字符=
和,
。因此,宏\sss
应该展开一次。这可以通过大量的来完成\expandafter
:
\expandafter\begin\expandafter{\expandafter i\expandafter t ...\expandafter}\expandafter[\sss]
或者整个表达式可以扩展为宏:
\edef\next{%
\noexpand\begin{itemize}[\unexpanded\expandafter{\sss}]%
}\next
这里,阻止了一次扩展之后\unexpanded
的进一步扩展,以防止值扩展过早。\sss