下面的例子将线宽设置为 0,但它仍然会在单元格周围生成一个小边框。
\documentclass[tikz, margin=2pt]{standalone}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\def\d{0pt}
\matrix (m) [matrix of nodes,
nodes={minimum size=0.5cm, draw, outer sep=0pt,inner sep=0,line width=\d},
nodes in empty cells,column sep=-\d, row sep=-\d,
]
{
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9 \\
};
\end{tikzpicture}
\end{document}
- 如果线宽为 0,则边框应该为空。
- 输出看起来不像正方形而像矩形,高度比宽度稍长。
答案1
您可以检查是否
\d
为 0,如果为 0,则不要传递绘制选项。请注意 if 语句周围的花括号,以隐藏等号,使算法无法区分键和值。\documentclass[tikz, margin=2pt]{standalone} \usetikzlibrary{matrix} \begin{document} \begin{tikzpicture} \def\d{0pt} \matrix (m) [matrix of nodes, nodes={minimum size=0.5cm, {\ifdim\d=0pt \else draw\fi}, outer sep=0pt,inner sep=0,line width=\d}, nodes in empty cells,column sep=-\d, row sep=-\d, ] { 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \\ }; \end{tikzpicture} \end{document}
为了提高可读性,您可以预先执行 if 语句并相应地定义命令:
\documentclass[tikz, margin=2pt]{standalone} \usetikzlibrary{matrix} \begin{document} \begin{tikzpicture} \def\d{0pt} \ifdim\d=0pt \def\DrawFlag{}% \else \def\DrawFlag{draw}% \fi \matrix (m) [matrix of nodes, nodes={minimum size=0.5cm, \DrawFlag, outer sep=0pt,inner sep=0,line width=\d}, nodes in empty cells,column sep=-\d, row sep=-\d, ] { 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \\ }; \end{tikzpicture} \end{document}
也许您的屏幕稍微扭曲了它们,或者这是一种视觉错觉。它们是正方形。我测量了它们,在您提供的屏幕截图中,它们高 360 像素,宽 360 像素。
答案2
percuse
已经给了你解决方案,不要draw
边界:
\documentclass[tikz, margin=2pt]{standalone}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\def\d{0pt}
\matrix (m) [matrix of nodes,
nodes={minimum size=0.5cm,
draw=none, %<-------------
outer sep=0pt,
inner sep=0,
line width=\d},
nodes in empty cells,column sep=-\d, row sep=-\d,
]
{
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9 \\
};
\end{tikzpicture}
\end{document}