在 TikZ 中,我知道控制节点形状和文本对齐的相关属性是:
minimum width
和minimum height
(外形)- AFAIU
baseline
用于对齐节点本身,而不是其内容? align
(部分17.4.3)text width
和text 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}