我正在尝试使用下面的代码渲染一个石头网格,但是当我移除中的石头时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}