\hbox 可以占据其周围的所有空间吗?

\hbox 可以占据其周围的所有空间吗?

如果我有两个这样的盒子:

\hbox to 2cm{\vrule\hfil\hbox{\vrule keke\vrule}\hfil\vrule}
\bye

那么内部是否有可能\hbox占据全部 2cm?(\hfils 和\vrules 仅用于说明尺寸)

答案1

这并不能回答您的问题,但也许您想要这样的东西?

\documentclass{article}
\makeatletter
\newcommand\labeleddownbracefill[1]{%
        $\m@th
        \setbox\z@\hbox{$\braceld$}%
        \braceld
        \leaders\vrule\@height\ht\z@\@depth\z@\hfill
        \braceru
        \raise1ex\hbox to\z@{\hss$\scriptstyle#1$\hss}%
        \bracelu
        \leaders\vrule\@height\ht\z@\@depth\z@\hfill
        \bracerd
        $%
}
\makeatother
\begin{document}
\begin{tabular}{cc}
foo&\labeleddownbracefill{\lambda}\\
bar&Here is some text to be braced\\
\end{tabular}
\end{document}

在此处输入图片描述

答案2

我的想法比我想象的要复杂得多,并且与解决方案相差太远,不能算作答案,但是因为我花了一些时间......基本思想,给出的代码如下(所有代码均为 Plain Tex):

\setbox0=\hbox to 3in 
    {\hfill a\hfill} % Box 0 is an hbox containing a skip, an hbox-like item, and a skip
\showbox0

是 (i)\showbox将通过告诉您如何“设置”粘合来告诉您重新设计 hbox 所需的信息:

\hbox(4.30554+0.0)x216.81, glue set 105.905fill
.\glue 0.0 plus 1.0fill
.\tenrm a
.\glue 0.0 plus 1.0fill

即 1.0fill 是 Tex 内部测量值的 105.905;并且 (ii),您可以使用此粘合设置因子返回并替换最后一次跳过的 vrule:

\skip0=105.95 % the glue setting factor
\setbox1=\hbox to 3in
   {\unhcopy0 % Make contents so far of this box be contents of box 0
    \unskip %remove last skip
    \hbox to \skip0{\vrule}} %put in hbox of same width as removed skip

两个盒子寄存器将包含三个相同宽度的项目,但盒子 0 中的最后一个跳过将被盒子 1 中的规则替换。您可以通过定义一个带有“孔”的宏来简化这一步,其中 skip/hbox 将进入该孔。

我们不想手动查找结果来计算宽度:我们希望自动获取粘合尺寸的“设置”宽度。这就是困难之处。我认为 Tex 或 Etex 中没有办法在内部提取跳过的拉伸/收缩因子,尽管可以使用输出信息\showbox并在外部执行计算。Luatex 确实允许您查看拉伸/收缩因子的内部,但它似乎不允许您直接检查设置因子。

因此,我可以想到两种有问题的方法来获取这里想要的值:

  1. 通过解析外部的输出\showbox
  2. 在 Luatex 中,通过递归盒子的结构并根据收集到的信息计算胶水设置(即重建 Tex 算法已经执行的操作)。

相关内容