(La)TeX 中有哪些不同类型的框?

(La)TeX 中有哪些不同类型的框?

我在各种代码示例中看到过、、hbox和其他。(La)Tex 中有哪些不同类型的框?哪些适合在 LaTeX 中使用,而不是在普通的 TeX 中使用?vboxmboxparbox

答案1

用于构建盒子的原始 TeX 命令是

  • \hbox、水平框
  • \vbox,垂直框,参考点位于其内部的最后一行
  • \vtop,垂直框,参考点位于其内部的第一行
  • \vcenter,垂直框,参考点位于中间(几乎)

不鼓励在 LaTeX 文档中使用它们,但在编写一些宏时,它们比 LaTeX 替代品更方便。当然,在使用低级命令时,应该知道一些风险是不可避免的。

水平框的 LaTeX 命令是

  • \mbox{<text>}(类似于\hbox),水平框的自然大小为<text>

  • \makebox[<width>][<alignment>]{<text>},水平框,其中第一个可选参数设置最终宽度,独立于的自然宽度<text>(尽管如此,仍可用\width);第二个可选参数是一个字符l c r或,用于指定相对于所述宽度s的对齐方式<text>

  • \sbox{<bin>}{<text>}和分别\savebox{<bin>}[<width>][<alignment>]{<text>}类似于\mbox\makebox,但将盒子存储在<bin>预先声明的\newsavebox

  • \fbox{<text>}和分别\framebox[<width>][<alignment>]{<text>}类似于\mbox\makebox,但也在构建的框周围画了一个框架

垂直框的 LaTeX 命令是

  • \parbox[<alignment>]{<width>}{<text>}、垂直框
  • \begin{minipage}[<alignment>]{<width>}、垂直框

可选的<alignment>is c(默认)tb,用于指定框相对于上下文的对齐方式。它们分别通过\vcenter\vtop和实现\vbox

但是还有其他可选参数:

\parbox[<alignment>][<height>][<inner arrangement>]{<width>}{<text>}

必须<height>是一个长度,它告诉 LaTeX 构建框时,就好像其垂直尺寸是指定的长度一样。 必须是、或<inner arrangement>c默认t情况下使用指定或隐式),它告诉如何在可用空间中垂直排列文本;表示“展开”:所有可用的柔性胶水将用于将第一行放在可用空间的顶部,将最后一行放在可用空间的底部。bs<alignment>s

相同的可选参数可用于minipage,含义相同。使用 和 构建的框之间的差异\parbox非常minipage微妙,与一般讨论不太相关:

\begin{minipage}[<alignment>][<height>][<inner arrangement>]{<width>}
<text>
\end{minipage}

我在最近的回答中使用了以下内容

\parbox[t][0pt]{...}{...}

这样,框就相对于其顶线对齐,但其垂直尺寸计算为零;它将在tabular其他单元格提供垂直尺寸的环境中使用。这当然可以用 来实现\vtop,但记住细节和 的正确位置\vss总是很麻烦:使用\parbox更方便。

还有一个非常有用的环境:

\begin{lrbox}{<bin>}
<text>
\end{lrbox}

这与 非常相似\sbox{<bin>}{<text>},但允许\begin{lrbox}{<bin>}在新定义的环境的“开始”代码中,并\end{lrbox}在“完成”代码中。构建的框将使用 打印(或封装在另一个框中)\usebox{<bin>}。(注意:绝不使用\lrbox\endlrbox,除非你知道出色地你在做什么。)

一个相当相似的结构是\raisebox

\raisebox{<lift>}[<height>][<depth>]{<text>}

其工作原理与 类似\mbox(即,它构建一个水平框),但也会将其提升到 中指定的尺寸<lift>。可选参数用于纠正 TeX 对这个提升框的想法。例如,“g”的高度和深度(在十点 Computer Modern 字体中)分别为 4.3pt 和 2pt(深度是字形在基线下突出的程度)。如果我们这样做

\raisebox{3pt}{g}

高度将为 7.3pt,深度为零(不会变为负数)。\raisebox{-5pt}{g}高度将变为零,深度为 7pt。\raisebox{3pt}[1pt][2pt]{g}高度(TeX 所感知的)将为 3pt,深度为 2pt。

一个有趣的应用是制作一个零高度和深度的盒子(感谢 A.Ellet):

\raisebox{0pt}[0pt][0pt]{g}

会让 TeX 认为“g”不占用任何空间。使用以下方法可以获得类似的效果(效率更高,但可能不像 LaTeX 那样有效):

\smash{g}

\leavevmode在 2018-12-01 之前的旧版本 LaTeX 中,如果在段落开头使用,则需要使用)。

最后语法

\makebox(<x>,<y>){<text>}

构建一个宽度<x>\unitlength(默认 1pt)倍数、高度<y>\unitlength(因此<x><y>可以是十进制数,但不是尺寸,除非picture加载了包)。它主要被考虑用于picture环境,但它可以在任何地方使用。

\makebox(0,0){some text}

是相同的

\smash{\makebox[0pt]{some text}}

但输入起来更容易。可以使用可选参数修改默认的“中心和基线”的参考点位置<text>(有关详细信息,请参阅 LaTeX 手册或 LaTeX Companion)。

使用 LaTeX 命令的另一个原因是它们是“颜色安全的”。我不会提及colorxcolor包提供的绘制彩色框的所有可能性,但我想提醒一下,和类似的代码\makebox已经有一个颜色保护机制,而原始命令没有。


在许多情况下,varwidth同名包(由 Donald Arsenau 提供)提供的环境很有用;standalone例如,它被包和类使用。环境的语法与minipage

\begin{varwidth}[<alignment>][<height>][<inner arrangement>]{<width>}
<text>
\end{varwidth}

不同之处在于,如果在中指定了明确的换行符<text>,则框的宽度将是所获取的行的最大宽度或指定的<width>,以较小者为准。

需要注意的是,minipage当包含仅有的一个tabbing环境,因此varwidth可以看作是对此的概括。


还提供另一种类型的盒子制作命令mathtools

  • \mathmbox
  • \mathmakebox

\mbox分别具有与和相同的语法\makebox,但以数学模式排​​版其参数,并遵守大小(正常、第一级子/上标、第二级子/上标)。还有变体:

  • \clap{<text>}类似于\makebox[0pt][c]{<text>}(互补\llap\rlap
  • \mathllap{<math>}类似于\mathmakebox[0pt][r]{<math>}
  • \mathclap{<math>}类似于\mathmakebox[0pt][c]{<math>}
  • \mathrlap{<math>}类似于\mathmakebox[0pt][l]{<math>}

但是,最后三个接受一个可选参数;例如

\mathclap[\scriptstyle]{<math>}

排版公式时<math>假装它不占用任何空间,一半向左突出,一半向右突出,但强制\scriptstyle; 用\mathclap{<math>}一个将获得 TeX 规则所暗示的任何样式。\mathllap数学材料不占用任何空间,全部粘在当前位置的左侧,用 粘\mathrlap在右侧。参见Alexander Perlis 关于 TUGboat 的文章更多细节。


\hbox附录:和\vbox普通 TeX 框的简短介绍

基本构造\hbox\vbox是 TeX 基元,因此请谨慎使用。第二种类型更简单:它本质上与标准排版模型相同,不同之处在于只生成一个对象。段落根据当前排版\hsize(可以在之后手动重置\vbox{,并且将在最后恢复,因为和的内容\hbox形成\vbox一个组)。

相反,的内容\hbox被排版为单个水平的单元,没有换行符。

\hbox我们应该意识到\vbox 改变 TeX 在处理时的模式。这在开始时可能会令人困惑:例如

<blank line>
\hbox{abc}\hbox{def}

将两个箱子叠在一起垂直,它们之间有行间粘连:

ABC
定义

如果

\vbox{
  \hbox{abc}
  \hbox{def}
}

结果将是相似的;但这很重要,因为 a 的宽度\vbox被视为其中 an 的最宽宽度\hbox(可能在分段之后)。

两种结构都允许<box specification>;例如

\hbox to 1cm{abc def}

将拉伸(或收缩)可用的胶水,以获得 1cm 宽的盒子。或者

\hbox spread 1cm{abc def}

将通过拉伸(如果尺寸为负则收缩)可用胶水,使盒子比其“自然宽度”宽 1cm。

可以赋予相同的规格\vbox,不同之处在于高度进行了修改。

a 的参考点\vbox是其中最后一项的参考点。

替代方法的\vtop行为基本类似\vbox,但参考点是其中第一个项的参考点。当<box specification>给定 a 时,深度会被修改。

该图元\vcenter只能在数学模式下使用;它的行为类似于\vbox,但最终参考点被设置为使总高度加上深度的一半位于公式轴上方(分数线所在的位置)。

普通的 TeX 宏\llap\rlap定义如下:\hbox

\def\llap#1{\hbox to 0pt{\hss#1}}
\def\rlap#1{\hbox to 0pt{#1\hss}}

其中\hss本质上等同于\hskip 0pt plus 1fil minus 1fil。 的参数\llap将排版在紧贴其左侧的零宽度框中。 类似地, 。可以以类似的方式获得\rlap宏(参见上面的);普通 TeX 没有它,但它有和的简写形式\clapmathtools\line\hbox to \hsize\centerline

\def\centerline#1{\line{\hss#1\hss}}

因此材料将位于线的中心,如果尺寸过大,则会粘在两侧的线长度之外。

需要注意的是:\llap和在 LaTeX 中也有定义,但它们的行为与 LaTeX 中的和\rlap不同,它们\centerline\makebox[0pt][r]{...}\makebox[0pt][l]{...}\makebox[\columnwidth]{...}如果在垂直模式下发现,则开始一个段落。

相关内容