将按月和日定义的日期数组传递给 pgfcalendarifdate 命令

将按月和日定义的日期数组传递给 pgfcalendarifdate 命令

我正在尝试创建一个日期列表,不仅可以使用它来创建日历,还可以使用它在文档中输出。到目前为止,显示日历的实现已得到以下答复:带有 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}

输出

在此处输入图片描述

相关内容