LaTeX 中的关联数组(Tikz)

LaTeX 中的关联数组(Tikz)

我正在修改日历罗伯特·克劳斯示例),我正在寻找一种方法来让这个日历动态工作。另请参阅我的原始帖子这里

由于原始帖子中没有人回答,所以我问了这个新问题,这可能对许多其他用户和各种用途都有帮助。我如何在其中定义关联数组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}

相关内容