缺少数字,视为零格式日期

缺少数字,视为零格式日期

所以我对 latex 还很陌生,我大部分时候将它与 Rmarkdown 文件结合使用,但我正在尝试将两者整合在一起。本质上,我有一个命令,它应该是一个日期(格式为 MM/DD/YYYY),但被解释为字符串(或字符)。我想创建一个可以将此变量/字符串转换为更长格式的命令。本质上,在文档中的某些地方,我希望以 MM/DD/YYYY 格式引用日期,在某些地方,我希望它以 2018 年 12 月 31 日的格式打印日期。尝试使用 datetime 包中的 \usdate 和 \formatdate 来实现这一点。

这是我认为与理解我的问题相关的代码概要

\usepackage{stringstrings}
\usepackage{datetime}
\usdate
\newcommand{\acctdate}{12/31/2018}
\newcommand{\longerdate}[1]{
    \formatdate{\substring[v]{#1}{4}{5}}{\substring[v]{#1}{1}{2}}{\substring[v]{#1}{7}{10}}
}

在实际报告中我称

\longerdate{\acctdate}

如果我尝试运行它,我会收到错误:

! Missing number, treated as zero.
<to be read again>
\let

答案1

如果您仍然有符号,mm/dd/yyyy那么您可以使用一个简单的定义:

\documentclass{article} 
\usepackage{datetime}
\usdate
\newcommand\acctdate{12/31/2018}
\newcommand\longerdate[1]{\expandafter\LongerDate#1;}
\def\LongerDate#1/#2/#3;{\formatdate{#2}{#1}{#3}}
\begin{document}

and in the actual report I call
\longerdate{\acctdate}  

\end{document}

在此处输入图片描述

答案2

使用 TeX Live 2019(或 MiKTeX 的更新版本),您可以利用\expanded

\documentclass{article}
\usepackage{datetime}

\usdate

\newcommand{\longerdate}[1]{%
  \expanded{\noexpand\makelongerdate#1/}%
}
\def\makelongerdate#1/#2/#3/{\formatdate{#2}{#1}{#3}}

\newcommand{\acctdate}{12/31/2018}

\newcommand{\fixedyear}{2019}
\newcommand{\otherdate}{12/31/\fixedyear}

\begin{document}

\longerdate{\acctdate}

\longerdate{12/31/2018}

\longerdate{\otherdate}

\end{document}

通过更经典的实现,

\documentclass{article}
\usepackage{datetime}

\usdate

\newcommand{\longerdate}[1]{%
  \begingroup\edef\x{\endgroup\noexpand\makelongerdate#1/}\x
}
\def\makelongerdate#1/#2/#3/{\formatdate{#2}{#1}{#3}}

\newcommand{\acctdate}{12/31/2018}

\newcommand{\fixedyear}{2019}
\newcommand{\otherdate}{12/31/\fixedyear}

\begin{document}

\longerdate{\acctdate}

\longerdate{12/31/2018}

\longerdate{\otherdate}

\end{document}

在此处输入图片描述

相关内容