我在 TikZ 中定义了一个表格状的节点矩阵(带边框),但是,尽管为所有节点设置了anchor=center
和align=center
,文本仍然向左移动。我也尝试了anchor=base
,但这并没有改变任何东西(除了我的文档中的节点略有错位,尽管在最小示例中没有)
最小示例:
\documentclass[tikz]{standalone}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix [
matrix of nodes,
row sep=-\pgflinewidth,
column sep=-\pgflinewidth,
nodes={
rectangle, draw=black, minimum height=1.25em, minimum width=1.25em,
anchor=center, align=center,
inner sep=0pt, outer sep=0pt
}
] {
0 & 3 & 6 & 9 & 12 & 15 & 18 & 21 \\
};
\end{tikzpicture}
\end{document}
输出:
答案1
align=center
没有任何内容text width
是问题所在。将其注释掉,所有文本将居中(后面有或没有空格)或添加一个,text width
文本可以居中。
\documentclass[tikz]{standalone}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix [
matrix of nodes,
row sep=-\pgflinewidth,
column sep=-\pgflinewidth,
nodes={
rectangle, draw=black, minimum height=1.25em, minimum width=1.25em,
anchor=center, %align=center, %text width=2em,
inner sep=0pt, outer sep=0pt
}
] {
0 & 3 & 6 & 9 & 12 & 15 & 18 & 21 \\
};
\end{tikzpicture}
\end{document}
答案2
我不确定您在实际应用中还需要什么其他花哨的功能,但matrix of nodes
您可能不想使用 for,而是要考虑使用带有嵌入式 for 循环的宏:
\documentclass[tikz, border=4mm]{standalone}
\newcommand\myarray[1]{%
\begin{tikzpicture}
\foreach \x [count=\c] in {#1} {
\draw[thick](\c-0.5,0-0.5) rectangle ++ (1,1);
\draw(\c,0)node{\x};
}
\end{tikzpicture}%
}
\begin{document}
\myarray{0, 3, 6, 9, 12, 15, 18, 21}
\end{document}
得出的结果为:
这种方法的主要好处是它大大简化了代码,特别是当您有大量这样的数组时。当然,您可以随意调整阴影、颜色、字体大小、框大小等。
编辑
受 OP 评论的启发,这里有一个 2D 版本:
\documentclass[tikz, border=4mm]{standalone}
\newcommand\myarray[1]{%
\begin{tikzpicture}
\foreach \row [count=\r] in {#1} {
\foreach \x [count=\c] in \row {
\draw[thick](\c-0.5,-\r-0.5) rectangle ++ (1,1);
\draw(\c,-\r)node{\x};
}
}
\end{tikzpicture}%
}
\begin{document}
\myarray{{0,3,6,9,12,15,18,21},{2,4,7,11},{4,5,6,7}}
\end{document}
此代码产生: