有没有办法使用 TikZ\foreach
命令进行带参数的操作?
例如我希望能够写(只是一个愚蠢的例子):
\newcommand{\foo}[9]{
\foreach \x in{1,2,...,9}{
\draw(0,#\x)--++(1,1);
}
}
哪里#\x
意味着X我用来定义的命令的第个参数\newcommand
。
这应该很有用,因为我正在编写依赖于可以任意设置的全局值的宏。例如,它\def\N{9}
会出现在序言中,我会写,但由于我事先不知道会有多少参数,所以除非我写上面的绘制命令,newcommand{\bar}[\N]{...}
否则我无法定义任何东西。\foreach \x in{1,2,...,\N}
我真正喜欢做的事:
我想要一个命令来绘制给定的一些坐标。所以我想\foo{#1}{#2}{#3}
扩展为类似的东西;
\draw plot coordinates {(360/\N*1:#1) (360/\N*2:#2) (360/\N*3:#3) ... (360/\N*\N:#N};
但我不知道这是否可能。
答案1
我不太明白你到底想画什么,但也许这会有所帮助:
\documentclass{minimal}
\usepackage{tikz}
\makeatletter
\def\foo#1{\foo@i#1,,\@nil}%
\def\foo@i#1,#2,#3\@nil{%
\draw(0,#1)--++(1,1);
\ifx\relax#2\relax\else\foo@i#2,#3\@nil\fi}
\makeatother
\begin{document}
\begin{tikzpicture}
\foo{1,2,3,4,5,6,7,8,9}
\end{tikzpicture}
\begin{tikzpicture}
\foo{1,2,3,4,5,6}
\end{tikzpicture}
\end{document}
答案2
(大幅修改了答案。) 以下应该读取并绘制任意多个参数,一次一个,前提是\N
已定义并存储一个正整数。
\制作字母 \newcount\c@foo \新命令\foo{% \c@foo=1\放松 \@foo} \newcommand\@foo[1]{% \绘制(0,#1)--++(1,1);% \advance\c@foo 1\relax% \ifnum\c@foo>\N% \让\@tempa\放松 \别的 \让\@tempa\@foo \fi \@tempa} \makeatother