在这个例子中,我尝试定义一个数组数组\vartypes
\documentclass{article}
\usepackage{tikz}
\begin{document}
\def\varA{A, B}
\def\varB{C, D, E}
\def\vartypes{\varA, \varB}
\foreach \type in \vartypes{
\foreach \var in \type{
\foreach \prefix in {var1, var2}{
\prefix \var
}
}
\\
}
\end{document}
迭代的输出\foreach
是
而我期望
我怎样才能定义\vartypes
为数组的数组?
答案1
以下提供了预期的输出,除了一些虚假空格:
\documentclass{article}
\usepackage{pgffor}
\begin{document}
\def\varA{A, B}
\def\varB{C, D, E}
\def\vartypes{\varA, \varB}
\foreach \type in \vartypes{
\edef\x{\noexpand\foreach \noexpand\var in {\type}}%
\x {
\foreach \prefix in {var1, var2}{
\prefix{} \var
}
}
\\
}
\end{document}
我们不假设它\type
会扩大,而是创造\x
扩展版的仅有的 \type
然后\foreach \var in {\type}
将其用作其后组的前缀。
答案2
1 级循环采用\type
取值\varA
和来执行\varB
。
第一次迭代的 2 级循环针对单个项目进行,即\varA
,因为\type
仅展开一次。
更准确地说,\foreach
确实如此\def\type{\varA}
。
\documentclass{article}
\usepackage{tikz}
\def\eforeach#1in #2{
\begingroup
\edef\x{%
\endgroup\noexpand\foreach\noexpand#1 in
{\unexpanded\expandafter\expandafter\expandafter{#2}}}%
\x
}
\begin{document}
\def\varA{A, B}
\def\varB{C, D, E}
\def\vartypes{\varA, \varB}
\foreach \type in \vartypes{
\eforeach \var in \type{
\foreach \prefix in {var1, var2}{
\prefix \var
}
}
\\
}
\end{document}
更简单地说:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\def\vartypes{{A,B},{C,D,E}}
\foreach \type in \vartypes{
\foreach \var in \type{
\foreach \prefix in {var1, var2}{
\prefix \var
}
}
\\
}
\end{document}