TikZ-日历:如何引用当前日期的节点?

TikZ-日历:如何引用当前日期的节点?

我正在尝试在日历中每个星期日的节点下绘制一条规则。因此我使用if (Sunday) {\draw (<current_node>) -- +(0,-4cm);}
然而,我不知道如何访问当前节点的定位

(\pgfcalendarsuggestedname)甚至尝试过通过模拟节点名称(即calendar_prefix-YYYY-MM-DD\def\thisday{\pgfcalendarprefix-\pgfcalendarcurrentyear-\pgfcalendarcurrentmonth-\pgfcalendarcurrentyear},然后使用(\thisday)作为坐标......但是(当然?!)它不起作用。


\documentclass{standalone}
    \usepackage{tikz}
        \usetikzlibrary{calendar}
    %\def\thisday{\pgfcalendarprefix-\pgfcalendarcurrentyear-\pgfcalendarcurrentmonth-\pgfcalendarcurrentyear}

\begin{document}
\begin{tikzpicture}
\calendar (cal) [%
        day list right,
        dates=2016-08-01 to 2016-10-last,
        day xshift=1.5em,   
        month xshift=1pt,
        month label above left, 
    ]
        if (weekend) [text=black!25];
        if (Sunday) {\draw (\pgfcalendarsuggestedname) -- +(0,-4cm);}

\end{tikzpicture}
\end{document}

答案1

您不能\pgfcalendarsuggestedname在这里使用。它是一个占位符,用于在配置日历时更改日历每天执行的代码,例如/tikz/day code,如手册第 520-521 页所述。

但是,您可以通过明确指定来访问当前日期节点的名称cal-\%y0-\%m0-\%d0,然后可以使用.south west.south east锚点在其下划线。

但是,由于此处的代码是在构建当天节点之前执行的,因此我们需要延迟执行任何引用当前节点名称的命令。我曾经使用过execute at end day scope在创建节点之后但在当天范围完成之前使用代码的方法,但为时已晚。

由于原始示例格式使日历极难使用,因此我已将其改为一种week list用于演示目的的安排,但这不会影响用于强调星期日的代码。

请注意,如果你说

    if (weekend) [text=black!25];

你不能添加

    if ...

因为分号结束了日历。如果在范围内给出代码,情况就不同了 - 分号在范围内,而不是结束日历本身。

\documentclass[border=10pt,multi,tikz]{standalone}
\usetikzlibrary{calendar}
\begin{document}
\begin{tikzpicture}
  \calendar (cal)
  [%
    week list,
    dates=2016-08-01 to 2016-10-last,
    day xshift=1.5em,
    month xshift=1pt,
    month label above left,
  ]
  if (weekend) [text=black!25]
  if (Sunday) [execute at end day scope={\draw (cal-\%y0-\%m0-\%d0.south west) -- (cal-\%y0-\%m0-\%d0.south east);}]
  ;
\end{tikzpicture}
\end{document}

下划线星期日

相关内容