我使用以下代码来创建每周讲座的时间表(周五):
\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
使用 时,此计数器都会交替增加 2
或5
。
你也可以使用类似前列腺素包进一步自动化这一过程,例如,为了打印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
}