在两个给定日期之间生成日程计划器

在两个给定日期之间生成日程计划器

我正在尝试生成具有以下格式的表格:

我正在寻找一种方法来生成给定初始周的日期(在本例中为 6 月 3 日至 7 日)

我尝试使用该包datenumber,但我只能使用初始日期(2019 年 6 月 3 日)设置一个计数器,\datedate但我获得了长日期格式“2019 年 6 月 3 日”。

\usepackage{datenumber}
\newcommand{\dnext}{
\addtocounter{datenumber}{7}\setdatebynumber{\thedatenumber}
\datedate
}
\begin{document}
\setdatenumber{2019}{6}{3}
\begin{tabular}{ccc}
    Week  & Dates & Activity\\
    1 & \datedate & Some values \\
    2 &\pnext & Some values \\
\end{tabular}
\end{document}

我的问题基本上是以下两个:

  • 处理两个柜台
  • 将格式更改为所需的格式。

我非常感谢任何建议。

答案1

如果您的 MWE 确实代表了您要做的事情,那么我会编写一个宏,它只接受以逗号分隔的“活动”列表,并根据这些数据生成表格。无论如何,这将允许您生成

在此处输入图片描述

使用

\activities{Walked dog, Ate lunch, Slept}

诀窍是\docsvlist使用电子工具箱包,以及一些免费的造型通过书签包裹。

关于日期格式,日期编号定义计数器datedaydatemonth日期和月份。所以我的第一个想法是,将它们包装到宏中就足够了,在宏中将当前日期加 4:

\newcommand\weekdate{%
  \ifcase\value{datemonth}%
    \or Jan \or Feb \or Mar \or Apr \or May \or Jun
    \or Jul \or Aug \or Sep \or Oct \or Nov \or Dec
    \fi
    \arabic{dateday}--\the\numexpr\arabic{dateday}+4\relax%
}

不幸的是,这实际上行不通,因为例如,一月没有 35 天。要正确考虑月份的长度,您需要以下内容:

\newcommand\weekdate{%
  \setmydatebynumber{\the\numexpr\thedatenumber+4}{endofweekyear}{endofweekmonth}{endofweekday}
  \ifcase\value{datemonth}%
    \or Jan \or Feb \or Mar \or Apr \or May \or Jun
    \or Jul \or Aug \or Sep \or Oct \or Nov \or Dec
    \fi
    \arabic{dateday}--\arabic{endofweekday}%
}

这可以工作,但编译起来很慢。我也不确定是否应该用Jul 29-2代替,但这似乎是 OP 要求的。如果这是真正想要的,Jul 29-Aug 2那么修改上面的代码很容易。Jul 29-Aug 2

完整代码如下:

\documentclass{article}
\usepackage{datenumber}
\usepackage{etoolbox}
\usepackage{booktabs}
\newcounter{endofweekday}
\newcounter{endofweekmonth}
\newcounter{endofweekyear}
\newcommand\weekdate{%
  \setmydatebynumber{\the\numexpr\thedatenumber+4}{endofweekyear}{endofweekmonth}{endofweekday}
  \ifcase\value{datemonth}%
    \or Jan \or Feb \or Mar \or Apr \or May \or Jun
    \or Jul \or Aug \or Sep \or Oct \or Nov \or Dec
    \fi
    \arabic{dateday}--\arabic{endofweekday}%
}
\newcounter{activity}
\newcommand\activities[1]{
  \renewcommand*\do[1]{%
  \stepcounter{activity}%
  \setdatebynumber{\thedatenumber}%
  \arabic{activity}
    & \weekdate \addtocounter{datenumber}{7}%
    & ##1 \\
  }
  \begin{tabular}{cll}\toprule
    Week  & Dates & Activity\\\midrule
    \docsvlist{#1}
    \bottomrule
  \end{tabular}
}

\begin{document}
  \setdatenumber{2019}{7}{22}
  \activities{Walked dog, Ate lunch, Slept}
\end{document}

您可以通过将开始日期设为可选参数来进一步修饰这一点\activities

相关内容