
Estoy trabajando en una macro que creará una tabla de historial de revisiones en mi documento usando etiquetas Git. Cada versión publicada de mi documento tiene una etiqueta con una breve descripción. Quiero usarlos para crear automáticamente una tabla de revisión mientras compilo con XeLaTeX en Windows.
Usando el comando Git a continuación obtengo toda la información que necesito para crear la tabla del historial de revisiones. La salida tiene el formato similar a CSV.
git for-each-ref --format='%(refname:short); %(taggerdate:short); %(subject); %(*authorname); %(*authoremail)' refs/tags
Modifiqué unmacro para analizar archivos CSVpara poder leer el resultado del comando Git y crear mi tabla de historial de revisiones (aún no formateada como tabla en el 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}
Funciona con la salida del comando guardada previamente, pero cuando pego la cadena de comando completa \@@input
e intento compilar ( xelatex -shell-escape .\read-git-history-test.tex
), XeLaTeX se queja:
{|"git for-each-ref --format='
! Paragraph ended before \@iinput was complete.
<to be read again>
\par
Hice una solución al definir el alias de Git ( git revhist
ver más abajo), pero si uno de mis colegas intenta compilarlo sin definir el alias, fallará. No, no leen los de REDAME...
git config --global alias.revhist "for-each-ref --format='%(refname:short); %(taggerdate:short); %(subject); %(*authorname); %(*authoremail);' refs/tags"
¿Es posible llamar al comando completo de Git en *.tex
el archivo para no corromperlo por los %
signos?
Respuesta1
Lo usé \@percentchar
según lo sugerido por @DavidCarlisle y funciona como se esperaba.
\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 %