TikZ 节点矩阵的中心

TikZ 节点矩阵的中心

我在 TikZ 中定义了一个表格状的节点矩阵(带边框),但是,尽管为所有节点设置了anchor=centeralign=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}

此代码产生:

在此处输入图片描述

相关内容