我正在修改日历罗伯特·克劳斯(示例),我正在寻找一种方法来让这个日历动态工作。另请参阅我的原始帖子这里。
由于原始帖子中没有人回答,所以我问了这个新问题,这可能对许多其他用户和各种用途都有帮助。我如何在其中定义关联数组Tikz
并循环遍历它?
就我而言,这个数组应如下所示:
\exams = [
{Chemistry}{2017-05-13},
{Maths}{2017-06-26},
{Physics}{2017-03-11}
]
在我的日历代码中,单元格被定义,我必须循环遍历这个数组来检查是否有任何考试要显示:
% Tikzpicture environment for the first six month of the year
\foreach{\exams as \exam => \date}{
\if{\date <= \year-06-30}{
\exam{\date}{\exam}
}
}
% Tikzpicture environment for the last six month of the year
\foreach{\exams as \exam => \date}{
\if{\date > \year-06-30}{
\exam{\date}{\exam}
}
}
这个小 makro 用于将名称写入字段:
\def\exam#1#2{
\node [
anchor=north west,
text width= 3.4cm,
text=red,
font=\bf
] at
($(cal-#1.north west)+(3em, -0.2em)$) {\scriptsize{#2}};
}
它被这样称呼:
\exam{2017-06-23}{Physical Chemistry}
循环应该调用这个 makro 并插入日期和名称。
答案1
tikz 语法相当不同(并且 tex 实际上没有数组)但您可以遍历主题/日期对,这似乎是这里的主要要求。
\documentclass{article}
\usepackage{tikz}
\def\year{2017}
\errorcontextlines1000
\begin{document}
\def\exams {
Chemistry/2017-05-13,
Maths/2017-06-26,
Physics/2017-03-11,
French/2017-08-01
}
\def\datenum#1{\expandafter\xdatenum#1\relax}
\def\xdatenum#1-#2-#3\relax{#1#2#3}
A:
% Tikzpicture environment for the first six month of the year
\foreach \subject/\sdate in \exams{
\ifnum\datenum\sdate<\datenum{\year-06-30}
[exam \sdate, \subject]\par
\fi
}
B:
% Tikzpicture environment for the last six month of the year
\foreach \subject/\sdate in \exams{
\ifnum\datenum\sdate > \datenum{\year-06-30}
[exam \sdate, \subject]\par
\fi
}
\end{document}