我想这是一个简单的问题,但我不知道如何在 TeX/LaTeX/tikz 中解决它。我想要做的是并行迭代多个列表,并对相应的值进行处理。其中一个列表应该作为参数传递给命令。
\documentclass[xcolor=pdftex]{article} %
\usepackage{pgffor}
\newcommand{\test}[1]{%
\def\x{{1,2,3,4,5,6}}%
\foreach \i in {0,...,5}{%
% in loop use something like \x[\i], #1[\i] etc
}
}
\begin{document}
\test{{a,b,c,d,e,f}}
\end{document}
答案1
答案2
使用foreach
,您可以同时对多个变量进行迭代。这是手册第 1002 页中给出的示例。
\documentclass[border=5mm,tikz]{standalone}
\begin{document}
\begin{tikzpicture}[line cap=round,line width=3pt]
\filldraw [fill=yellow!80!black] (0,0) circle (2cm);
\foreach \angle / \label in
{0/3, 30/2, 60/1, 90/12, 120/11, 150/10, 180/9,
210/8, 240/7, 270/6, 300/5, 330/4}
{
\draw[line width=1pt] (\angle:1.8cm) -- (\angle:2cm);
\draw (\angle:1.4cm) node{\textsf{\label}};
}
\end{tikzpicture}%
\end{document}
答案3
你的方法有效。你只需要用 括住字符串即可"
。
\documentclass[xcolor=pdftex]{article} %
\usepackage{pgffor}
\newcommand{\test}[1]{%
\def\x{{1,2,3,4,5,6}}%
\foreach \i in {0,...,5}{%
\pgfmathsetmacro{\entrynum}{\x[\i]}%
\pgfmathsetmacro{\entry}{#1[\i]}%
entry \entrynum\space of the argument of \texttt{\textbackslash test} is \entry\par
% in loop use something like \x[\i], #1[\i] etc
}
}
\begin{document}
\test{{"a","b","c","d","e","f"}}
\end{document}
当然,您可以定义一个助手程序,将引号括在条目周围。
\documentclass[xcolor=pdftex]{article} %
\usepackage{pgffor}
\makeatletter
\newcommand{\WrapQuotes}[2]{%
\def\pgf@temputila{0}%
\pgfutil@for\tikz@temp:=#1\do{%
\ifnum\pgf@temputila=1\relax
\edef#2{#2,"\tikz@temp"}%
\else
\edef#2{"\tikz@temp"}%
\def\pgf@temputila{1}%
\fi%
}}%
\makeatother
\newcommand{\test}[1]{%
\def\x{1,2,3,4,5,6}%
\WrapQuotes{#1}{\tmplst}%
\foreach \i in {0,...,5}{%
\pgfmathsetmacro{\entrynum}{{\x}[\i]}%
\pgfmathsetmacro{\entry}{{\tmplst}[\i]}%
entry \entrynum\space of the argument of \texttt{\textbackslash test} is \entry\par
% in loop use something like \x[\i], #1[\i] etc
}
}
\begin{document}
\test{{a,b,c,d,e,f}}
\end{document}
显然,这里展示的所有实际应用都不太令人兴奋。我将这个问题解释为询问如何访问i
一般事物列表中的第 th 个元素的问题。