我需要一些帮助来在 LaTeX 和 TikZ 中制作条件语句。在这个 M(non-)WE 中,我希望第一个、第三个和第五个点更大:
\documentclass[tikz]{standalone}
\usepackage{tikz}
\begin{document}
\def\bigdot{5pt}
\def\littledot{1pt}
\begin{centering}
\begin{tikzpicture}
\foreach \x in {0,...,5}{
\draw (\x,0) circle ({int(\x/2)==0?\bigdot:\littledot});
}
\end{tikzpicture}
\end{centering}
\end{document}
我不明白什么?感谢您的帮助或建议。
答案1
欢迎光临!您在找什么iseven
?
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\def\bigdot{5pt}
\def\littledot{1pt}
\foreach \x in {0,...,5}{
\draw (\x,0) circle [radius={iseven(\x)?\bigdot:\littledot}];
}
\end{tikzpicture}
\end{document}
在您的代码中,您要求将 为零 的圆变大。这些是和int(\x/2)
处的圆,这就是您得到的结果。但是,如果您想让列表中的“第一个、第三个和第五个点更大”,那么您可以将 为偶数 的点变大。\x=0
\x=1
{0,...,5}
\x
附录:至于不同的 评论中提出的问题,你可以使用mod
,作为AlexG 建议或Mod
,它总是返回非负值并帮助您避免混淆(至少我偶尔会因为使用 而浪费大量时间mod
)。这两个版本都在 pgfmanual v3.1.5 的第 1033 页中进行了描述。如上所述,我更喜欢非弃用语法
circle[radius=<radius>]
取代旧的、不推荐使用的语法
circle(<radius>)
因此,对评论中的问题的建议可能是
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\path (0,0) node[circle,inner sep=5cm] (c){};
\def\bigdot{5pt}
\def\littledot{1pt}
\foreach \x in {0,...,359}{
\draw (c.\x) circle [radius={Mod(\x,5)==0?\bigdot:\littledot}];
}
\end{tikzpicture}
\end{document}
还要注意,如果你使用,\documentclass[tikz]{standalone}
那么tikz
它会自动加载,所以\usepackage{tikz}
没有必要。另外,我一般不太喜欢\def
s,但如果你想使用它们,可以在本地使用它们,即在 内tikzpicture
,如上所述。但我个人会使用类似
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[declare function={rsmall=1;rbig=5;}]
\path (0,0) node[circle,inner sep=5cm] (c){};
\foreach \x in {0,...,359}{
\draw (c.\x) circle [radius={(Mod(\x,5)==0?rbig:rsmall)*1pt}];
}
\end{tikzpicture}
\end{document}