我正在尝试绘制一个带有倾斜网格的图表,有点像给出的 3D 效果http://www.texample.net/tikz/examples/3d-graph-model/
理想情况下,我想要一个宏,slantedgrid
例如
\draw (10,12) \slantedgrid (7,5);
或者甚至可能只是
\slantedgrid{10}{12}{7}{5}
将绘制一个网格,其中所有垂直线均倾斜 45 度,左下角位于 (10,12),并有 5+1 条水平线和 7+1 条垂直(倾斜)线。
我第一次(也是目前唯一一次)尝试是用 LaTeX “newcommand” 将其定义为
\newcommand{\slantedgrid}[4]{%
\foreach \x in {#1,#1+1,...,#1+#3} \draw (\x,#2) -- ++(#4,#4);%
\foreach \y in {#2,#2+1,...,#2+#4} \draw (\y-#4,\y) -- ++(#3,0);%
}
slantedgrid{10}{12}{7}{5}
然而,当我进入环境时,所有这些都会产生大量错误 - “非法测量单位(插入pt)” tikzpicture
。
是否有任何简单的方法可以做这样的事情 - 特别是将参数从 a 传递newcommand
到 TikZ foreach
?
答案1
如果您仍想传递计算参数,则foreach
可以使用pgfmathtruncatemacro
:
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\newcommand{\slantedgrid}[4]{%
\pgfmathtruncatemacro{\result}{#1+#3}
\foreach \x in {#1,...,\result} \draw (\x,#2) -- ++(#4,#4);%
\pgfmathtruncatemacro{\result}{#2+#4}
\foreach \y in {#2,...,\result} \draw (#1+\y-#2,\y) -- ++(#3,0);%
}
\slantedgrid{10}{12}{7}{5}
\end{tikzpicture}
\end{document}
附言:我foreach
根据你所想的内容进行了第二次修改。