TeX:排列三个框

TeX:排列三个框

这个问题实际上是我之前的问题基本上,我想知道为什么这不起作用:

\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 通过放置盒子和胶水来工作”而我所做的只是创建一些盒子。

我认为我的直觉有问题,因为我得到的输出如下所示:

箱子撞在一起

上一个问题告诉我如何解决问题,但并没有解决真正的问题我的直觉有缺陷。我的思维过程有什么问题?

  1. 在这种情况下,TeX 不会自动插入胶水吗?如果没有,为什么添加\hfil不能解决问题?

    我注意到添加\hfill会改变输出 - 我得到左边的第一个框,最右边的中间框,并且大概最后一个框在页面右侧的某处。

  2. 根据之前的回答,我认为我需要设置一些盒子尺寸。为什么?看起来盒子应该会变大以占据该线上的空间——至少当涉及到可拉伸胶水时。如果我不想设置明确的尺寸,我需要做什么?

  3. 我注意到,当我将 放在\hfil内部和外部时,我得到的行为不同\vbox:当我使用\vbox{...}\hfill\vbox{...}它时没有效果,但当我使用\vbox{...}\vbox{\hfill}\vbox{...}它时确实有效果。但它有错误的效果。这不是\hfill水平命令吗?启动 不是vbox会将您置于垂直模式,而启动不会将您hbox置于水平模式吗?还是这里发生了其他事情?

  4. 运行格式化的程序会在框之间添加空格。我假设这是,但将其值更改为或\spaceskip之类的值会将输出恢复到以前的状态。\spaceskip=0pt plus 1filplus 1fill

编辑附加问题:

  1. 这有什么区别:

    \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”。

相关内容