该包提供了以 ISO 格式返回当前提交日期的gitinfo2
命令,例如。\gitAuthorDate
2018-02-22
我想在我的文档中使用不同格式的日期,所以我尝试使用该datetime2
包来保存输出\gitAuthorDate
并重新格式化它。
下面是一个最小示例(在 git 版本控制目录中使用,并根据文档安装适当的钩子)gitinfo2
:
\documentclass{article}
\usepackage[grumpy,mark]{gitinfo2}
\usepackage[calc]{datetime2}
\DTMsavedate{commitdate}{\gitAuthorDate}
\begin{document}
Hello world!
\end{document}
不幸的是,这让我
Runaway argument?
\gitInf@authsdate \@dtm@endparsedate \cslet {@dtm@commitdate@year}{\@dtm@year \
ETC.
! Paragraph ended before \@dtm@parsedate was complete.
<to be read again>
\par
l.9
我该如何修复这个错误,或者是否有其他方法可以重新格式化提供的日期\gitAuthorDate
?
编辑
根据 Nicola 的要求,以下是一段交互式会话的摘录,用于了解 \gitAuthorDate 如何扩展
*\show\gitAuthorDate
...
> \gitAuthorDate=\long macro:
->\gitInf@authsdate .
*\makeatletter
*\show\gitInf@authsdate
> \gitInf@authsdate=macro:
->2018-02-22.
答案1
(将评论变成答案。)\DTMsavedate
对第二个参数中的第一个标记执行一级扩展,因此如果\gitAuthorDate
直接定义为 2018-02-22,它将起作用,但如果以更复杂的方式定义,则不会起作用。鉴于您提供的扩展\gitAuthorDate
,您可以使用您提出的解决方案:
\makeatletter\DTMsavedate{commitdate}{\gitInf@authsdate}\makeatother
但是,最好不要使用内部命令,以防软件包在以后的版本中更改它们。相反,更通用的解决方案是确保参数在传递给之前完全展开\DTMsavedate
:
\newcommand{\esavedate}[2]{%
\begingroup
\edef\x{\noexpand\endgroup\noexpand\DTMsavedate{#1}{#2}}\x
}
\esavedate{commitdate}{\gitAuthorDate}