Используйте вывод пакета gitinfo2 с командами datetime2

Используйте вывод пакета gitinfo2 с командами datetime2

Пакет gitinfo2предоставляет команду \gitAuthorDate, которая возвращает дату текущего коммита в формате ISO, например, 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?

Редактировать

По просьбе Николы, вот отрывок из интерактивной сессии, чтобы увидеть, как расширяется \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}

Связанный контент