如何通过替代值推进日期

如何通过替代值推进日期

我使用以下代码来创建每周讲座的时间表(周五):

\documentclass{article}
\usepackage{advdate}

%... Set the first lecture date
\ThisYear{2019}
\ThisMonth{3}
\ThisDay{1}

\newif\iffirst
    \firsttrue
%%%
\newcommand{\nextlec}{%
  \iffirst
    \firstfalse
  \else
    \AdvanceDate[7]%
  \fi
  \section*{\today}
    \vspace{-5mm}
}

\begin{document}
\nextlec
Lecture 01.

\nextlec
Lecture 02.

\nextlec
Lecture 03.

\nextlec
Lecture 04.

\nextlec
Lecture 05.

\end{document}

advdate如果我想\nextlec恢复每周两次讲座的时间表(例如,在星期二和星期四),我该如何更改它(仍然使用)?

答案1

我不完全确定这是否是您想要的,但下面的代码交替在当前日期上添加 2 天和 5 天(因为星期二和星期四之间有 2 天,星期四和星期二之间有 5 天)。我还将“讲座 X”标题放入命令中\nextlec,并将第一个讲座的开始日期更改为 2019 年 3 月 3 日,因为这是星期二。输出(前四个讲座)是:

在此处输入图片描述

以下是代码:

\documentclass{article}
\usepackage{advdate}

%... Set the first lecture date
\ThisYear{2019}
\ThisMonth{3}
\ThisDay{5}

\newcounter{lecture}
% make \thelecture print Lecture X, with 0-padding for lectures 1-9
\renewcommand\thelecture{%
  Lecture~\ifnum\value{lecture}<10\relax0\fi\arabic{lecture}.}
\newcount\lectureoffset% TeX counters are more convenient 
\newcommand{\nextlec}{%
  \AdvanceDate[\lectureoffset]% increase offset by 2 or 5 (initially 0)
  \ifnum\lectureoffset=2\relax\lectureoffset=5%
  \else\relax\lectureoffset=2%
  \fi%
  \refstepcounter{lecture}% increment the lecture number
  \section*{\today}\vspace{-5mm}\thelecture
}

\begin{document}

  \nextlec
  \nextlec
  \nextlec
  \nextlec
  \nextlec
  \nextlec
  \nextlec
  \nextlec
  \nextlec
  \nextlec

\end{document}

关键是我引入了 TeX 计数器\lectureoffset,它用于通过 打印日期\AdvanceDate[\lectureoffset]。每次\nextlec使用 时,此计数器都会交替增加 25

你也可以使用类似前列腺素包进一步自动化这一过程,例如,为了打印20讲座,你可以编写如下内容:

\foreach \lec in {1,...,20} \nextlec

为了使其工作,您需要\global在定义中添加一些语句\nextlec

\newcommand{\nextlec}{%
  \AdvanceDate[\lectureoffset]% increase offset by 2 or 5
  \ifnum\lectureoffset=2\relax\global\lectureoffset=5%
  \else\relax\global\lectureoffset=2%
  \fi%
  \refstepcounter{lecture}% increment the lecture number
  \section*{\today}\vspace{-5mm}\thelecture
}

相关内容