表格单元格内的文本垂直对齐

表格单元格内的文本垂直对齐

如何在不改变行高的情况下将下表中的文本移动到更接近上规则(或更接近下规则):

{\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

生成以下结果:

支撑

相关内容