用于添加开始时间以制作事件“运行表”的包?

用于添加开始时间以制作事件“运行表”的包?

我想为可能发生变化的活动制作一份“运行表”,因此如果节目发生变化,我希望 LaTeX 能帮我跟踪计算。我设想存储一个“开始”时间,为每个部分设置一个计数器“持续时间”,并使用 LaTeX 将这两个时间相加,这样结果仍然是下一个部分开始的有效时钟时间。这将按顺序继续每个元素。例如,下午 2 点“开始”,10 分钟介绍“持续时间”,导致下一个项目的打印时间为下午 2:10(下午不是必需的)。这样,如果有人决定他们可以/不能在开幕式上发表演讲,我们就不必费力地更改所有时间。我也不想手动确保 60 分钟的过去实际上会增加小时数。

我查看了datetime2其他一些软件包,不清楚如何添加存储的日期,但我承认我通常使用 R 对日期格式施加一些要求。我宁愿不必使用 R 脚本来执行此操作,然后将文本导入 LaTeX 文档。欢迎提出任何创建类似我所描述的内容的建议。

答案1

以下内容可能是一个足够的开始:

在此处输入图片描述

\documentclass{article}

\usepackage{xfp}

\makeatletter
% Split time into hours and minutes
\def\@splittime#1:#2\relax{\edef\@timehour{#1}\edef\@timeminute{#2}}
% Set start time: \starttime{<hour>:<minute>}
\newcommand{\setstarttime}[1]{%
  \@splittime#1\relax%
  \xdef\@starttime{\two@digits\@timehour:\two@digits\@timeminute}}
% Print start time
\newcommand{\printstarttime}{\@starttime}
% Set duration of event: \setduration{<hours>:<minutes>}
\newcommand{\setduration}[1]{%
  \@splittime#1\relax%
  \edef\@durationhour{\@timehour}\edef\@durationminute{\@timeminute}%
  \@addduration}
% Adds duration to start time
\newcommand{\@addduration}{%
  \expandafter\@splittime\@starttime\relax
  \edef\@timehour{\fpeval{\@timehour+\@durationhour+trunc((\@durationminute+\@timeminute)/60)}}%
  \edef\@timehour{\fpeval{\@timehour-12*(trunc((\@timehour-1)/12))}}%
  \edef\@timeminute{\fpeval{\@timeminute+\@durationminute}}%
  \edef\@timeminute{\fpeval{\@timeminute-60*(trunc(\@timeminute/60))}}%
  \xdef\@starttime{\two@digits\@timehour:\two@digits\@timeminute}%
}
\makeatother  

\begin{document}

Start: \setstarttime{8:12}\printstarttime

+0:15 = \setduration{0:15}\printstarttime

+2:17 = \setduration{2:17}\printstarttime

+5:55 = \setduration{5:55}\printstarttime

+0:21 = \setduration{0:21}\printstarttime

+6:60 = \setduration{6:60}\printstarttime

+1:120 = \setduration{1:120}\printstarttime

\end{document}

您可以使用 来设置开始时间,\setstarttime{<hour>:<minute>}其中:是必需的。然后,您可以通过 添加事件持续时间\setduration{<hours>:<minutes>};同样,:是必需的,您也可以在此处设置一些奇怪的内容(例如1:120,表示事件跨越1小时和120分钟,或 3 小时)。\printstarttime使用 12 小时制和两位数打印来打印开始时间。

没有考虑 PM 或 AM,但可以添加。不过,可能需要一个可靠的输入界面(也许\setstarttime{8:27AM})。此外,假设将设置正确的开始时间,尽管如果需要,也可以检查用户是否正确输入了该时间。其他扩展也是可能的,以及必要的错误检查。

答案2

您不需要了解任何 LaTeX 软件包。只需使用 TeX 基元(或普通的 TeX 宏):

\newcount\hr \newcount\mn  \newcount\tmpnum

\def\ntime{\tmpnum=\mn 
   \divide\tmpnum by60 \advance\hr by\tmpnum
   \multiply\tmpnum by60 \advance\mn by-\tmpnum
   \tmpnum=\hr \divide\tmpnum by12 
   \multiply\tmpnum by12 \advance\hr by-\tmpnum
   \ifnum\hr=0 \hr=12 \fi
}
\def\setstarttime#1{\setstarttimeA#1&}
\def\setduration #1{\setdurationA #1&}
\def\setstarttimeA#1:#2&{\hr=#1\relax \mn=#2\relax \ntime}
\def\setdurationA #1:#2&{\advance\hr by#1\relax \advance\mn by#2\relax \ntime}
\def\printstarttime{\ifnum\hr<10 0\fi \the\hr:\ifnum\mn<10 0\fi \the\mn}

Start: \setstarttime{8:12}\printstarttime

+0:15 = \setduration{0:15}\printstarttime

+2:17 = \setduration{2:17}\printstarttime

+5:55 = \setduration{5:55}\printstarttime

+0:21 = \setduration{0:21}\printstarttime

+6:60 = \setduration{6:60}\printstarttime

+1:120 = \setduration{1:120}\printstarttime

\bye

相关内容