确定您所在的行的高度

确定您所在的行的高度

PDFLaTeX 中是否有方法可以确定您所在行的高度?也许类似于 PDFsavepos。

在正常线(即无航向等)中,您可以用固定倍数近似高度。但有没有更好的方法?

答案1

简短的回答:不。

正如评论中指出的较长的答案,当前目标基线间距\baselineskip可能是您正在寻找的,但如果您的意思是您能否确定当前行的高度(可能有较大的内联表或数学表达式),那么它会变得更加困难。

在 TeX 将段落分成行并且问题有任何可能的答案之前,在设置宏作为整个段落进行扩展(并且所有宏都扩展)时,没有办法有一个宏提供此信息。

如果您在垂直框中而不是在主垂直列表中,您可以用 标记您感兴趣的点\vadjust{\penalty some special value less than -10000},然后\vsplit在该点处标记框,然后用 查找\lastbox以获取强制中断之前的最后一个行框,然后查看该框的高度即可得到答案。如果文本在主垂直列表中,则要困难得多(您需要一个特殊的输出例程来拆分和重新组装页面。

您可以使用它\pdfsaveposition在下一次乳胶运行中访问当前点的垂直位置,但是您不能轻松地在每一行上插入它,因此不清楚您是否可以使用它来确定该点处行的高度。


以下纯 TeX 文件标记了两条线(用!)并报告它们的高度为:

marked line 1: height: 6.94444pt, depth 1.94444pt
marked line 2: height: 12.38954pt, depth 6.14844pt

在此处输入图片描述

\tracingonline2
\showboxbreadth=\maxdimen

\newcount\linecount
\hsize=3in
\def\a{One two three four five six seven eight nine ten. }

\def\thislineinfo{\global\advance\linecount1 !\vadjust{\break}}

\setbox0=\vbox{\global\linecount=0
\a\a\thislineinfo\a\thislineinfo $A^{^A}A\over B_{B_B}$ \a\a\a

}
\setbox2=\copy0

{\vbadness\maxdimen\count0=1
\immediate\write20{}
\loop
\setbox4=\vsplit2 to \maxdimen
\setbox4=\vbox{\unvbox4\setbox0\lastbox
\immediate\write20{marked line \the\count0: height: \the\ht0, depth \the\dp0}}
\ifnum\count0<\linecount
\advance\count0 1
\repeat
\immediate\write20{}
}


\box0

\bye

相关内容