![TikZ:\foreach 在括号参数中](https://linux22.com/image/404650/TikZ%EF%BC%9A%5Cforeach%20%E5%9C%A8%E6%8B%AC%E5%8F%B7%E5%8F%82%E6%95%B0%E4%B8%AD.png)
我正在尝试使用 Ti 在基本方向上有效地绘制两个同心椭圆,其中四个点间距相等钾Z. 目前,我有以下代码,它可以生成以下图像。
\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{decorations.markings}
\begin{document}
\begin{tikzpicture}
\foreach \s in {1,0.3} {
\draw [blue,thick,scale=\s,decoration={markings,
mark=at position 0 with {\fill circle (2pt);},
mark=at position 0.25 with {\fill circle (2pt);},
mark=at position 0.5 with {\fill circle (2pt);},
mark=at position 0.75 with {\fill circle (2pt);}
},postaction={decorate}] ellipse (2cm and 1.4cm);
}
\end{tikzpicture}
\end{document}
我发现\foreach
可以使用循环来减少麻烦并同时绘制两个椭圆。但是,我想知道是否可以对这四个mark
参数做类似的事情,因为它们之间唯一改变的是值position
。
我已尝试\foreach
如下方法,但似乎不起作用。
\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{decorations.markings}
\begin{document}
\begin{tikzpicture}
\foreach \s in {1,0.3} {
\draw [blue,thick,scale=\s,decoration={markings,
\foreach \x in {0,0.25,0.5,0.75} {
mark=at position \x with {\fill circle (2pt);}
}
},postaction={decorate}] ellipse (2cm and 1.4cm);
}
\end{tikzpicture}
\end{document}
有没有办法让这样的事情发生?
答案1
绝对如此。这就是关键/.list
所在。您只需定义一个以位置为参数的样式(cmark
如下例所示),然后将其应用于带有的位置列表cmark/.list={0,0.25,0.5,0.75}
。它理解所有\foreach
可以理解的内容,因此cmark/.list={0,0.25,...,0.75}
也会起作用(但在这种情况下,对我们并没有太大帮助)。
\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{decorations.markings}
\begin{document}
\begin{tikzpicture}[cmark/.style={decoration={markings,
mark=at position #1 with {\fill circle (2pt);}
},postaction={decorate}}]
\foreach \s in {1,0.3} {
\draw [blue,thick,scale=\s,cmark/.list={0,0.25,0.5,0.75}] ellipse (2cm and 1.4cm);
}
\end{tikzpicture}
\end{document}
答案2
无需重新发明轮子,标记库允许您使用 3.1.4b 手册第 639 页上描述的语法进行本地循环,我引用:
/pgf/decoration/mark=betweenpositions < 起始位置 > 和 < 结束位置 > 与 < 代码 > 一起进行步骤(无默认值)
\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{decorations.markings}
\begin{document}
\begin{tikzpicture}
\foreach \s in {1,0.3} {
\draw [blue,thick,scale=\s,decoration={markings,
mark= between positions 0 and .9 step 0.25
with {\fill circle (2pt);}
},postaction={decorate}]
ellipse (2cm and 1.4cm);
}
\end{tikzpicture}
\end{document}
答案3
为了好玩,pstricks
解决方案是使用以下pst-eucl
软件包:
\documentclass[svgnames, border=6pt]{standalone}
\usepackage{pst-eucl}
\usepackage{auto-pst-pdf} %% To compile with pdflatex --enablewrite18 (MiKTeX) or pdflatex --shell-escape (TeX Live, MacTeX)
\begin{document}
\psset{linecolor=RoyalBlue, linewidth=1.2pt, plotstyle=curve}
\begin{pspicture}(-5,-3.5)(5,3.5)
\multido{\na=2.4+2.1,\nb=1.6+1.4}{2}{\pstEllipse(0,0)(\na,\nb)%
\multido{\i=0+90}{4}{\pstEllipseRotNode[PointName=none, RotAngle=\i](0,0)(\na,\nb){A\i}}%
}%
\end{pspicture}
\end{document}