我试图理解页面大小是如何根据 TeX 基元确定的。作为第一次尝试,我试图用一个简单的页眉(一行)、一个页脚(大 T 的形式)和集中的文本内容完全占据整个页面。但我没有完成这个任务(“你输了!”)。请查看我的代码。
% initial configuration
\voffset=-1in
\hoffset=-1in
\hsize=10em
\vsize=10em
% defining layout page (at least, trying it)
\output{%
\shipout\vbox{% this layout was uncaple to eliminate all margins! Bottom and right margins persist
\leftskip=0pt
\rightskip=0pt
\hrule height 0pt depth 7pt
\vfill
\box255
\vfil
\hrule height 7pt depth 0pt
\hbox to \hsize{\hfil\vrule height 70pt \hfil}}}
% hyphining at will (or almost this)
\pretolerance=45
\tolerance=10000
% local defintions
\def\correction#1{%
\ifcase#1
\moveright
\or \moveright-
\or \moveleft
\or \moveleft-
\or \kern % this generates a disaster! It's reasonable, but I haven't got it
\or \kern-
\else
\def\eliminatehsize##1{}
\expandafter\eliminatehsize\fi}
\def\arg{4} % in this cases, leads to \kern
% finally, text content of page
\vfil
\noindent Umas verdades quar seram tambem \vadjust{\correction\arg\hsize\vbox to 0pt{\hbox to 0pt {\vbox{\hsize=7em\noindent Mulambo Silvestre}}}} semper que tardia nostrum vitae moscaribatus.
\vfil
\penalty-10000
\end
乍一看可能有点丑,但其实很简单。所以...问题是:
1)为什么输出中有右边距和下边距?(我正在使用 bTeX 3.14159265(TeX Live 2019/dev/Debian)并使用 evince 显示 dvi 文件)
2)为什么box255没有集中?
3)为什么当 \arg 值为 4(使用 kern 作为 \correction)时会出现奇怪的输出(创建新页面!!!)。我希望它只丢失了部分内容,与 \arg = 5 或 \arg = 1 的情况相同。
提前致谢。
答案1
ad 1) 使用 dvi 输出时,没有控制页面大小的 TeX 基元。页面大小由 pdf 查看器的配置或使用模糊的 \special 来设置。Dvi 是旧格式,不包含有关页面大小的信息。
ad 2) box255 未垂直居中,因为其中只有一行,并且 \vsize 设置为 10em。然后\setbox255=\vbox to10em{single line}
内部处理平滑,box255 的高度为 10em,单行位于顶部(带有underfull \vbox
,但未附加有关它的消息)。
广告 3) \vadjust 插入垂直材料:\kern\hsize
后跟\vbox
。这比给出的要多得多\vsize
,因此第一行(没有\vadjust
)被处理为第一页(有underfull \vbox
),第二行(有大\vadjust
)被处理为第二页(有overfull \vbox
)。
我不知道你的意图是什么,但我知道事情可以做得更简单。