使用 datetime2 儲存日期並將其與 termcal 一起使用

使用 datetime2 儲存日期並將其與 termcal 一起使用

我正在使用“termcal”套件製作課程大綱,並希望儲存第一堂課的開始日期,以便我可以將其用於課程大綱的不同元素。我目前正在嘗試使用\DTMsavedate“datetime2”包中的函數來儲存日期。

\DTMusedate{startDate}例如,如果您在段落中使用,日期將顯示良好。但是,如果我嘗試將其傳遞給 的日期選項\begin{calender},則會收到錯誤訊息「段落在 \setdate@ 完成之前結束」。有辦法讓這項工作發揮作用嗎?氣象局:

\documentclass[12pt]{article}
\usepackage{termcal}
\usepackage[american,useregional=numeric]{datetime2}
\DTMsavedate{startDate}{2017-8-29}

\begin{document}

\begin{calendar}{\DTMusedate{startDate}}{16} 

\setlength{\calboxdepth}{.3in}
\setlength{\calwidth}{0.8\textwidth} 

% Description of the Week.
\calday[Tuesday]{\classday} 
\skipday
\calday[Thursday]{\classday}
\skipday
\skipday
\skipday
\skipday

\end{calendar}

\end{document}

我真的很感激任何幫助,謝謝!

答案1

首先,歡迎來到 TeX.SX。很高興看到新用戶,他知道如何詢問和執行 MWE。

termcal包僅接受格式為 的日期<month>/<day>/<year>。且 的日期參數\begin{calendar}在解析之前不會展開,即不能使用巨集。後者可以更改,但這不適用於“\DTMusedate”。

如果您不堅持使用該datetime2軟體包,那麼這裡有一個不使用該軟體包的解決方案。

為了保存日期,\startDate定義了一個簡單的命令,僅包含正確格式的日期。為了使巨集作為參數工作,\begin{calendar} \setdate重新定義了參數,以便在解析參數之前擴展參數。

\documentclass[12pt]{article}
\usepackage{termcal}
\newcommand*{\startDate}{08/29/2017}

\makeatletter
\renewcommand{\setdate}[1]{\expandafter\setdate@#1!}
\makeatother

\begin{document}

\begin{calendar}{\startDate}{16} 

\setlength{\calboxdepth}{.3in}
\setlength{\calwidth}{0.8\textwidth} 

% Description of the Week.
\calday[Tuesday]{\classday} 
\skipday
\calday[Thursday]{\classday}
\skipday
\skipday
\skipday
\skipday

\end{calendar}

\end{document}

答案2

根據麥克的回答,如果您確實需要使用datetime2,您可以確保\DTMusedate在作為參數傳遞之前完全展開:

\documentclass[12pt]{article}
\usepackage{termcal}
\usepackage[american,useregional=numeric]{datetime2}
\DTMsavedate{startDate}{2017-8-29}

\begin{document}

\edef\startCalendar{\noexpand\begin{calendar}{\DTMusedate{startDate}}{16}}
\startCalendar

\setlength{\calboxdepth}{.3in}
\setlength{\calwidth}{0.8\textwidth} 

% Description of the Week.
\calday[Tuesday]{\classday} 
\skipday
\calday[Thursday]{\classday}
\skipday
\skipday
\skipday
\skipday

\end{calendar}

\end{document}

這裡有一個小小的修改麥克的建議:

\documentclass[12pt]{article}
\usepackage{termcal}
\usepackage{datetime2}
\DTMsavedate{startDate}{2017-8-29}

\newenvironment{mycalendar}[2]{%
 \DTMsetup{monthdaysep=/,dayyearsep=/}%
 \DTMsetstyle{mmddyyyy}%
 \edef\startCalendar{\noexpand\begin{calendar}{#1}{#2}}%
 \startCalendar
}
{\end{calendar}}

\begin{document}

\begin{mycalendar}{\DTMusedate{startDate}}{16}

\setlength{\calboxdepth}{.3in}
\setlength{\calwidth}{0.8\textwidth} 

% Description of the Week.
\calday[Tuesday]{\classday} 
\skipday
\calday[Thursday]{\classday}
\skipday
\skipday
\skipday
\skipday

\end{mycalendar}

\end{document}

這可以確保日期始終採用環境所需的樣式calendar,即使文件的其餘部分具有不同的日期樣式也是如此。 (風格的變化會自動受到mycalendar環境的影響。)

相關內容