在 \newgeometry 中将变量作为参数传递

在 \newgeometry 中将变量作为参数传递

我已定义以下变量来存储我的边距设置:

\def \geometryTitlepage {
    left=25mm,
    right=25mm,
    top=25mm,
    bottom=25mm
}

然后在标题页中我想设置\newgeometry

\begin{titlepage}
    \newgeometry{
        \geometryTitlepage
    }
    \begin{center}
        *
        *
        *
    \end{center}
    \restoregeometry
\end{titlepage}

但编译器会抛出一个错误:

!Package keyval Error: left=25mm, right=25mm, top=25mm, bottom=25mm undefined. 

当我手动输入值时,一切都正常。但是当我使用变量时,它似乎undefined在字符串末尾添加。我做错了什么?

答案1

键值默认不扩展,因此将多个键组合成一个命令需要扩展第一的单独的密钥才能被解释。有多种方法可以实现这一点:

  • \expandafter\geometry\expandafter{\geometryTitlepage}

  • \edef\x{\noexpand\geometry{\geometryTitlepage}}\x

后一种选项应在组内使用,以防止\x(或无论您选择什么)“泄漏”到其他地方(尽管并不重要)。由于您在环境内使用它,因此已经是这种情况titlepage,从而限制了其范围。出于这个原因,有些人也在这种情况下使用它

  • \begingroup\edef\x{\endgroup\noexpand\geometry{\geometryTitlepage}}\x

\x使用后就会“毁坏” 。

相关内容