我正在尝试在日历中每个星期日的节点下绘制一条规则。因此我使用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}