在我的序言中,我已经:
\documentclass[a5paper,10pt,oneside,onecolumn,openany]{memoir}
我想稍后根据页面大小的值定义一些布局选项,在本例中为a5paper
。我看了一下鍵盤,并发现它之前不能被调用\documentclass
,而keyreader 可能是但也许事实上我在调用时有效地设置了一个stock size
或值,我可以将其用作后续条件操作的触发器。page size
memoir
或者我应该尝试定义一个键后打电话给回忆录,然后后来使用几何包相应地设置页面大小(和其他东西)?
答案1
您可以(参见daleif 的评论) 使用调用的 LaTeX 内核宏\@ifclasswith
来测试选项是否已a5paper
传递给memoir
,并相应地执行不同的操作。这种方法的一个潜在缺点是\@ifclasswith
只允许在前言中使用,而不允许在文档正文中使用。
\documentclass[a5paper,10pt,oneside,onecolumn,openany]{memoir}
\usepackage{lipsum} % for filler text
\makeatletter
\@ifclasswith{memoir}{a5paper}
{%
% If the a5paper option was passed to memoir...
% do something interesting; for instance:
\AtBeginDocument{The pagesize is \texttt{a5paper}.\par}
}{%
% Otherwise...
% do something else.
}
\makeatother
\begin{document}
\lipsum[1]
\end{document}
替代解决方案
根据memoir
源代码,传递a5paper
类选项只会触发
\newcommand*{\stockav}{\stockheight=210mm \stockwidth=148mm}
\stockheight
因此,如果需要替代方法,您可以对和的值进行测试\stockwidth
。
\documentclass[a5paper,10pt,oneside,onecolumn,openany]{memoir}
\usepackage{lipsum} % for filler text
\begin{document}
% test for a5paper
\ifdim\stockheight=210mm\relax
\ifdim\stockwidth=148mm\relax
% Put here what should only be applied only if the page size corresponds to A5 paper.
% For instance...
The pagesize is \texttt{a5paper}.\par
\fi
\fi
\lipsum[1] % for filler text
\end{document}
答案2
在我看来,您实际上想要做的是编写自己的文档类。因此,将当前标题中应属于该类的部分放入其中,MyClass.cls
并使其看起来像这样:
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{MyClass}
\DeclareOption∗{\PassOptionsToClass\CurrentOption}{memoir}%
}
\LoadClass{memoir}
\DeclareOption{a5paper}{% do stuff
}
\DeclareOption{a4paper}{% do other stuff
}
\ProcessOptions\relax
% rest of your header goes here
然后你的实际文档就以
\documentclass{MyClass}