我正在寻找创建一个调整页面布局的命令,这是一个示例:
\newcommand{\margin}{
\pdfpageheight 297mm
\pdfpagewidth 210mm
\pagebreak
\newgeometry{lmargin=31.5mm, rmargin=31.5mm, includemp, marginparsep=5mm, marginparwidth=52mm}
\setlength{\headwidth}{147mm}}
它基本上只是调整边距,使右侧有 52 毫米的边距,然后我还有其他布局,我都用不同的命令调用它们,例如\margin
,,,这就给我带来了我的问题。\nomargin
\marginlandscape
理想情况下,我只想使用一个命令,例如
\mypagestyle{margin}
\mypagestyle{nomarginlandscape}
但我不知道如何创建这样的命令,我尝试过自己做,也找遍了所有地方,但找不到答案。那么,我该如何编写一个newcommand
可以给我所需结果的代码呢?
答案1
您可以使用与之前相同的机制\pagestyle
(使用其原始的更简单的定义,这里不进行错误检查)
\def\mypagestyle#1{\csname myps#1\endcsname}
然后只需定义\mypsmargin
\mypsnomarginlandscape
做任何你想做的事情,然后你就可以使用语法
\mypagestyle{nomarginlandscape}
调用内部命令\mypsnomarginlandscape
答案2
这可能有点过头了,但我通常使用包裹xstring
对于这类事情:
进一步增强:
- 这仅测试,
margin
但可以轻松扩展以支持多个值。如果只有两种情况,则只需添加和另一个\IfStrEq
,但对于两个以上的选项,我建议使用IfStrEqCase
例如 检查宏是否扩展为两个给定字符串之一。
代码:
\documentclass{article}
\usepackage{geometry}
\usepackage{xstring}
\newcommand{\mypagestyle}[1]{%
\IfStrEq{#1}{margin}{%
Setting "#1": % Adjust settings here
\newgeometry{lmargin=31.5mm, rmargin=31.5mm, includemp, marginparsep=5mm, marginparwidth=52mm}
}{%
Setting "#1": % Adjust settings here
\newgeometry{lmargin=31.5mm, rmargin=31.5mm, includemp, marginparsep=5mm, marginparwidth=52mm} }%
}%
\begin{document}
\mypagestyle{margin}
\mypagestyle{nomarginlandscape}
\end{document}