
Я работаю над макросом, который будет строить таблицу истории ревизий в моем документе с использованием тегов Git. Каждая опубликованная версия моего документа имеет тег с кратким описанием. Я хочу использовать их для автоматического построения таблицы ревизий при компиляции с помощью XeLaTeX в Windows.
Используя команду 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"
Можно ли вызвать полную команду Git в *.tex
файле, не повреждая его знаками %
?
решение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 %