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 将没有效果。

\pboxpbox 包提供的命令。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 设置为 topparbox 中顶部的文本行基线会与外部盒子基线对齐。如果 \parbox 只有一行文本,则该行既是顶部、底部和居中行,改变 pos 不会有任何效果,除非添加更多文本。


如果 contentpos 存在且不同于 pospos 不是 center,那么 \parbox 会根据边框对齐。


makeboxmbox

makebox 创建一个单行盒子,宽度可选,默认足够容纳内容。需要注意的是,宽度不一定要比内容宽:例如,设置宽度为 0 将在不改变当前位置的情况下排版内容(例如,这允许字符重叠)。makebox 通常用于防止断字(参见断字)或将应放在一起的文本保持在同一行。不能在 makebox 内放置换行符(\)。mboxmakebox 的简写版本,没有额外的参数选项。

\mbox{text}
\makebox[width][pos]{text}

pos 参数接受一个字符值:centerflushleftflushright 或将文本扩展至填满盒子。

frameboxfbox

framebox 的行为与 makebox 相同,但它还会在其内容周围绘制一个框。

\fbox{text}
\framebox[width][pos]{text}

以下是一些可以用 makeboxframebox 命令实现的示例:

\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 将占位符中的内容渲染到文档中。

colorboxfcolorbox

参见颜色\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

参见旋转

resizeboxscalebox

graphicx 包提供了其他框:

\resizebox{10ex}{2\baselineskip}{Dunhill style}
\scalebox{10}{Giant}

最后修改: 2025年04月21日 星期一 10:33