将子图的标题与数学环境对齐到底部

将子图的标题与数学环境对齐到底部

我尝试使用时间框对齐包含数学环境的子图的子标题字母,使其垂直对齐到最大的子图。但是,当我这样做时,子标题字母会移到一边。

error image

我做错了什么?我想让第三个表达式与中间对齐(垂直),并且三个标题字母水平对齐。

\documentclass[twocols]{article}
\usepackage{amsmath}
\usepackage{subfig}
\begin{document}

\newbox{\tmpbox}
\begin{figure}
\sbox{\tmpbox}{$%
\begin{bmatrix}%
1 & 2 & 3\\
1 & 2 & 3\\
1 & 2 & 3
\end{bmatrix}%
$}%
\subfloat[]{%
\usebox{\tmpbox}\label{fig:ex-a}%
}
\subfloat[]{%
\label{fig:ex-b}
$
\begin{bmatrix}
1 & 2 & 3\\
1 & 2 & 3\\
1 & 2 & 3
\end{bmatrix}
$
}%
\subfloat[]{%
\vbox to \ht\tmpbox{%
\vfill%
$\overbrace{123}^{x}\overbrace{45}^{y}\overbrace{67}^{z}$%
\vfill}\label{fig:ex-c}%
}
\caption{My caption.}
\label{fig:ex}
\end{figure}

\end{document}

答案1

您的方法有两个缺陷:

  1. 在 中排版段落时\vbox,其宽度与当前行宽相同

  2. 你没有考虑到\tmpbox

    \subfloat[]{%
    $\vcenter to \dimexpr\ht\tmpbox+\dp\tmpbox\relax{
    \vfill
    \hbox{$\overbrace{123}^{x}\overbrace{45}^{y}\overbrace{67}^{z}$}
    \vfill}$\label{fig:ex-c}%
    }
    

当用盒子做实验时,将它们放入\fbox命令中会有所帮助,这样我们就能弄清楚 TeX 真正认为它们是什么。

默认情况下,矩阵以线为中心(更准确地说,以公式轴为中心,略高于基线);因此,包含第一个矩阵的框的一部分(略大于总垂直尺寸的一半)位于基线之上,这构成了高度,而另一部分位于基线之下(深度)。

因此,如果我们希望最后一个子图占用与矩阵完全相同的垂直空间,我们需要使其与高度和深度的总和一样大。但我们还需要将其相对于公式轴居中,这项工作\vcenter只能在数学模式下执行:

$\vcenter to\dimexpr\ht\tmpbox+\dp\tmpbox\relax{...}$

满足我们的需要。

现在让我们看看 里面发生了什么\vcenter。如果我们说

\vfill
$...$
\vfill

那么 TeX 一扫描到段落就会开始一个段落,$并且这个段落将被分配当前行宽,无论它是否少于一行。因此我们需要避免 TeX 开始一个段落:它必须保持在模式中,当它只是将一个框堆叠在另一个框之上时,也称为垂直模式所以我们说

\vfill
\hbox{$...$}
\vfill

这样就可以了。\vcenter框的水平尺寸始终是其所包含的水平框的最大值,在本例中恰好是公式的大小。

查看该包adjustbox以通过“更多 LaTeX”的方式获得类似的结果。

或者,这可能是最简单的方法,加载varwidth包并写入

\subfloat[]{%
\begin{varwidth}[c][\dimexpr\ht\tmpbox+\dp\tmpbox][c]{\linewidth}
  $\overbrace{123}^{x}\overbrace{45}^{y}\overbrace{67}^{z}$%
\end{varwidth}}

相关内容