我正在尝试生成具有以下格式的表格:
我正在寻找一种方法来生成给定初始周的日期(在本例中为 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
使用电子工具箱包,以及一些免费的造型通过书签包裹。
关于日期格式,日期编号定义计数器dateday
和datemonth
日期和月份。所以我的第一个想法是,将它们包装到宏中就足够了,在宏中将当前日期加 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
。