gitinfo2 パッケージの出力を datetime2 コマンドで使用する

gitinfo2 パッケージの出力を datetime2 コマンドで使用する

このパッケージは、現在のコミットの日付を ISO 形式で返すgitinfo2コマンドを提供します(例: ) 。\gitAuthorDate2018-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、2 番目の引数の最初のトークンに対して 1 レベルの展開を実行します。したがって、たとえば、\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}

関連情報