例如,我有一组多维值:{{red,1,12pt},{blue,3,10pt},{green,2,15pt}}
。\psforeach
我想用 3 个变量迭代这些值:\clr
、\x
和\size
。
是否有一个技巧可以迭代一组多维值\psforeach
?
编辑:通过组合现有的答案,得到以下结果。
\documentclass{article}
\usepackage{pstricks-add}
\usepackage[active,tightpage]{preview}
\PreviewBorder=12pt
\PreviewEnvironment{pspicture}
\def\getValues#1,#2,#3\relax{\def\clr{#1}\def\x{#2}\def\size{#3}}
\makeatletter
\begin{document}
\begin{pspicture}[showgrid=top](-3,-3)(3,3)
\@for\abc:={{red,1,12pt},{blue,3,10pt},{green,2,15pt}}% this percent sign is needed!
\do{\expandafter\getValues\abc\relax
\pscircle[linecolor=\clr,linewidth=\size](0,0){\x}
% other graphics objects go here!
}
\end{pspicture}
\end{document}
答案1
只有第一个参数必须放在双括号中:
\documentclass{minimal}
\usepackage{pstricks}
\def\temp#1{\expandafter\tempB#1\relax}
\def\tempB#1,#2,#3\relax{Colour: #1; X: #2; Size: #3 \par}
\begin{document}
\psforeach{\abc}{{{red,1,12pt}},{blue,3,10pt},{green,2,15pt}}{%
\expandafter\temp\expandafter{\abc}}
\end{document}
无需加载任何包也一样:
\documentclass{minimal}
\def\tempB#1,#2,#3\relax{Colour: #1; X: #2; Size: #3 \par}
\begin{document}
\makeatletter
\@for\abc:={{red,1,12pt},{blue,3,10pt},{green,2,15pt}}%
\do{\expandafter\tempB\abc\relax}
\end{document}
答案2
如何使用pgffor
:
\documentclass{article}
\usepackage{pgffor}
\begin{document}
\def\tempa#1,#2,#3\relax{\def\clr{#1}\def\x{#2}\def\size{#3}}
\foreach \abc in {{red,1,12pt},{blue,3,10pt},{green,2,15pt}}{
\expandafter\tempa\abc\relax%
Colour: \clr; X: \x; Size: \size\par
}%
\end{document}
中的每个元素\foreach
都\abc
被扩展并传递给\tempa
,从而将其分解为\clr
、\x
、三个部分\size
。
答案3
该宏\cptdofunclist
的最后一个参数不需要任何分隔符\do
。它可以看到。
\documentclass{article}
\usepackage{catoptions}
\usepackage{graphicx}
\usepackage{xcolor}
\begin{document}
\def\do#1,#2,#3{Colour: #1; X: #2; Size: #3\par}
\cptdofunclist[;]{red, 1, 12pt; blue, 3, 10pt; green, 2, 15pt}
\par\bigskip
\def\do#1,#2,#3,#4{\scalebox{#3}[#4]{\textcolor{#1}{#2}}}
\cptdofunclist[;]{red, Red, 2, 3; blue, Blue, 4, 5; green, Green, 6, 7}
\end{document}
或者,如果你坚持使用前列腺素:
\documentclass{article}
\usepackage{pgffor}
\begin{document}
\def\tempa(#1,#2,#3){Colour: #1; X: #2; Size: #3\par}
\foreach \abc in {(red,1,12pt),(blue,3,10pt),(green,2,15pt)}{%
\expandafter\tempa\abc\relax
}
\end{document}