我有一份文件,它的序言是这样说的:
\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 包中收到错误。
我试图避免在文档的许多地方重复硬编码通用选项。有没有好的方法可以做到这一点?我是否误解了geometry
或keyval
?
我的问题似乎与这个问题类似:更改侧边距时,如何防止 \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}