datetime2 명령과 함께 gitinfo2 패키지의 출력 사용

datetime2 명령과 함께 gitinfo2 패키지의 출력 사용

패키지 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?

편집하다

Nicola의 요청에 따라 \gitAuthorDate가 어떻게 확장되는지 확인하기 위한 대화형 세션의 발췌문은 다음과 같습니다.

*\show\gitAuthorDate
...
> \gitAuthorDate=\long macro:
->\gitInf@authsdate .
*\makeatletter
*\show\gitInf@authsdate
> \gitInf@authsdate=macro:
->2018-02-22.

답변1

(댓글을 답변으로 전환합니다.) \DTMsavedate두 번째 인수의 첫 번째 토큰에 대해 한 수준 확장을 수행하므로 2018-02-22로 직접 정의된 경우에는 작동 \gitAuthorDate하지만 더 복잡한 방식으로 정의된 경우에는 작동하지 않습니다. . \gitAuthorDate제공한 확장을 고려하여 제안된 솔루션을 사용할 수 있습니다.

\makeatletter\DTMsavedate{commitdate}{\gitInf@authsdate}\makeatother

그러나 패키지가 이후 버전에서 내부 명령을 변경하는 경우에는 내부 명령을 사용하지 않는 것이 가장 좋습니다. 대신, 보다 일반적인 해결책은 인수가 다음으로 전달되기 전에 완전히 확장되었는지 확인하는 것입니다 \DTMsavedate.

\newcommand{\esavedate}[2]{%
  \begingroup
  \edef\x{\noexpand\endgroup\noexpand\DTMsavedate{#1}{#2}}\x
}

\esavedate{commitdate}{\gitAuthorDate}

관련 정보