我有以下示例,在纸张顶部画一条垂直线:
\def\makeheadline{
\setbox0=\hbox to 0pt{\hskip-1in\hskip15cm \vrule depth 3cm \hss}
\ht0=0pt \dp0=0pt
\vbox to 0pt{\vskip-1in \box0 \vss}
% orignal \makeheadline follows
\vbox to 0pt{\vskip-22.5pt
\line{\vbox to 8.5pt{}\the\headline}\vss}\nointerlineskip}
Hello World!
\bye
现在我想添加一条水平线。我尝试了以下方法:
\def\makeheadline{
\setbox0=\hbox to 0pt{\hskip-1in\hskip15cm \vrule depth 3cm \hss}
\ht0=0pt \dp0=0pt
\setbox0=\hbox to 0pt{\hskip-1in \hrule width 15cm \hss}
\ht0=0pt \dp0=0pt
\vbox to 0pt{\vskip-1in \box0 \vss}
% orignal \makeheadline follows
\vbox to 0pt{\vskip-22.5pt
\line{\vbox to 8.5pt{}\the\headline}\vss}\nointerlineskip}
Hello World!
\bye
但这会引发错误:
! You can't use `\hrule' here except with leaders.
有人能解释一下 hrule 出了什么问题吗?
答案1
原始\hrule
是垂直命令;当 TeX 遇到它时,它会切换到垂直模式,\par
如果它处于(不受限制的)水平模式,则会发射。
正因为如此,它无法出现在里面\hbox
。
与此相反的,\vrule
是水平命令,因此如果在垂直模式下发现,它会触发开始一个段落。
就你的情况来说\vrule height 0.4pt width 15cm
就可以。