这个问题实际上是我之前的问题基本上,我想知道为什么这不起作用:
\hbox{\vbox{\hbox{This is}\hbox{A line}}\hfil\vbox{\hbox{And so}\hbox{Is this}}\hfil\vbox{\hbox{Also this}\hbox{Is another}}}
\bye
格式化(我不认为这改变了含义,但万一改变了,它就像我原来那样被混合在一起)它看起来像这样:
\hbox{
\vbox{
\hbox{This is}
\hbox{A line}}
\hfil
\vbox{
\hbox{And so}
\hbox{Is this}}
\hfil
\vbox{
\hbox{Also this}
\hbox{Is another}}}
\bye
我天真的期望是这应该可以工作(事实上我觉得即使没有明确的它也应该可以工作\hfil
)因为“TeX 通过放置盒子和胶水来工作”而我所做的只是创建一些盒子。
我认为我的直觉有问题,因为我得到的输出如下所示:
上一个问题告诉我如何解决问题,但并没有解决真正的问题我的直觉有缺陷。我的思维过程有什么问题?
在这种情况下,TeX 不会自动插入胶水吗?如果没有,为什么添加
\hfil
不能解决问题?我注意到添加
\hfill
会改变输出 - 我得到左边的第一个框,最右边的中间框,并且大概最后一个框在页面右侧的某处。根据之前的回答,我认为我需要设置一些盒子尺寸。为什么?看起来盒子应该会变大以占据该线上的空间——至少当涉及到可拉伸胶水时。如果我不想设置明确的尺寸,我需要做什么?
我注意到,当我将 放在
\hfil
内部和外部时,我得到的行为不同\vbox
:当我使用\vbox{...}\hfill\vbox{...}
它时没有效果,但当我使用\vbox{...}\vbox{\hfill}\vbox{...}
它时确实有效果。但它有错误的效果。这不是\hfill
水平命令吗?启动 不是vbox
会将您置于垂直模式,而启动不会将您hbox
置于水平模式吗?还是这里发生了其他事情?运行格式化的程序会在框之间添加空格。我假设这是,但将其值更改为或
\spaceskip
之类的值会将输出恢复到以前的状态。\spaceskip=0pt plus 1fil
plus 1fill
编辑附加问题:
这有什么区别:
\vbox{ \hbox{This is} \hbox{A line}}
和:
\vbox{ This is\par A line}
我真的很感谢这里每一个人的耐心帮助我学习 TeX!
答案1
广告 1.(从TeXbyTopic)。\hfil
是一个“水平命令”:相当于“水平跳过” \hskip 0cm plus 1fil
。您提供的“一行”是一个没有指定宽度的水平框。有什么要填充的?考虑这一行:
\hbox{This \hfill question is really a continuation of my previous question. Basically, I'm wondering why this does not work: Formatted (I don't think this changes the meaning, but in case it does, it's smashed together like that in my original) it looks like this: }
那条线应该“拉长”吗?\hfill
这里应该做什么?
广告 1a。这不清楚。你在哪里添加\hfill
,以及添加到哪个示例中?它们不一样……
广告 2。这听起来像是一个“设计”问题;除非明确告知不要这样做,否则您是否宁愿\hbox
填满整条“行”?更实际的是,您可以(在这种情况下)这样做:
\hbox to \the\hsize{% <-- this is important here
\vbox{%
\hbox{This is}
\hbox{A line}}
% \hfill
\vbox{%
\hbox{And so}
\hbox{Is this}}
% \hfill
\vbox{%
\hbox{Also this}
\hbox{Is another}}}
但也许您正在明确设置文本块。
广告 3.我不太明白你在问什么。但请注意\vbox
,它遵循与相同的规范\hbox
,构造“一个垂直框,参考点在最后一项上”(来自TeXbyTopic)。因此,在您的“压缩”示例中,您实际上是要求将第二个\vbox
构建在第一个旁边\vbox
,并且宽度\hfil
至少为 0cm,以填充\hbox
由三个“自然宽度”框组成的。TeX 认为没有必要对 使用超过 0cm 的宽度\hfil
。
还请注意,“未压缩”的示例在以下位置包含显著的空格:
\hbox{ % <-- here; this one is important still
\vbox{
\hbox{This is}
\hbox{A line}} % <-- here
%\hfil
\vbox{
\hbox{And so}
\hbox{Is this}} % <-- here
%\hfil
\vbox{
\hbox{Also this}
\hbox{Is another}}}
广告 4.(回应问题的编辑。)再次,你正在设置一些东西0pt 加 1fil-- 因此在这种情况下最低金额很可能是 0pt。我希望以上评论有助于解释为什么您需要决定是否需要“ \spaceskip
”。