
O gitinfo2
pacote fornece o comando \gitAuthorDate
que retorna a data do commit atual no formato ISO, por exemplo, 2018-02-22
.
Gostaria de usar esta data com um formato diferente no meu documento, então tentei usar o datetime2
pacote para salvar a saída \gitAuthorDate
e reformatá-la.
Aqui está um exemplo mínimo (para ser usado em um diretório com versão git com os ganchos apropriados instalados conforme a documentação de gitinfo2
:
\documentclass{article}
\usepackage[grumpy,mark]{gitinfo2}
\usepackage[calc]{datetime2}
\DTMsavedate{commitdate}{\gitAuthorDate}
\begin{document}
Hello world!
\end{document}
Infelizmente, isso me dá
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
Como posso corrigir esse erro ou existe outra maneira de reformatar a data fornecida por \gitAuthorDate
?
Editar
Conforme solicitado por Nicola, aqui está um trecho de uma sessão interativa para ver como \gitAuthorDate se expande
*\show\gitAuthorDate
...
> \gitAuthorDate=\long macro:
->\gitInf@authsdate .
*\makeatletter
*\show\gitInf@authsdate
> \gitInf@authsdate=macro:
->2018-02-22.
Responder1
(Transformando comentários em uma resposta.) \DTMsavedate
executa uma expansão de um nível no primeiro token no segundo argumento, então funcionaria se, digamos, \gitAuthorDate
fosse definido diretamente como 22/02/2018, mas não se fosse definido de uma maneira mais complicada . Dada a expansão \gitAuthorDate
fornecida, você poderia usar a solução proposta:
\makeatletter\DTMsavedate{commitdate}{\gitInf@authsdate}\makeatother
No entanto, é melhor não usar comandos internos caso o pacote os altere em versões posteriores. Em vez disso, uma solução mais geral é garantir que o argumento seja totalmente expandido antes de ser passado para \DTMsavedate
:
\newcommand{\esavedate}[2]{%
\begingroup
\edef\x{\noexpand\endgroup\noexpand\DTMsavedate{#1}{#2}}\x
}
\esavedate{commitdate}{\gitAuthorDate}