我使用坐标\usepackage{tikz}
来绘制一些东西xyz
。我有一堆坐标,(xyt)
例如 (000) (001) (020)...(001)(011) 等,它们由以下方式创建:
\coordinate (ijk) at (i,k,j);
例如
\coordinate (001) at (0,1,0);
我想写一个循环来绘制类似的东西:
\draw (110)--(000)--(011)--(020);
\draw (111)--(001)--(012)--(021);
\draw (112)--(002)--(013)--(022);
etc.
本质上我想要做的是(用python语言):
for i in range(9):
j=i+1
\draw (11i) -- (00i) -- (01j) -- (02i);
我尝试过:
\foreach \time in {0,1,2,3,4,5,6,7,8,9}{
\draw (11\time) -- (00\time) -- (01{\time+1}) -- (02\time);
}
但是,Tikz 识别{\time+1}
为{1+1},{2+1},...
而不是2,3,...
,而(00\time)
不会造成任何问题。
任何帮助都值得感激,谢谢!
答案1
foreach 循环的语法隐式地增加 1,因此没有必要列出从0
到 的所有整数9
,只需写入{0,...,9}
。
\foreach \x in {0,...,9}{ };
在循环中计算下一个整数\time+1
,由于坐标从(000)
到 ,(999)
因此必须限制列表,列表必须从 到0
。8
因为否则我们会得到9+1=10
,从而产生不存在的坐标(0110)
。
\foreach \time [evaluate=\time as \suivant using int(\time+1)]in {0,...,8}
\draw (11\time) -- (00\time) -- (01\suivant) -- (02\time);
我不知道这是否是您想要实现的结果。我尝试通过粘贴您问题中的小段代码来理解。我希望这对您来说很方便,否则请说明您的问题。
\documentclass[tikz,border=5mm]{standalone}
\begin{document}
\begin{tikzpicture}[]
\foreach \x in {0,...,9}
\foreach \y in {0,...,9}
\foreach \z in {0,...,9}
\coordinate (\x\y\z) at (\x,\y,\z);
\foreach \time [evaluate=\time as \suivant using int(\time+1)]in {0,...,8}
\draw (11\time) -- (00\time) -- (01\suivant) -- (02\time);
\end{tikzpicture}
\end{document}
使用 www.DeepL.com/Translator 翻译
答案2
好的,找到了一个简单的解决方法;
事实证明我只需要使用
\foreach \time in {0,1,2,3,4,5,6,7,8,9}{
\draw (1,\time,1) -- (0,\time,0) -- (0,\time+1,1) -- (0,\time,2);
}
反而...