LaTeX
TeX 盒子与胶水概述
在 TeX 中,盒子是一个看不见的容器,用于包含一个可见元素、空元素或其他盒子。胶水是 TeX 中的术语,指的是一个看不见的连接器,用于确定连接盒子之间的相对位置。TeX 文档中的每个独立的可见元素都包含在一个盒子里。可见元素可以是字母、图像、几何形状等。TeX 通过将盒子按默认的 TeX 规则、默认的 LaTeX 规则或文档命令连接在一起来构建页面。在典型文档中,字母盒子被粘贴到其他字母盒子中形成单词,然后弹性地将这些单词连接成句子。句子被分成行并放入段落盒子中。弹性胶水被压缩或拉伸以使段落盒子中的行完全对齐。段落盒子与图形盒子连接,依此类推。
虽然盒子可以包含其他盒子,但并非所有生成盒子的命令都可以在其他生成盒子的命令中使用。通常可以通过一些变通方法解决这些限制。
盒子的大小通常与其内容的大小和位置相关,但不必如此。许多盒子命令接受自定义的宽度和/或高度,还有其他命令会影响盒子的形状和位置。盒子是相对其他盒子放置的,而可见元素是相对包含它们的盒子放置的。
关于盒子和胶水的更完整描述,可以参考 Donald E. Knuth 的《The TeXbook》中的第 11 和 12 章。基本的 LaTeX 盒子和胶水命令列表可以在 此链接 找到。
盒子
字符盒子
TeX 字符盒子有三维特性:
字符盒子在基线上连接在一起。
\parbox、\minipage 和 \pbox
-
\parbox 是一个特定宽度的盒子,格式化为段落模式。在段落模式中,文本会被分成多行,并且行会被分到多个页面。
\parbox[pos][height][contentpos]{width}{text}
-
width 定义了段落盒子的宽度。文本会被分成多行,直到适应该宽度。除了固定长度外,还可以提供用户定义的长度宏或 TeX/LaTeX 定义的长度宏和原语,如
\width
、\height
、\depth
和\totalheight
(有关深度和高度的解释,请参见字符盒子部分)。 -
height 定义了
\parbox
的高度。 -
pos 选择要连接的基线。它可以是
top
(顶部)、bottom
(底部)或center
(居中)。这个参数对新手用户可能会比较困惑!请查看下面的特别说明。 -
contentpos 在盒子内部的位置。它可以是
center
(居中)、top
(顶部)、bottom
(底部)或spread
(均匀分布)。请注意,如果盒子的内容比盒子本身小,contentpos
将没有效果。
\pbox
是 pbox
包提供的命令。pbox
与 \parbox
具有相同的参数,但如果用户提供的宽度参数大于 pbox
的实际内容,pbox
会缩小以适应内容。这在内容包含手动换行符时非常有用,可以适应生成的材料。
\pbox[pos][height]{width}{text}
-
\minipage 环境的参数与
\parbox
相同,行为几乎相同。minipage
与\parbox
的区别在于,parbox
只能包含一个段落,且不能在其中使用所有命令和环境,而minipage
可以包含多个段落,实际上几乎可以包含任何内容。
\begin{minipage}[pos][height][contentpos]{width} text \end{minipage}
使用 minipage、\parbox 和 \pbox 嵌入段落到非段落盒子中
例如:
\fbox{%
\parbox{\textwidth}{
Some very long text\\
that would not be allowed\\
in an fbox.
}%
}
关于 pos
参数的特别说明
pos
对齐参数在 contentpos
缺失或与 pos
相同且 pos=center
时,并不指 \parbox
的边框!在这些情况下,对齐参数选择在 \parbox
内部用来对齐段落盒子的文本行。pos
参数设置后,pos
所指定的行会被对齐到 \parbox
所粘贴的盒子基线。例如,若 pos
设置为 top
,parbox
中顶部的文本行基线会与外部盒子基线对齐。如果 \parbox
只有一行文本,则该行既是顶部、底部和居中行,改变 pos
不会有任何效果,除非添加更多文本。
如果 contentpos
存在且不同于 pos
且 pos
不是 center
,那么 \parbox
会根据边框对齐。
makebox
和 mbox
makebox
创建一个单行盒子,宽度可选,默认足够容纳内容。需要注意的是,宽度不一定要比内容宽:例如,设置宽度为 0 将在不改变当前位置的情况下排版内容(例如,这允许字符重叠)。makebox
通常用于防止断字(参见断字)或将应放在一起的文本保持在同一行。不能在 makebox
内放置换行符(\)。mbox
是 makebox
的简写版本,没有额外的参数选项。
\mbox{text}
\makebox[width][pos]{text}
pos
参数接受一个字符值:center
、flushleft
、flushright
或将文本扩展至填满盒子。
framebox
和 fbox
framebox
的行为与 makebox
相同,但它还会在其内容周围绘制一个框。
\fbox{text}
\framebox[width][pos]{text}
以下是一些可以用 makebox
和 framebox
命令实现的示例:
\makebox[\textwidth]{c e n t r a l} \par
\makebox[\textwidth][s]{s p r e a d} \par
\framebox[1.1\width]{Guess I'm framed now!} \par
\framebox[0.8\width][r]{Bummer, I am too wide} \par
\framebox[1cm][l]{never mind, so am I}
调整框架长度
你可以调整以下框架长度:
-
\fboxsep
:框架和内容之间的距离。 -
\fboxrule
:规则的厚度。
\setlength{\fboxsep}{10pt}
\setlength{\fboxrule}{5pt}
\fbox{A frame.}
这将显示一个厚且距内容更远的框。
\setlength{\fboxsep}{0pt}
\fbox{A}
savebox
/ usebox
/ newsavebox
savebox
是一个非渲染的盒子,用于存储内容以便稍后通过 usebox
命令重复渲染。
\newsavebox{\boxname}
\savebox{\boxname}{some content}
\usebox{\boxname}
命令 \newsavebox
创建一个存储内容的占位符;命令 \savebox
将指定内容存储在占位符中,而不在文档中渲染;命令 \usebox
将占位符中的内容渲染到文档中。
colorbox
和 fcolorbox
参见颜色。\fcolorbox
也可以通过 \fboxsep
和 \fboxrule
调整。
fancybox
fancybox
包提供了额外的框:
-
\doublebox
-
\ovalbox
-
\shadowbox
盒子修改器
raisebox
现在我们可以控制水平,接下来显然的步骤是控制垂直方向。LaTeX 通过 \raisebox{lift}[height][depth]{text}
命令来定义盒子的垂直属性。可以在前面的三个参数中使用 \width
、\height
、\depth
和 \totalheight
,这些参数用来影响文本参数内盒子的大小。两个可选参数设置 raisebox
的高度和深度。例如:
\raisebox{0pt}[0pt][0pt]{\Large%
\textbf{Aaaa\raisebox{-0.3ex}{a}%
\raisebox{-0.7ex}{aa}%
\raisebox{-1.2ex}{r}%
\raisebox{-2.2ex}{g}%
\raisebox{-4.5ex}{h}
}
}
rotatebox
参见旋转。
resizebox
和 scalebox
graphicx
包提供了其他框:
\resizebox{10ex}{2\baselineskip}{Dunhill style}
\scalebox{10}{Giant}