如何在不改变行高的情况下将下表中的文本移动到更接近上规则(或更接近下规则):
{\halign
{#\cr
\hrulefill\cr
\font\f=cmr8\f(bla bla bla)\cr
\hrulefill\cr}}
我正在寻找一个使用纯 TeX 的解决方案。
更新(我想要实现的目标)
我想将几个单词放在页面文本区域的右侧、行基线下方,字体很小(7-8pt 就可以)。为了实现这一点,我设置了一个两列的表格,每列占据文本区域的一半,减小字体大小,并将文本放在行的右半部分居中。(我使用表格是因为这个表格的上下还有其他文本,它们应该从行的中间开始。另外,有些文本应该从某些行的开头开始,但这些文本都不需要超出页面的中间。使用表格可以轻松实现所有这些。)接下来,我认为基线正下方的区域可能不足以容纳 7-8pt 字母,所以我决定将小文本放在下一行的上部,最好不要改变这一行的高度。我试过了,\vskip
但我无法让它做我想做的事。
我还没有检查所有的建议,但它\raise
似乎不是我想要的,因为它改变了行高。
更新2(详细信息和草图)
下图中的灰线标记单元格边框;它们仅作为文档布局的提示显示,不应存在于最终文档中。黑色水平线表示填空,应存在于最终文档的基线处(实际上,我将决定是否希望它们位于基线处或略低于基线,但现在我们假设它们位于基线处)。括号中的文本表示要在其上方的空白处填写的内容。
我想要实现的是将每个括号内的文字放置在相应的填空下方,并根据空白的长度居中。
PS 对于那些好奇的人来说,“дата”的意思是日期,“гр.”代表城市,“декларатор”表示申报人,“подпис”表示签名,“име и фамилия”表示名字和姓氏。
答案1
问题中提到的草图可以通过以下代码打印(例如)。不需要\halign
。
\def\l#1#2{\line{\hbox to.5\hsize{#1\hfil}\hbox to.5\hsize{#2\hfil}}}
\def\ul{\leaders\vrule height-1pt depth1.4pt \hfill}
\def\ra#1{\raise8pt\hbox{\sevenrm#1}}
\baselineskip=18pt
\l {Data: \ul \qquad} {}
\l {gr. \ul \qquad} {Deklarator:}
\l {} {}
\l {} {\ul}
\l {} {\hfil\ra{(podpis)}}
\l {} {/\ul /}
\l {} {\hfil\ra{(ime i familija)}}
\end
抱歉,我没有使用西里尔字母。我希望您能够使用适当的编码/TeXengine/字体来获取这些特殊字母。
答案2
{\halign
{#\cr
\hrulefill\cr
\font\f=cmr8\f(bla bla bla)\cr
\hrulefill\cr}}
\bigskip
{\halign
{#\cr
\noalign{\hrule}
\font\f=cmr8\f(bla bla bla)\cr
\noalign{\hrule}}}
\bye
您可以\vskip
在\noalign
每条规则之前或之后插入以添加所需的空间。
答案3
不要在表格单元格中定义字体。在文档开头定义您需要的字体。
这里有三个命令尝试模拟 LaTeX 包中的命令booktabs
。
\def\toprule{\noalign{\hrule height 0.8pt\kern1pt}}
\def\midrule{\noalign{\kern1pt\hrule\kern1pt}}
\def\bottomrule{\noalign{\kern1pt\hrule height 0.8pt}}
\def\computestrut#1{%
\dimen0=#1\relax
\setbox\strutbox=\hbox{\vrule height .7\dimen0 depth .3\dimen0 width 0pt}%
}
\font\smallrm=cmr8
\leavevmode\vbox{
\offinterlineskip
\computestrut{10pt}\smallrm
\halign{\strut#\hfil\cr
\toprule
(bla bla bla)\cr
\midrule
(bla bla bla)\cr
\bottomrule
}}
\vbox{
\offinterlineskip
\halign{\strut#\hfil\cr
\toprule
(bla bla bla)\cr
\midrule
(bla bla bla)\cr
\bottomrule
}}
\bye
使用\offinterlineskip
和\strut
可以确保单元格高度恒定(如果它们不包含高度或深度过大的材料)。您可以计算支柱(仅在本地进行),以便它与您想要使用的字体大小相匹配。
答案4
Plain TeX 的定义\strut
与所选字体的大小无关,因为它仅假设 10/12pt 排版:
\newbox\strutbox
\setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width0pt}
\def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi}
如果你要设置各种字体大小,那么以这样的方式重新定义纯 TeX 的定义会非常有用:
\def\strut{\lower.35em\vbox to1.2em{}}
注意:em
使用单位,取决于当前字体的大小。不需要\computestrut
宏。此重新定义对 10pt 字体给出的结果与上述相同。
这里的问题包括一个新的奇异要求:将整个支柱固定,与字体大小无关,但支柱的高度必须取决于字体大小。这可以通过
\def\strut{\raise.85em\vtop to12pt{}}
代码:
\def\strut{\raise.85em\vtop to12pt{}}
\vbox{\offinterlineskip
\halign{#\unskip\strut\hfil \cr \noalign{\hrule}
here is 10pt text \cr \noalign{\hrule}
\sevenrm here is 7pt text \cr \noalign{\hrule}
\fiverm here is 5pt text \cr \noalign{\hrule}
}}
\end
生成以下结果: