在 d\formatdate 中替换之前对可选参数“#1”进行评估

在 d\formatdate 中替换之前对可选参数“#1”进行评估

当我尝试创建一个自定义环境(类似于日记条目,其中日期来自可选参数)时,我遇到了 datetime 包\formatdate{}{}{}函数的问题。我注意到它也发生在一个新命令中。特别是,当我尝试以下代码时,它会抛出参数:

\documentclass{article}
\usepackage{datetime}

\newcommand{worddate}[3]{\formatdate{#3}{#2}{#1}}
\begin{document}
  \formatdate{7}{12}{2023}
  \worddate{2023}{12}{7}
\end{document}

或者与环境:

\documentclass{article}
\usepackage{datetime}

\newenvironment{datedentry}[3][]{
    \formatdate{#3}{#2}{#1}}
}{}

\begin{document}
  \begin{datedentry}{2023}{12}{7}
  test
  \end{datedentry}
\end{document}

不管哪种情况,\formatdate 函数似乎都会立即计算 等#1,而不是计算替换值。有没有办法解决此问题?我不确定这是否符合预期。

答案1

您收到缺少开始文档的错误,因为

\newcommand{worddate}[3]{\formatdate{#3}{#2}{#1}}

应该

\newcommand{\worddate}[3]{\formatdate{#3}{#2}{#1}}

\

如果添加反斜杠,则输出符合预期

在此处输入图片描述


第二个块中的错误无关。

你有

\newenvironment{datedentry}[3][]{

因此定义一个可选参数和两个强制参数作为

\begin{datedentry}[1]{2}{3}

但是您需要三个强制参数,因此使用

\newenvironment{datedentry}[3]{

没有[]

相关内容