在这答案是,有一个循环结构被使用,称为loop over item
。我正在寻找它的文档以及它在哪个文件中定义的参考。
\ifdate{workday} {
\tikzset{every workday/.try, vacation name=,
loop over item/.code args={##1/##2/##3}{%
\ifdate{between=##1 and ##2}{%
\tikzset{every vacation/.try, vacation name/.expanded=##3}%
}{}},
loop over item/.list/.expanded=\vacations}%
}{}
我已经在 tikz 文档中搜索了它,并在我的 texlive 目录中搜索了它,但没有找到它。
答案1
我在这里要说的所有内容在 pgfmanual 的第 82 节中有更好的解释。loop over item
本身,尽管其名称暗示,不是一个循环,而“只是”一个代码。然而,由于密钥.list
,它变成了一个循环。为了更清楚地看到这一点,请考虑 MWE
\documentclass{article}
\usepackage{pgfkeys,pgffor} % .list requires pgffor
\begin{document}
\pgfkeys{/student/.cd, % switch to student
hello/.code={hello #1!}}
\pgfkeys{/student/hello=world}
\pgfkeys{/student/hello/.list={world,duck,koala,marmot}}
\end{document}
这里,hello
只是一段打印 的简单代码hello <arg>!
,其中arg
是参数。(如果定义里面有定义,则需要增加 的数量#
,如下所述这里#
。这就是为什么的定义中有两个的原因\ifdate
。)
现在重要的是,.list
关键是使代码循环遍历参数,如(公认的愚蠢示例)所示\pgfkeys{/student/hello/.list={world,duck,koala,marmot}}
。还要注意,.list
需要pgffor
库(在之上pgfkeys
,这足以使 MWE 的第一部分工作)。