如何在 ConTeXt 中创建显示和增加日期的计数器?

如何在 ConTeXt 中创建显示和增加日期的计数器?

我需要创建一个文档,其中包含名为“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.

在其他情况下,我可能需要在条件中使用yearmonth和的当前值,例如: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)。

相关内容