将节点矩阵与网格对齐

将节点矩阵与网格对齐

我正在尝试使用下面的代码渲染一个石头网格,但是当我移除中的石头时m-3-1,它上方和右侧的石头(特别是m-1-5)将偏离中心:

对齐错位

\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{matrix,shapes.geometric}
\newcommand\stone[0]{|[circle, shading=ball, ball color=black!80!white, minimum size=.8cm]|} % https://tex.stackexchange.com/a/184068/45824
\begin{document}
\begin{tikzpicture}
\matrix (m) [matrix of nodes,
             anchor=south west,
             column sep={1cm,between origins},
             row sep={1cm,between origins},
             nodes in empty cells,
            ]
{
        &        &        &        & \stone \\
        &        &        &        &        \\
 \stone &        &        &        &        \\
};
\draw[step=1cm,color=gray] (0,0) grid (5,3);
\draw[thick,red,->] (m-1-1) -> (m-1-5);
\draw[thick,red,->] (m-1-5) -> (m-3-5);
\end{tikzpicture}
\end{document}

我如何确保所有石头都正确对齐?

答案1

问题原因

首先,你的“工作”代码甚至没有输出预期的图表:圆圈还没有对齐

在此处输入图片描述

draw在“不工作”代码中的每个节点上添加选项可以让我们

在此处输入图片描述

这可以解释这个问题:你的节点对齐正确,但矩阵本身不在正确的位置。

解决方案

  • 使用\tikzset
  • 添加选项inner sep
  • 使用minimum size节点选项
  • 使用锚点center作为箭头(更多内容见下文)

\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{matrix,shapes.geometric}
\tikzset{stone/.style={circle,shading=ball,ball color=black!80!white,minimum size=.8cm}}
\newcommand\stone{|[stone]|} % https://tex.stackexchange.com/a/184068/45824
\begin{document}
\begin{tikzpicture}
\matrix (m) [matrix of nodes,
             anchor=south west,
             column sep={1cm,between origins},
             row sep={1cm,between origins},
             nodes in empty cells,
             nodes={minimum size=1cm},
             inner sep=0pt
            ]
{
        &        &        &        & \stone \\
        &        &        &        &        \\
        &        &        &        &        \\
};
\draw[step=1cm,color=gray] (0,0) grid (5,3);
\draw[thick,red,->] (m-1-1.center) -> (m-1-5);
\draw[thick,red,->] (m-1-5) -> (m-3-5.center);
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容