
該包提供了以 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}