
我正在開發一個宏,它將使用 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
我按照@DavidCarlisle 的建議使用\@percentchar
,它按預期工作。
\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 %