![使用 Tikz 的等距网格](https://linux22.com/image/330652/%E4%BD%BF%E7%94%A8%20Tikz%20%E7%9A%84%E7%AD%89%E8%B7%9D%E7%BD%91%E6%A0%BC.png)
可以用 tikz 制作一个非常简单的方形网格:
\documentclass{article}
\usepackage[margin=.25in]{geometry}
\usepackage{tikz}
\pagestyle{empty}
\begin{document}
\centering
\tikz\draw [thin] (0,0) grid (20,26)
\end{document}
如何才能等距网格用 tikz?我发现一个与 PSTricks,但定制起来并不容易。如果可能的话,我希望找到一个不需要 PSTricks 的解决方案。
答案1
具有形状的示例kite
。命令绘制具有行和的\isogrid{rows}{cols}
等距网格。rows+1
cols+1
与纯线条相比,使用nodes
节点锚点可以帮助绘制网格。
\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{shapes}
\tikzset{
iso/.style={kite, draw, kite vertex angles=120, minimum size=1cm, outer sep=0pt}
}
\newcommand{\isogrid}[2]{
\foreach \i [count=\row from 0, remember=\row as \lastrow (initially 0)] in {0,...,#1}{
\foreach \j [count=\col from 0, remember=\col as \lastcol (initially 0)] in {0,...,#2}{
\ifnum\row=0
\ifnum\col=0
\node[iso] (\row-\col) {\row-\col};
\else
\node[iso, anchor=left vertex] (\row-\col) at (\row-\lastcol.right vertex) {\row-\col};
\fi
\else
\ifnum\col=0
\node[iso, anchor=upper vertex] (\row-\col) at (\lastrow-\col.lower vertex) {\row-\col};
\else
\node[iso, anchor=left vertex] (\row-\col) at (\row-\lastcol.right vertex) {\row-\col};
\fi
\fi
}
}
\draw (0-0.left vertex)--(#1-0.left vertex);
\foreach \i in {0,...,#2}{
\draw (0-\i.upper vertex)--(#1-\i.lower vertex);
\draw (0-\i.right vertex)--(#1-\i.right vertex);
}
}
\begin{document}
\begin{tikzpicture}
\isogrid{19}{9}
\begin{scope}[line width=2pt]
\draw (1-3.right vertex)--(3-5.right vertex)--(7-1.right vertex)--(5-0.left vertex)--cycle;
\draw (5-0.left vertex)--(13-0.left vertex)--(15-1.right vertex)--(7-1.right vertex);
\draw (3-5.right vertex)--(5-5.right vertex)--(7-7.right vertex)--(10-7.right vertex)--(11-8.right vertex)--(12-7.right vertex)--(13-8.right vertex)--(15-7.upper vertex)--(13-5.upper vertex)--(10-5.upper vertex)--(8-3.upper vertex)--(5-5.right vertex);
\draw (9-5.lower vertex)--(7-7.right vertex);
\draw (12-5.lower vertex)--(10-7.right vertex);
\draw (11-8.right vertex)--(16-8.right vertex)--(17-7.lower vertex)--(13-3.lower vertex)--(15-1.right vertex);
\draw (7-3.lower vertex)--(13-3.lower vertex);
\draw (14-7.lower vertex)--(17-7.lower vertex);
\draw[dashed] (13-0.left vertex)--(9-3.right vertex)--(1-3.right vertex);
\draw[dashed] (9-3.right vertex)--(14-8.right vertex)--(15-7.right vertex)--(16-8.right vertex);
\draw[dashed] (12-7.right vertex)--(15-7.right vertex);
\end{scope}
\end{tikzpicture}
\end{document}