如何为 minipage 定义一个空参数

如何为 minipage 定义一个空参数

minipage支持可选参数的空值:

\begin{minipage}[c][][c]{1cm} test \end{minipage}

或者

\begin{minipage}[c][\relax][c]{1cm} test \end{minipage}

但如果空值是通过宏传递的,则不会:

\def\param{}
\begin{minipage}[c][\param][c]{1cm} test \end{minipage}

或者

\def\param{\relax}
\begin{minipage}[c][\param][c]{1cm} test \end{minipage}

我如何正确定义宏,以便 minipage 取空值?

答案1

的内部代码minipage在处理时使用可选参数\endminipage。在某个时刻,\@iiiparbox被调用,它执行\ifx\relax#2,其中#2是第二个可选参数(或者\relax如果可选参数为空)。由于没有执行任何扩展\ifx,您的代码比较

\ifx\relax\param

返回 false,因为\param是一个扩展为的宏\relax,不同于\relax(假设您给出了)\def\param{\relax};或者它扩展为无,这又不同于在给出时参数被吸收时为空\def\param{}

顺便说一句,\def\param\relax这是不正确的语法;在第二个示例中的两行中,您\param使用参数文本进行定义\relax\begin,并将其扩展为minipage。但\def\param{\relax}正如所解释的那样,预期的结果(我在答案中假设)将不起作用。

相关内容