节点内容的垂直对齐

节点内容的垂直对齐

在 TikZ 中,我知道控制节点形状和文本对齐的相关属性是:

  • minimum widthminimum height(外形)
  • AFAIUbaseline用于对齐节点本身,而不是其内容?
  • align(部分17.4.3
  • text widthtext height(节17.4.4),尽管文档中提到:

除特殊情况外,我建议使用最小尺寸而不是文本高度。

我也认为这个帖子给出了如何在文本中使用这些属性的很好的例子。


但是如果我尝试对齐的内容是不是文本?下面的例子使用了minipage,但如果这不会完全改变答案,我会假设这可能是tabular,或includegraphics,或任何其他非文本内容。

如您所见,内容的对齐方式是垂直居中。假设我已经指定minimum height/width,我该如何指定与节点顶部或底部的对齐?

\documentclass[a4paper]{article}
\usepackage{calc}
\usepackage{tikz}

\newlength{\boxH} \setlength{\boxH}{2cm}
\newlength{\boxW} \setlength{\boxW}{5cm}
\newlength{\boxM} \setlength{\boxM}{2mm}

\begin{document}
\begin{tikzpicture}
    \node[
        shape=rectangle, 
        fill=red, 
        inner sep=\boxM, 
        minimum width=\boxW, 
        minimum height=\boxH, 
        anchor=north west
    ] {%
        \begin{minipage}{\boxW-2\boxM}%
        One line
        \end{minipage}%
    };
    \node[
        shape=rectangle, 
        fill=blue, 
        xshift=\boxW+\boxM,
        inner sep=\boxM, 
        minimum width=\boxW, 
        minimum height=\boxH, 
        anchor=north west
    ] {%
        \begin{minipage}{\boxW-2\boxM}%
        Two\\ lines
        \end{minipage}%
    };
\end{tikzpicture}
\end{document}

示例图的输出

答案1

由于您已经在使用 minipages,因此您可以使用其对齐机制。例如,如果您希望红色框中的文本顶部对齐,请使用

\documentclass[a4paper]{article}
\usepackage{calc}
\usepackage{tikz}

\newlength{\boxH} \setlength{\boxH}{2cm}
\newlength{\boxW} \setlength{\boxW}{5cm}
\newlength{\boxM} \setlength{\boxM}{2mm}

\begin{document}
\begin{tikzpicture}
    \node[
        shape=rectangle, 
        fill=red, 
        inner sep=\boxM, 
        minimum width=\boxW, 
        minimum height=\boxH, 
        anchor=north west
    ] {%
        \begin{minipage}[t][\the\dimexpr\boxH-1.6em]{\boxW-2\boxM}%
        One line
        \end{minipage}%
    };
    \node[
        shape=rectangle, 
        fill=blue, 
        xshift=\boxW+\boxM,
        inner sep=\boxM, 
        minimum width=\boxW, 
        minimum height=\boxH, 
        anchor=north west
    ] {%
        \begin{minipage}{\boxW-2\boxM}%
        Two\\ lines
        \end{minipage}%
    };
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

由于节点的大小是固定的,并且您知道它足够大以包含文本,因此您可以使用label将文本放置在节点边框内,选择方便的anchor

\documentclass[a4paper]{article}
\usepackage{calc}
\usepackage{tikz}

\newlength{\boxH} \setlength{\boxH}{2cm}
\newlength{\boxW} \setlength{\boxW}{5cm}
\newlength{\boxM} \setlength{\boxM}{2mm}

\begin{document}
\begin{tikzpicture}
    \node[
        shape=rectangle, 
        fill=red, 
        inner sep=\boxM, 
        minimum width=\boxW, 
        minimum height=\boxH, 
        anchor=north west,
        label={[anchor=north west]north west:One line}
    ] {};
    \node[
        shape=rectangle, 
        fill=blue, 
        xshift=\boxW+\boxM,
        inner sep=\boxM, 
        minimum width=\boxW, 
        minimum height=\boxH, 
        anchor=north west,
        label={[anchor=south, align=left]south:{Two\\ longer lines}}
    ] {};
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

这个答案给出了另一种方法。

在此处输入图片描述

\documentclass[a4paper]{article}
\usepackage{calc}
\usepackage{tikz}

\newlength{\boxH} \setlength{\boxH}{2cm}
\newlength{\boxW} \setlength{\boxW}{5cm}
\newlength{\boxM} \setlength{\boxM}{2mm}

\begin{document}
\begin{tikzpicture}
    \node[
        shape=rectangle, 
        fill=red, 
        inner sep=\boxM, 
        minimum width=\boxW, 
        minimum height=\boxH, 
        anchor=north west,
        append after command={node[anchor=north west] at  (\tikzlastnode.north west) 
        {\begin{minipage}{\boxW-2\boxM}%
          One line
        \end{minipage}}},
    ] {};
    \node[
        shape=rectangle, 
        fill=blue, 
        xshift=\boxW+\boxM,
        inner sep=\boxM, 
        minimum width=\boxW, 
        minimum height=\boxH, 
        anchor=north west,
        append after command={
        node[anchor=south west] at  (\tikzlastnode.south west) 
        {\begin{minipage}{\boxW-2\boxM}%
          Two\\ lines
        \end{minipage}}},
    ] {};
\end{tikzpicture}
\end{document}

相关内容