使用 \@texttop 和 \@textbottom 进行垂直定位

使用 \@texttop 和 \@textbottom 进行垂直定位

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有点奇怪,不是吗?

相关内容