
Estou trabalhando em uma macro que criará uma tabela de histórico de revisões em meu documento usando tags Git. Cada versão publicada do meu documento possui uma tag com uma breve descrição. Quero usá-los para construir automaticamente uma tabela de revisão durante a compilação com XeLaTeX no Windows.
Usando o comando Git abaixo, obtenho todas as informações necessárias para criar a tabela de histórico de revisões. A saída é formatada em formato semelhante a CSV.
git for-each-ref --format='%(refname:short); %(taggerdate:short); %(subject); %(*authorname); %(*authoremail)' refs/tags
Eu modifiquei ummacro para analisar arquivo CSVpara que eu possa ler a saída do comando Git e construir minha tabela de histórico de revisões (ainda não formatada como tabela no script).
\documentclass{article}
\newcommand{\printrow}[5]{tag: #1 (#3) at #2 by #4 #5 + \\}
\begin{document}
\def\readrow #1;#2;#3;#4;#5;{\ifx^#5^\else
\printrow{#1}{#2}{#3}{#4}{#5}%
\expandafter\readrow\fi}
\def\startread {\readrow} % skip first row
\begingroup
\endlinechar=`; \everyeof={;;;;;} \catcode`\@=11
\expandafter \startread \@@input |"git revhist" %
\endgroup %
\end{document}
Ele funciona com a saída pré-salva do comando, mas quando colo a string completa do comando \@@input
e tento compilar ( xelatex -shell-escape .\read-git-history-test.tex
), o XeLaTeX reclama:
{|"git for-each-ref --format='
! Paragraph ended before \@iinput was complete.
<to be read again>
\par
Eu fiz uma solução alternativa definindo o alias do Git ( git revhist
-veja abaixo), mas se um dos meus colegas tentar compilá-lo sem definir o alias, ele falhará. Não, eles não leem REDAME...
git config --global alias.revhist "for-each-ref --format='%(refname:short); %(taggerdate:short); %(subject); %(*authorname); %(*authoremail);' refs/tags"
É possível chamar o comando completo do Git no *.tex
arquivo para não corrompê-lo pelos %
sinais?
Responder1
Usei \@percentchar
conforme sugerido por @DavidCarlisle e funcionou conforme o esperado.
\def\readrow #1;#2;#3;#4;#5;{\ifx^#5^\else
\addrevision{#1}{#2}{#4}{#3}%
\expandafter\readrow\fi}
\def\startread {\readrow} % skip first row
\begingroup
\endlinechar=`; \everyeof={;;;;;} \catcode`\@=11
\expandafter \startread \@@input |"git for-each-ref --format='\@percentchar(refname:short); \@percentchar(taggerdate:short); \@percentchar(subject); \@percentchar(*authorname); \@percentchar(*authoremail)' refs/tags" %
\endgroup %