我正在开发一个宏,它将使用 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 %