쉘 명령에서 백분율 기호를 이스케이프 처리하는 방법

쉘 명령에서 백분율 기호를 이스케이프 처리하는 방법

Git 태그를 사용하여 내 문서에 개정 내역 테이블을 작성하는 매크로를 작업 중입니다. 내 문서의 게시된 각 버전에는 간단한 설명이 포함된 태그가 있습니다. Windows에서 XeLaTeX로 컴파일하는 동안 개정 테이블을 자동으로 작성하는 데 사용하고 싶습니다.

아래 Git 명령을 사용하면 개정 기록 테이블을 만드는 데 필요한 모든 정보를 얻을 수 있습니다. 출력은 CSV와 유사한 형식으로 형식화됩니다.

git for-each-ref --format='%(refname:short); %(taggerdate:short); %(subject); %(*authorname); %(*authoremail)' refs/tags

나는CSV 파일 구문 분석을 위한 매크로Git 명령의 출력을 읽고 개정 내역 테이블(아직 스크립트에서 테이블 형식이 지정되지 않음)을 작성할 수 있습니다.

\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}

미리 저장된 명령 출력으로 작동하지만 전체 명령 문자열을 에 붙여넣고 \@@input컴파일하려고 하면( xelatex -shell-escape .\read-git-history-test.tex) XeLaTeX가 다음과 같이 불평합니다.

{|"git for-each-ref --format='
! Paragraph ended before \@iinput was complete.
<to be read again>
                   \par

Git 별칭(-아래 참조)을 정의하여 해결 방법을 수행했지만 git revhist동료 중 한 명이 별칭을 정의하지 않고 컴파일하려고 하면 실패합니다. 아니요, 그들은 REDAME을 읽지 않습니다...

git config --global alias.revhist "for-each-ref --format='%(refname:short); %(taggerdate:short); %(subject); %(*authorname); %(*authoremail);' refs/tags"

*.tex기호로 인해 손상되지 않도록 파일 에서 전체 Git 명령을 호출할 수 있습니까 %?

답변1

\@percentchar@DavidCarlisle이 제안한 대로 사용했는데 예상대로 작동합니다.

\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 %

관련 정보