要在单个 LaTeX 项下方放置短箭头和说明文字,可将 \underset 与 amsmath 中的双行 \substack 结合使用。本指南提供适用于 Mac 桌面工作流的完整文档,以及针对表达式拥挤情况的间距调整方法。

使用 amsmath 构建标注

基本布局分为三个层次:代数项、其下方的向上箭头,以及箭头下方的简短标签。箭头指向它所解释的项。amsmath 指南介绍了用于在基项下方放置内容的 \underset,以及用于堆叠多行内容的 \substack。将它们结合起来即可生成此处使用的标注。amsmath 宏包用户指南

如果你的 Mac 上没有可用的 LaTeX 安装,LaTeX 项目推荐使用 MacTeX,它包含 TeX 系统和文档编辑器。如果你已经能成功编译 LaTeX 文档,就使用现有安装。获取 LaTeX

在 LaTeX 编辑器中将以下完整文档保存为 annotations.tex。使用 pdfLaTeX 编译,并检查生成的 PDF。所有标签和表达式均为示例。

\documentclass{article}
\usepackage{amsmath}

% First argument: mathematical term.
% Second argument: short text label.
\newcommand{\termnote}[2]{%
  \underset{\substack{\uparrow\\\text{#2}}}{#1}%
}

\begin{document}

\[
  F(x)=
  \termnote{ax^2}{quadratic}
  +\termnote{bx}{linear}
  +\termnote{c}{constant}.
\]

\end{document}

此示例分别为 ax^2、bx 和 c 添加标注。加号留在命令参数之外,从而明确了每条说明的作用范围。若要标注整个分组表达式,则将该分组作为第一个参数传入。

名称 \termnote 是本文档中定义的自定义命令,并非宏包内置命令。它的定义组合了文档所述的组件。\text 命令可在数学模式中提供普通文本,并会根据周围的数学样式调整字号。amstext 宏包

理解参数顺序

将 \termnote{bx}{linear} 理解为“用标签 linear 标注项 bx”。在定义中,\underset 先接收下方内容,再接收基项。\\ 用于分隔箭头行和标签行。

如果只需临时使用一次标注,下面的数学模式片段与该命令调用等效。将它放在上方完整文档的显示公式定界符内:

\underset{\substack{\uparrow\\\text{linear}}}{bx}

在整篇文档中保持箭头方向一致。向上的箭头表示说明针对其上方的项。如果你想表达从公式指向下方说明的含义,请在命令定义中将 \uparrow 替换为 \downarrow。

选择适合说明内容的布局

添加宏包之前,先确定箭头需要连接什么。标识单个项的标注、沿表达式延伸的箭头,以及解释公式行之间转换的箭头,需要使用不同的构造方式。

预期效果 适用构造 放置位置
单个项下方的短竖箭头和文字 \underset、\substack 和 \text 的自定义组合 数学表达式内部
表达式下方的水平箭头 amsmath 中的 \underrightarrow、\underleftarrow 或 \underleftrightarrow 围绕需要添加箭头的表达式
箭杆上方或下方带文字的水平箭头 amsmath 中的 \xrightarrow 或 \xleftarrow 数学对象之间
连续公式行旁边的说明箭头 witharrows 中的 WithArrows 或 DispWithArrows 该宏包的公式对齐环境中

amsmath 指南区分了下置箭头和可伸缩箭头:前者用于装饰表达式,后者则可容纳附在箭头上的标签。这两种箭头都不会自动生成第一个示例中的三层竖向标注。amsmath 宏包用户指南

witharrows 宏包将 WithArrows 说明为一种类似 aligned 的对齐组件,将 DispWithArrows 说明为一种类似 align 的显示环境。它的主要布局是在公式行右侧放置说明箭头。若要直接在单个项下方放标签,请使用第一个示例;若要说明各行之间的步骤,则选择 witharrows。plain-TeX 和 LaTeX 的 witharrows 宏包

控制标签宽度,避免相互重叠

先从第一个文档开始,并检查间距,然后再进行更改。constant 这样的标签可能远宽于它所标注的项 c。多出的宽度会让短表达式显得松散,但也为说明留出了空间。

如果需要保持项间距紧凑,mathtools 提供了 \mathclap。它会将内容居中放入一个报告宽度为零的盒子中。该宏包会加载 amsmath,因此修改后的文档只需添加 \usepackage{mathtools}。mathtools 宏包,第 2 节和第 3.1.1 节

下面是第二个完整文档,可供比较。它只隐藏标签的宽度;箭头仍计入标注的测量宽度。

\documentclass{article}
\usepackage{mathtools}

\newcommand{\compacttermnote}[2]{%
  \underset{%
    \substack{\uparrow\\\mathclap{\text{#2}}}%
  }{#1}%
}

\begin{document}

\[
  F(x)=
  \compacttermnote{ax^2}{quadratic}
  \quad+\quad
  \compacttermnote{bx}{linear}
  \quad+\quad
  \compacttermnote{c}{constant}.
\]

\end{document}

报告宽度为零并不意味着文字不可见。标签仍会从中心向两侧延伸。因此,即使代数表达式在行内排得很宽松,邻近标签仍可能重叠。此示例布局中明确设置的 \quad 间距为标签留出了更多空间;请根据自己的表达式查看效果后进行调整。

按以下顺序处理:先缩短标签,再比较普通版和紧凑版,然后在需要处增加明确的间距。如果说明仍需要一个完整句子,就把它移到周围的正文中,并在项下方保留简短标识。这样在正常阅读字号下,标注仍然实用。

将带标注的表达式放入正确的环境

对于一个无编号的表达式,请像上文那样使用 \[ ... \]。对于多行对齐的公式,请直接在文档正文中使用 align*。而 aligned 环境应放在外层数学环境内部。这些边界在 amsmath 指南中有说明。amsmath 宏包用户指南,第 3 节

以下是第一个文档的替换用显示公式片段。它使用已有的 \termnote 定义;请替换整个原显示公式,包括开头和结尾的定界符。

\begin{align*}
  F(x) &= ax^2+bx+c \\
       &= \termnote{ax^2}{quadratic}
          +\termnote{bx}{linear}
          +\termnote{c}{constant}.
\end{align*}

结合后面的段落或公式检查带标注的公式行。标签会在数学基线下方增加高度,因此单独看起来平衡的布局,放进较长的推导中可能会显得拥挤。如果需要解释多个项,优先将这些标注放在显示公式中。

排查常见问题

  • 自定义命令未定义: 在 \begin{document} 之前加入 \newcommand 定义。
  • 宏包命令未定义: 检查是否已加载相应宏包。紧凑示例需要 mathtools 来使用 \mathclap。
  • 标注作用到了错误的内容: 检查第一个参数周围的花括号。使用 \termnote{ax^2}{quadratic} 将系数和指数一起纳入。
  • 标签相互重叠: 改回普通宽度版本,缩短文字,或增大带标注项之间的间距。
  • 对齐时出现嵌套错误: 使用上文所示的完整环境布局,不要将 align* 放入另一个显示公式环境中。

对于这些普通代数项,该命令会将项作为基项,并在其下方添加说明。amsmath 的实现还会在基项具有二元运算符或关系符的分类时保留该分类,但标注运算符会带来额外的间距问题。请先从标注项本身开始。amsmath 宏包,第 12 节

这些示例依据文档中介绍的命令进行了核对,但未在研究环境中编译。将命令集成到较大的文稿之前,请先在 Mac 上的 LaTeX 安装中编译完整文档。

请以普通宽度版本作为起点。当每个箭头都清楚地指向对应项,且每个标签都清晰可读后,只在周围表达式有足够空间容纳可见文字时使用紧凑版本。

来源