LaTeX 内核中定义了两个宏,分别为\@texttop
和\@textbottom
。第一个命令有点神秘,因为在源代码中它被设置为\relax
。请注意:
\@texttop
:在包含页面文本(包括图片)的 vbox 顶部执行的命令。由字母样式使用;也可用于生成居中页面。
在字母类别中它被设置为较小的值:
The document class letter sets |\@texttop| to |\vskip| 0pt \texttt{plus} .00006fil
% on the first page of a letter, which
% centers a short letter on the page. This fil value may have to be
% changed for other letterheads. This setting has to be done after
% |\raggedbottom| is executed, since the latter sets |\@texttop| to
% |\relax|.
根据我对阅读的理解source2e
,这些是插入最终输出框顶部和底部胶水的理想钩子。例如,在一本诗集或一本相册中,我们可能希望所有页面都垂直居中。我定义了一个简短的宏,如下所示,\nobottom
以补充命令\raggedbottom
和\flushbottom
。
\documentclass{article}
\usepackage{lipsum}
\usepackage{graphicx,alltt}
\makeatletter
\def\nobottom{%
\def\@texttop{\ifnum\c@page>0\vskip \z@ plus 3fil\relax\fi}
\def\@textbottom{\ifnum\c@page>0\vskip \z@ plus 2fil\relax\fi}}
\nobottom
\begin{document}
\pagestyle{headings}
\lipsum[1]
\clearpage
\lipsum[1-2]
\clearpage
\begin{alltt}
This can be a poem
to see how it will
print
\end{alltt}
\end{document}
我对这些命令的理解是否正确?还有其他方法可以自动垂直定位所有页面或某些页面吗?正如您所看到的,在 LaTeX 插入这些命令时,使用页面计数器是安全的,因此例如可以自动居中所有包含一些前言材料的页面(或者可以用布尔值标记这些页面以影响这种胶水插入)。您能提供此类命令的其他可能性和示例吗?
图像的示例(我认为比我们最近针对同一主题的帖子更容易实现,即左边是标题,右边是图像)。
答案1
您的解读是正确的。这两个命令已经是初始 LaTeX 2.09 输出例程的一部分(ltoutput.dtx 中的文档清楚地显示了年代 --- 如果打字机中的某些内容看起来像这样,那么这就是 Leslie 的原创):
% \@textbottom : Command executed at bottom of vbox holding text of
% page (including figures). The \raggedbottom
% command almost \let's this to \vfil (actually sets
% it to \vskip \z@ plus.0001fil).
% Should have depth 0pt.
%
% \@texttop : Command executed at top of vbox holding text of
% page (including figures). Used by letter style;
% can also be used to produce centered pages.
% Let to \relax by \raggedbottom and \flushbottom.
%
事实上,它们提供了我能想到的唯一方法(除了重新定义内部结构)来自动将页面材料置于中心(或者像您那样将其定位在 2/3 处)。
但这个名字\nobottom
有点奇怪,不是吗?