如何在水平 tikzpicture 子标题中对齐基线和标题?

如何在水平 tikzpicture 子标题中对齐基线和标题?

我有两个相邻的 tikzpicture,我想将它们与基线对齐,同时对齐下面的标题。最初,这些图形是垂直居中的,这意味着基线和标题都没有对齐(第二个图形更高)。我在这里看到了几个答案,它们解决了其中一个问题,但不能同时解决两个问题:

  • 对齐标题的一个解决方案是使用保存框来存储较大图像的高度,并使用它来对齐较小图像。它在对齐标题时将图形居中,但我需要根据基线对齐图形。
  • 使用 subcaptionbox 而不是 subfigure 环境对齐标题,但忽略基线。
  • 在 tikzpicture 环境上使用基线选项可以对齐我的网格,但没有对齐标题。
  • 在子图上使用 t 选项很有趣,下面将进一步解释。

这是一个半途而废的小例子(虽然我不知道如何将结果呈现到这个问题中):

\documentclass{article}

\usepackage{tikz}
\usepackage{subcaption}

\begin{document}

\begin{figure}[tb]
    \begin{subfigure}[t]{.5\textwidth}
        \centering
        \begin{tikzpicture}[x=0.5cm, y=0.5cm, baseline=(head.base)]
            \draw[step=1.0] (0,0) grid (10,1);
            \node (head) at (0,-0.5) {head};
            \node (b1_lower) at (1.5,0) {};
            \draw[->, bend right] (head) to (b1_lower);
        \end{tikzpicture}
        \caption{Caption A.}
    \end{subfigure}
    \begin{subfigure}[t]{.5\textwidth}
        \centering
        \begin{tikzpicture}[x=0.5cm, y=0.5cm, baseline=(head.base)]
            \draw[step=1.0] (0,0) grid (10,1);
            \node (head) at (0,-0.5) {head};
            \node (b4_lower) at (4.5,0) {};
            \draw[->, out=0, in=-90] (head) to (b4_lower);
            \node at (4,2.5) {tall figure};
            \node at (4,-2.5) {tall figure};
        \end{tikzpicture}
        \caption{Caption B.}
    \end{subfigure}
    \caption{Some other caption concerning the figure in its entirety.}
\end{figure}
\end{document}

如果我理解正确的话,子图的 t 选项使用基线对齐,这是可行的,尽管标题没有对齐。如果我改为 b,标题会对齐,但基线会被忽略。有趣的是,在后一种情况下,第二个图的大小会被考虑在内,因为标题在同一水平,所以我不明白为什么标题 A 不能稍微降低一点。

我的问题是:

  • 这两种对齐方式都可以单独使用,但是我该如何同时应用它们呢(例如,我希望网格处于同一级别,并且标题 A 与标题 B 处于同一级别)?
  • 如何解释为什么当前的方法没有产生我想要的行为?

答案1

子图基本上是小页面,只有一个基线用于图片和标题的组合。此解决方案使用表格代替。

注意:字幕喜欢位于 minipages 内。更准确地说,它们扩展为\textwidth并使用\par\leavevmode恢复了图形和标题之间的间隙。

\documentclass{article}

\usepackage{tikz}
\usepackage{subcaption}

\begin{document}

\begin{figure}[tb]
    \centering
    \begin{tabular}{cc}
        \begin{tikzpicture}[x=0.5cm, y=0.5cm, baseline=(head.base)]
            \draw[step=1.0] (0,0) grid (10,1);
            \node (head) at (0,-0.5) {head};
            \node (b1_lower) at (1.5,0) {};
            \draw[->, bend right] (head) to (b1_lower);
        \end{tikzpicture}
        &
        \begin{tikzpicture}[x=0.5cm, y=0.5cm, baseline=(head.base)]
            \draw[step=1.0] (0,0) grid (10,1);
            \node (head) at (0,-0.5) {head};
            \node (b4_lower) at (4.5,0) {};
            \draw[->, out=0, in=-90] (head) to (b4_lower);
            \node at (4,2.5) {tall figure};
            \node at (4,-2.5) {tall figure};
        \end{tikzpicture}
        \\
        \begin{minipage}{.45\textwidth}
          \leavevmode\subcaption{Caption A.}
        \end{minipage}&
        \begin{minipage}{.45\textwidth}
          \leavevmode\subcaption{Caption B.}
        \end{minipage}
    \end{tabular}
    \caption{Some other caption concerning the figure in its entirety.}
\end{figure}
\end{document}

演示


实际上,表格实际上并没有做任何有用的事情,因为宽度是由标题小页面设置的。

\documentclass{article}

\usepackage{tikz}
\usepackage{subcaption}

\begin{document}

\begin{figure}[tb]
    \centering
    \begin{tikzpicture}[x=0.5cm, y=0.5cm, baseline=(head.base)]
        \draw[step=1.0] (0,0) grid (10,1);
        \node (head) at (0,-0.5) {head};
        \node (b1_lower) at (1.5,0) {};
        \draw[->, bend right] (head) to (b1_lower);
    \end{tikzpicture}\hfil
    \begin{tikzpicture}[x=0.5cm, y=0.5cm, baseline=(head.base)]
        \draw[step=1.0] (0,0) grid (10,1);
        \node (head) at (0,-0.5) {head};
        \node (b4_lower) at (4.5,0) {};
        \draw[->, out=0, in=-90] (head) to (b4_lower);
        \node at (4,2.5) {tall figure};
        \node at (4,-2.5) {tall figure};
    \end{tikzpicture}\par
    \begin{minipage}{.45\textwidth}
      \leavevmode\subcaption{Caption A.}
    \end{minipage}\hfil
    \begin{minipage}{.45\textwidth}
      \leavevmode\subcaption{Caption B.}
    \end{minipage}
    \caption{Some other caption concerning the figure in its entirety.}
\end{figure}
\end{document}

答案2

明确定义两张图片中的边界框,使其足够大,以使其包含两张图片中的所有图片元素。例如,如果您添加以下行

\draw[draw=none, use as bounding box] (-0.5,-3.5) rectangle (10,2.5);

在这两张图片中,你得到

在此处输入图片描述

这个数字很重要,-3.5因为它定义了边界框向南延伸的距离。

相关内容