是否有一个技巧可以用 \psforeach 来迭代一组多维值?

是否有一个技巧可以用 \psforeach 来迭代一组多维值?

例如,我有一组多维值:{{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}

相关内容