
Das gitinfo2
Paket stellt den Befehl bereit \gitAuthorDate
, der das Datum des aktuellen Commits im ISO-Format zurückgibt, z. B. 2018-02-22
.
Ich möchte dieses Datum in einem anderen Format in meinem Dokument verwenden, daher habe ich versucht, datetime2
die Ausgabe mithilfe des Pakets zu speichern \gitAuthorDate
und neu zu formatieren.
Hier ist ein minimales Beispiel (zur Verwendung in einem Verzeichnis mit Git-Version und den entsprechenden Hooks, die gemäß der Dokumentation von installiert sind) gitinfo2
:
\documentclass{article}
\usepackage[grumpy,mark]{gitinfo2}
\usepackage[calc]{datetime2}
\DTMsavedate{commitdate}{\gitAuthorDate}
\begin{document}
Hello world!
\end{document}
Leider gibt mir das
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
Wie kann ich diesen Fehler beheben oder gibt es eine andere Möglichkeit, das von bereitgestellte Datum neu zu formatieren \gitAuthorDate
?
Bearbeiten
Wie von Nicola gewünscht, hier ein Auszug aus einer interaktiven Sitzung, um zu sehen, wie \gitAuthorDate erweitert wird
*\show\gitAuthorDate
...
> \gitAuthorDate=\long macro:
->\gitInf@authsdate .
*\makeatletter
*\show\gitInf@authsdate
> \gitInf@authsdate=macro:
->2018-02-22.
Antwort1
(Kommentare in eine Antwort umwandeln.) \DTMsavedate
führt eine einstufige Erweiterung des ersten Tokens im zweiten Argument durch, sodass es funktionieren würde, wenn beispielsweise \gitAuthorDate
direkt als 2018-02-22 definiert ist, aber nicht, wenn es auf kompliziertere Weise definiert ist. Angesichts der \gitAuthorDate
von Ihnen bereitgestellten Erweiterung könnten Sie Ihre vorgeschlagene Lösung verwenden:
\makeatletter\DTMsavedate{commitdate}{\gitInf@authsdate}\makeatother
Es ist jedoch besser, keine internen Befehle zu verwenden, falls das Paket sie in späteren Versionen ändert. Stattdessen besteht eine allgemeinere Lösung darin, sicherzustellen, dass das Argument vollständig erweitert ist, bevor es an übergeben wird \DTMsavedate
:
\newcommand{\esavedate}[2]{%
\begingroup
\edef\x{\noexpand\endgroup\noexpand\DTMsavedate{#1}{#2}}\x
}
\esavedate{commitdate}{\gitAuthorDate}