更改 \newgeometry 中的某些选项,同时保留所有其他选项的默认值

更改 \newgeometry 中的某些选项,同时保留所有其他选项的默认值

我有一份文件,它的序言是这样说的:

\RequirePackage[a=3,b=7]{geometry}

在文档的后面,我想暂时更改一个参数,即在伪代码中:

\newgeometry{keep all other options the same,b=8}

如果我正确理解了我在实践中看到的行为,如果我只是这样做\newgeometry{b=8},那么 a 也将更改为其默认值,而不是保留为 3。一旦我看到包似乎以这种方式运行,我认为解决方案将是这样的:

\newcommand{\genericgeometryoptions}{a=3}
\RequirePackage[\genericgeometryoptions,b=7]{geometry}
...
\newgeometry{\genericgeometryoptions,b=8}

但这似乎不起作用。当我执行 newgeometry 宏时(不是在我最初调用包时),我从 keyval 包中收到错误。

我试图避免在文档的许多地方重复硬编码通用选项。有没有好的方法可以做到这一点?我是否误解了geometrykeyval

我的问题似乎与这个问题类似:更改侧边距时,如何防止 \newgeometry 影响底边距?但是,那里接受的答案只是展示了一个例子,其中每个不变的通用参数在同一个文档中被硬编码两次。我正在寻找一种避免这样做的解决方案。

谢谢!

答案1

这实现了我评论的想法:选择直接提供给包的选项,并添加到该列表中。警告:有些选项只能在序言中使用(例如更改纸张大小),这些选项可能会导致警告。

\documentclass[]{article}

\usepackage[margin=5cm,a4paper]{geometry}

\newcommand\addtogeometry[1]
  {%
    \expandafter\expandafter\expandafter
    \newgeometry
    \expandafter\expandafter\expandafter
    {\csname [email protected]\endcsname,#1}%
  }

\usepackage{duckuments}

\begin{document}
\blindduck

\clearpage
\addtogeometry{left=8cm}
\blindduck
\clearpage
\restoregeometry
\end{document}

相关内容