我尝试使用时间框对齐包含数学环境的子图的子标题字母,使其垂直对齐到最大的子图。但是,当我这样做时,子标题字母会移到一边。
我做错了什么?我想让第三个表达式与中间对齐(垂直),并且三个标题字母水平对齐。
\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
您的方法有两个缺陷:
在 中排版段落时
\vbox
,其宽度与当前行宽相同你没有考虑到
\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}}