
Ich arbeite an einem Makro, das mithilfe von Git-Tags eine Revisionsverlaufstabelle in meinem Dokument erstellt. Jede veröffentlichte Version meines Dokuments hat ein Tag mit einer kurzen Beschreibung. Ich möchte sie verwenden, um beim Kompilieren mit XeLaTeX unter Windows automatisch eine Revisionstabelle zu erstellen.
Mit dem folgenden Git-Befehl erhalte ich alle Informationen, die ich zum Erstellen der Revisionsverlaufstabelle benötige. Die Ausgabe erfolgt in einem CSV-ähnlichen Format.
git for-each-ref --format='%(refname:short); %(taggerdate:short); %(subject); %(*authorname); %(*authoremail)' refs/tags
Ich habe einMakro zum Parsen von CSV-Dateiendamit ich die Ausgabe des Git-Befehls lesen und meine Revisionsverlaufstabelle erstellen kann (im Skript noch nicht als Tabelle formatiert).
\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}
Es funktioniert mit der vorab gespeicherten Ausgabe des Befehls, aber wenn ich die vollständige Befehlszeichenfolge einfüge \@@input
und versuche, sie zu kompilieren ( xelatex -shell-escape .\read-git-history-test.tex
), beschwert sich XeLaTeX:
{|"git for-each-ref --format='
! Paragraph ended before \@iinput was complete.
<to be read again>
\par
Ich habe einen Workaround gefunden, indem ich einen Git-Alias definiert habe ( git revhist
siehe unten), aber wenn einer meiner Kollegen versucht, es zu kompilieren, ohne den Alias zu definieren, wird es fehlschlagen. Nein, sie lesen REDAME nicht ...
git config --global alias.revhist "for-each-ref --format='%(refname:short); %(taggerdate:short); %(subject); %(*authorname); %(*authoremail);' refs/tags"
Ist es möglich, den vollständigen Git-Befehl in der Datei aufzurufen, *.tex
um ihn nicht durch die Zeichen zu beschädigen %
?
Antwort1
Ich habe es \@percentchar
wie von @DavidCarlisle vorgeschlagen verwendet und es funktioniert wie erwartet.
\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 %