对单独列表的元素进行并行迭代

对单独列表的元素进行并行迭代

我想这是一个简单的问题,但我不知道如何在 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

\documentclass[xcolor=pdftex]{article} %

\usepackage{pgffor,listofitems}

\newcommand{\test}[1]{%
  \readlist\tmp{#1}%
  \readlist\x{1,2,3,4,5,6}%
  \foreach \i in {1,...,6}{%
    Element \i{} of x is \x[\i]
    and of \#1, it is \tmp[\i]\par
  }
}

\begin{document}
  \test{a,b,c,d,e,f}
\end{document}

在此处输入图片描述

答案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 个元素的问题。

相关内容