Cómo escapar del inicio de sesión de porcentaje en el comando Shell

Cómo escapar del inicio de sesión de porcentaje en el comando Shell

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 \@@inpute 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 revhistver 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 *.texel archivo para no corromperlo por los %signos?

Respuesta1

Lo usé \@percentcharsegú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 %

información relacionada