看完之后这个帖子,我正在尝试制作一个命令来创建一个具有两个输入的 TikZ 命令,如下所示:
\documentclass[10pt,a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\centering
\newcommand{\mitsubishi}[2]{
% #1 = radius
% #2 = position x,y
\pgfmathparse{2.966/7}
\pgfmathparse{#1*\pgfmathresult}
\filldraw (#2) circle(#1 cm); % plate
\foreach \angle in {0,120,240}{
\filldraw[white,rotate=\angle] (#2)--++(60:\pgfmathresult)--++(120:\pgfmathresult)--++(-120:\pgfmathresult)--cycle;
}
}
\begin{tikzpicture}
\mitsubishi{2}{0,0}
\end{tikzpicture}
\end{document}
\pgfmathresult
但是我对命令中的命令有疑问\filldraw
。
为什么?
答案1
将\pgfmathresult
被绘图命令覆盖。您必须将其保存起来:
\pgfmathparse{2.966/7}
\let\myresult\pgfmathresult
\pgfmathparse{#1*\myresult}
\let\myresult\pgfmathresult
\filldraw (#2) circle(#1 cm); % plate
\foreach \angle in {0,120,240}{
\filldraw[white,rotate=\angle] (#2)--++(60:\myresult)--++(120:\myresult)--++(-120:\myresult)--cycle;
}
}
答案2
如果我放置一个不同的中心点,比如说 (1,1),就会出现问题,因为旋转不是围绕该点进行,而是围绕 (0,0) 进行,所以我建议使用这个最终解决方案:
\documentclass[10pt,a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\newcommand{\mitsubishi}[2]{
% #1 = radius
% #2 = position x,y
\pgfmathsetmacro{\mymathresult}{#1*2.966/7}
\filldraw (#2) circle(#1 cm);
\foreach \angle in {0,120,240}{
\filldraw[white] (#2)--++(60+\angle:\mymathresult)
--++(120+\angle:\mymathresult)
--++(240+\angle:\mymathresult)
--cycle;
}
}
\begin{tikzpicture}
\draw[help lines,step=.5cm](0,0)grid(4,4);
\draw[<->] (5,0)--(0,0)--(0,5);
\foreach \x in {1,2,3,4}{
\foreach \y in {1,2,3,4}{
\mitsubishi{.25}{\x,\y}
}
}
\end{tikzpicture}
\end{document}
感谢大家让我取得这个成绩!!!
再见
答案3
您还可以使用\pgfmathsetmacro
:
\documentclass[10pt,a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\newcommand{\mitsubishi}[2]{
% #1 = radius
% #2 = position x,y
\pgfmathsetmacro{\mymathresult}{#1*2.966/7}
\filldraw (#2) circle(#1 cm);
\foreach \angle in {0,120,240}{
\filldraw[white,rotate=\angle] (#2)--++(60:\mymathresult)--++(120:\mymathresult)--++(-120:\mymathresult)--cycle;
}
}
\begin{tikzpicture}
\mitsubishi{4}{0,0}
\end{tikzpicture}
\end{document}