将变量 \today 转换为固定字符串

将变量 \today 转换为固定字符串

我花了两天时间尝试解决这个问题,但却遗漏了一些东西。

我附加的代码(课程计划文档的一部分)包含几行代码,用于从固定输入值(SetDate)增加开始日期,以确定课程日期连续为星期二或星期四。这在章节标题中工作正常,但当这些标题在目录中汇总时,\today 是根据文档开头的设置日期而不是相关章节的保存日期计算的。因此,虽然章节标题中的日期从星期二到星期四再到星期二等正确递增,但目录章节标题中的日期都是相同的。我确信一定有一些简单的方法可以在章节标题中插入固定变量字符串,以便它在目录中显示相同的内容,但我看不到它......

\documentclass[10pt]{article}
%

\usepackage{xstring,datenumber,advdate,datetime,pgf,calc,scrdate,scrtime}
\newdateformat{mydateformat}{%
\,  \dayofweekname{\day}{\month}{\year}, \THEDAY \, \monthname[\THEMONTH] \THEYEAR}

\begin{document}
\SetDate[02/01/2018]
 \mydateformat{} 
\newif\ifthursday
\thursdayfalse
\def\mycmd{\dayofweekname{\day}{\month}{\year}}


\title{Course Title}
\maketitle
\footnotesize
\tableofcontents{}

\newpage
\part{Part I Title}

 \ifthursday\AdvanceDate[5]\SaveDate \thursdayfalse  \else\AdvanceDate[2] \SaveDate \thursdaytrue  \fi

\section{\underline{Section 1 Title} \\ \today}
    \subsubsection*{\qquad Learning Objectives}
        \begin{itemize}
            \item  by the end of this lesson, you should be able to: 
            \begin{itemize}
                \item demonstrate .....
            \end{itemize}
        \end{itemize}

        \end{document}

答案1

datetime包非常\today强大,因此您无法扩展它来解析日期信息。它的后继者datetime2该包的设计允许\today完全扩展,以便它能够正确显示在目录、PDF 书签、将日期写入外部文件等中。(因此,任何datetime2样式都必须通过保护脆弱的命令来确保这一点。)

附带的datetime2-calc包(可以用datetime2calc包选项加载)加载pgfcalendar包,可用于执行条件日期测试和日期计算。

这是一个不会改变的 MWE \today,但定义了一个自定义日期,可以使用它来显示\DTMusedate

\documentclass{article}

\usepackage[en-GB,calc,showdow]{datetime2}
\DTMlangsetup[en-GB]{dowdaysep={,\space},ord=omit}

\begin{document}
\DTMsavedate{mydate}{2018-01-02}

\newcount\julianday
\DTMifdate{mydate}{Thursday}
{% Thursday
  \DTMsaveddateoffsettojulianday{mydate}{5}{\julianday}%
}%
{% Not Thursday
  \DTMsaveddateoffsettojulianday{mydate}{2}{\julianday}%
}%
\DTMsavejulianday{mydate}{\julianday}%

Date: \DTMusedate{mydate}.
\end{document}

(这另外要求datetime2-english已安装,提供en-GB样式。

请注意,这\DTMifdate只是的便捷包装器\pgfcalendarifdate,它由包提供pgfcalendar(是pgfbundle)。Thursday是一个关键字,不属于字符串匹配器,因此如果有人需要将此 MWE 转换为另一种语言,则\DTMifdate不应转换中的关键字。例如:

\documentclass{article}

\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage[useregional,calc,showdow]{datetime2}

\begin{document}
\DTMsavedate{mydate}{2018-01-04}

\newcount\julianday
\DTMifdate{mydate}{Thursday}
{% Thursday
  \DTMsaveddateoffsettojulianday{mydate}{5}{\julianday}
}
{% Not Thursday
  \DTMsaveddateoffsettojulianday{mydate}{2}{\julianday}
}
\DTMsavejulianday{mydate}{\julianday}

Date: \DTMusedate{mydate}.
\end{document}

相关内容