如何获取lrbox的高度

如何获取lrbox的高度

我需要知道 lrbox 的高度,然后才能在代码中使用。出于某种原因,我的代码给出了奇怪的不正确的值。

\documentclass{article}
\usepackage[utf8]{inputenc}

\begin{document}

\newsavebox{\jhbin}
\begin{lrbox}{\jhbin}
  \par\begin{tabular}{c}
    Jim Hef{}feron\\
    Many lines is\\ comming.
  \end{tabular}
\end{lrbox}    

\newlength{\heightofhw}
\settoheight{\heightofhw}{\hbox{\jhbin}}
Wrong Height = \the\heightofhw  

\usebox{\jhbin}

\end{document}

有什么想法可以做到正确吗?

在此处输入图片描述

答案1

里面\par什么lrbox也不做。

为什么身高“错误”?因为你没有测量它。你只是测量了某个随机角色的身高。

如果你查看日志文件,你会看到该行\jhbin=\box46

如果您尝试,会发生什么\hbox{\jhbin}?您会得到一个句点。为什么?因为 ASCII 46 就是句点。如果您定义其他保存框,您将得到不同的字符。

由于实施的原因,\newsavebox{\jhbin}实际上存储在\jhbin一个数字中;如果单独使用,这将使用当前字体打印具有该数字的字符。

你可以这样做\settoheight{\heightofhw}{\usebox{\jhbin}},但也许你不想要这个,而是真实的框的高度。tabular默认情况下,A 的排版一半在基线上方,一半在基线下方(实际上,比基线上方的一半略高一点)。

如果你这样做

\begin{lrbox}{\jhbin}
  \begin{tabular}[b]{c}
    Jim Hef{}feron\\
    Many lines is\\ comming.
  \end{tabular}
\end{lrbox}

\settoheight{\heightofhw}{\usebox{\jhbin}}
Right Height = \the\heightofhw

你得到

右高度 = 32.39996pt

因为使用此[b]选项,表格的底行将位于基线上。当然

\setlength{\heightofhw}{\ht\jhbin}

更简单。

但是,由于底部的“g”,因此这不是表格的完整垂直尺寸。您可以使用以下方法获取完整垂直尺寸

\setlength{\heightofhw}{\dimexpr\ht\jhbin+\dp\jhbin\relax}

这将给出36pt(因为表格有三行)。

答案2

为什么要将盒子放在 中\hbox\hbox显然会“吞掉”高度。 可以使用 来检索盒子的高度\ht\settoheight内部使用它,如果您已经有一个盒子,则无需使用它。 因此,结果是您只需要

\heightofhw=\ht\jhbin

如同

\documentclass{article}
\usepackage[utf8]{inputenc}

\begin{document}

\newsavebox{\jhbin}
\begin{lrbox}{\jhbin}
  \par\begin{tabular}{c}
    Jim Hef{}feron\\
    Many lines is\\ comming.
  \end{tabular}
\end{lrbox}    
\newlength{\heightofhw}
\heightofhw=\ht\jhbin
Height = \the\heightofhw  

\usebox{\jhbin}

\end{document}

在此处输入图片描述

相关内容