我需要创建一个文档,其中包含名为“2012 年 10 月 1 日”、“2012 年 10 月 2 日”等章节标题,如下所示:
\section{October 1, 2012}
This is text for the first day.
\section{October 2, 2012}
This is text for the second day.
有没有一种简单的方法来创建一个计数器,设置为初始日期,然后增加它?例如:
\section{\insertdate\incrementdate}
This is text for the first day.
\section{\insertdate\incrementdate}
This is text for the second day.
- 这需要了解闰年。
- 当显示在目录中时,这应该与各章节相匹配。
year
在某些情况下,我可能需要查询、month
和的当前值day
,例如:
This is month \month and year \year.
将显示:
This is month 10 and year 2012.
在其他情况下,我可能需要在条件中使用year
、month
和的当前值,例如:day
IF day IS 1, THEN:
"This is the start of a new month."
ELSE:
"It is not the start of a new month."
如何在 ConTeXt 中创建这样的计数器?
答案1
以下是一个简单的实现。该命令\setupdate
设置当前日期(其语法与命令相同\date
);该命令\incrementdate
增加日期;该命令\getdate
排版当前日期。
您可以使用 访问当前日期、月份和年份\getdate[...]
,它接受与 相同的规范\date
。因此\getdate[month]
给出月份名称(使用当前语言)、\getdate[m]
给出当前月份的数字、\getdate[weekday]
给出星期几等。
\unprotect
\newcount\daycounter
\newcount\monthcounter
\newcount\yearcounter
\unexpanded\def\setupdate
{\dosingleargument\setup_date_aux}
\def\setup_date_aux[#1]%
{\letdummyparameter\c!d\normalday
\letdummyparameter\c!m\normalmonth
\letdummyparameter\c!y\normalyear
\getdummyparameters[#1]%
\daycounter \directdummyparameter\c!d\relax
\monthcounter\directdummyparameter\c!m\relax
\yearcounter \directdummyparameter\c!y\relax
}
\unexpanded\def\incrementdate
{\getdayspermonth\yearcounter\monthcounter
\doifelse\numberofdays{\the\daycounter}
{\daycounter\plusone
\doifelse\!!twelve{\the\monthcounter}
{\monthcounter\plusone
\advance\yearcounter\plusone}
{\advance\monthcounter\plusone}}
{\advance\daycounter\plusone}}
\def\getdate
{\date[d=\the\daycounter, m=\the\monthcounter, y=\the\yearcounter]}
\protect
\setupdate[d={25},m={12},y={2011}]
\starttext
\placecontent
\dorecurse{200}
{\expanded{\section{\getdate}}
The current month is \getdate[month] \getdate[weekday]
\incrementdate}
\stoptext
从上面例子的输出可以看出,这个实现正确处理了闰年并且在章节标题中有效(前提是您使用\expanded
)。