有没有办法查询我在回忆录课程中设置的页面大小?

有没有办法查询我在回忆录课程中设置的页面大小?

在我的序言中,我已经:

\documentclass[a5paper,10pt,oneside,onecolumn,openany]{memoir}

我想稍后根据页面大小的值定义一些布局选项,在本例中为a5paper。我看了一下鍵盤,并发现它之前不能被调用\documentclass,而keyreader 可能是但也许事实上我在调用时有效地设置了一个stock size或值,我可以将其用作后续条件操作的触发器。page sizememoir

或者我应该尝试定义一个键打电话给回忆录,然后后来使用几何包相应地设置页面大小(和其他东西)?

答案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}

相关内容