我在各种代码示例中看到过、、hbox
和其他。(La)Tex 中有哪些不同类型的框?哪些适合在 LaTeX 中使用,而不是在普通的 TeX 中使用?vbox
mbox
parbox
答案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
(默认)t
或b
,用于指定框相对于上下文的对齐方式。它们分别通过\vcenter
、\vtop
和实现\vbox
。
但是还有其他可选参数:
\parbox[<alignment>][<height>][<inner arrangement>]{<width>}{<text>}
必须<height>
是一个长度,它告诉 LaTeX 构建框时,就好像其垂直尺寸是指定的长度一样。 必须是、或<inner arrangement>
(c
默认t
情况下使用指定或隐式),它告诉如何在可用空间中垂直排列文本;表示“展开”:所有可用的柔性胶水将用于将第一行放在可用空间的顶部,将最后一行放在可用空间的底部。b
s
<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 命令的另一个原因是它们是“颜色安全的”。我不会提及color
或xcolor
包提供的绘制彩色框的所有可能性,但我想提醒一下,和类似的代码\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 没有它,但它有和的简写形式\clap
mathtools
\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]{...}
不如果在垂直模式下发现,则开始一个段落。