我正在尝试创建一个日期列表,不仅可以使用它来创建日历,还可以使用它在文档中输出。到目前为止,显示日历的实现已得到以下答复:带有 tikz 的日历
在整个文档中,我都会检查日期是否是假期。如果是假期,则转到下一个工作日。已经有几个例子,但它们似乎不能满足我的需求(也许我对代码理解不够好)。最能代表我需要的代码可以在这里找到将 (n) 个工作日添加到特定日期
我遇到的问题是,我只想定义一次假期或休假日,并且只使用月和日(如日历或第一个例子),而不是年、月和日(在第二个例子中)。
注意:我感兴趣的日期跨越多年。
我尝试了一个简单的示例如下:
\newcommand{\vacay}{equals=10-31, equals=05-31}
\pgfcalendarifdate{\thisyear-\thismonth-\thisday}{
equals=10-31,
equals=05-31
}{\thisyear-\thismonth-\thisday \, this is a holiday}{\thisyear-\thismonth-\thisday \, is not holiday}
Passing in a holiday array:
\pgfcalendarifdate{\thisyear-\thismonth-\thisday}{
\vacay
}{\thisyear-\thismonth-\thisday \, this is a holiday}{\thisyear-\thismonth-\thisday \, is not holiday}
我不确定为什么第二个例子(传递一个假期数组)在这种情况下不起作用;或者,是否有更好的方法来为日历和文本共享一个假期数组。
答案1
与往常一样,这是一个扩展问题。
错误信息说
包 pgfkeys 错误:我不知道密钥“/pgf/calender/equals=10-31, equals=05-31”
(所有条件实际上都是/pgf/calendar
命名空间中的 PGFkeys。)
用一把看似不必要的钥匙
\pgfqkeys{/pgf/calendar}{style/.style={#1}}
我们可以解决这个问题,并将这种新样式与处理程序一起使用.expand once
(或者.expanded
:
{style/.expand once=\vacay}
我们也可以这样做
\newcommand*\temp{\pgfcalendarifdate{\thisyear-\thismonth-\thisday}
\expandafter\temp\expandafter{\vacay}{<true>}{<false>}
但style
我认为,这种风格更加人性化。
代码
\documentclass{article}
\usepackage{pgfcalendar}
\newcommand*\thisyear{2022}
\newcommand*\thismonth{10}
\newcommand*\thisday{31}
\newcommand*\vacay{equals=10-31, equals=05-31}
\pgfqkeys{/pgf/calendar}{style/.style={#1}}
\begin{document}
Passing normal: \thisyear-\thismonth-\thisday\space is%
\pgfcalendarifdate{\thisyear-\thismonth-\thisday}
{equals=10-31, equals=05-31}{}{n't}
a holiday.
Passing in a holiday array: \thisyear-\thismonth-\thisday\space is%
\pgfcalendarifdate{\thisyear-\thismonth-\thisday}
{style/.expand once=\vacay}{}{n't}
a holiday.
\end{document}