我正在尝试对齐一些盒子,但很难理解为什么我所做的事情不起作用以及我能做些什么才能用盒子图元获得所需的效果。
我想
x the quick brown fox
jumps over the lazy dog
y sphinx of
我有
\hsize=2in
\vbox{
\parindent=0pt
\hbox to \hsize{
\hbox to 20pt{\vbox{%
\vbox{x}%
\vbox{\vfill}%
\vbox{}
}}%
\vbox{the quick brown fox jumps over the lazy dog.}
}
\hbox{
\hbox to 20pt{\vbox{%
\vbox{y}
\vbox{\vfill}
\vbox{}
}}
\hbox{\vbox{
\vbox{sphinx of}
}}
}
}
\bye
我确信我在这里做错了什么。我不想使用 halign 或类似的东西,因为理论上没有它难道不可以吗?每行一个水平框,每行有两个水平框,一个短水平框用于“x”或“y”,一个较长的环绕水平框用于行的其余部分,当文本向下溢出时包含一个垂直框。也许我需要将右侧垂直框的高度设置为左侧垂直框,但我不确定这是否可行或如何做到这一点。有什么建议吗?
答案1
根据示例如何垂直对齐顶部的 hbox 中的两个 vbox?,你可能正在寻找这样的内容:
\parindent=0pt
\hsize=2in
\newdimen\z
\z=\the\hsize
\advance\z by -20pt
\hbox{
\vtop{\hbox to 20pt{x\hfill}}
\vtop{\hsize=\z the quick brown fox jumps over the lazy dog.}
}
\hbox{
\vtop{\hbox to 20pt{y\hfill}}
\vtop{\hsize=\z sphinx of}
}
\bye
它会产生你想要的输出:
[修复基线等留作练习:-)]
至于为什么你的尝试不起作用,让我们稍微简化一下:
由于不执行任何
\vbox{\vfill}
操作\vfill
,因此我们可以将其删除:\vbox{}
。\vbox
类似地,此示例中最外层不执行任何操作,且\vbox{\vbox{sphinx of}}
等同于\vbox{sphinx of}
。因此您的输入等效于(产生相同的输出):
\hsize=2in
\parindent=0pt
\hbox to \hsize{
\hbox to 20pt{\vbox{\vbox{x}\vbox{}\vbox{}}}%
\vbox{the quick brown fox jumps over the lazy dog.}
}
\hbox{
\hbox to 20pt{\vbox{\vbox{y}\vbox{}\vbox{}}}
\hbox{\vbox{sphinx of}}
}
\bye
这里,每个\vbox
(包括每个“空” \vbox{}
)都使用全局的\hsize
,2in
这解释了您所看到的大部分内容。