%3F.png)
Я использую следующую строку, чтобы записать в PDF-файл имя репозитория git с исходным кодом документа:
\input|"git config --get remote.origin.url | xargs basename"
Я столкнулся с проблемой с одним репозиторием, в имени которого есть подчеркивание, например repo_name
, , поскольку этот специальный символ заставляет мой компилятор переключаться в математический режим.
Я, вероятно, мог бы использовать \catcode
то, что показано на рисунке.другой ответ, но не только подчеркивание может вызывать проблемы, и я бы предпочел сделать его устойчивым ко всем специальным символам, которые могут встречаться в именах каталогов.
решение1
Вы можете использовать catchfile
:
\documentclass{article}
\usepackage{catchfile}
\begin{document}
\CatchFileDef\repository{|"kpsewhich eng_rs.sty | xargs basename"}{\catcode`_=12 }
\texttt{\repository}
\texttt{\meaning\repository}
\end{document}
Я использовал имя файла с подчеркиванием просто в качестве примера.
Возможно, лучшая версия xparse
:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\getfilename}{O{}mo}
{
% #1 = optional list of characters to be made printable
% #2 = variable part
% #3 = optional command to save the returned token list in
\tl_set_from_file:Nnn \l_maciek_filename_tl
{
\maciek_filename_setother:n { #1 }
}
{
|"#2"
}
\IfValueTF{#3}
{
\tl_clear_new:N #3
\tl_set_eq:NN #3 \l_maciek_filename_tl
}
{
\tl_use:N \l_maciek_filename_tl
}
}
\cs_new_protected:Nn \maciek_filename_setother:n
{
\tl_map_function:nN { #1 } \char_set_catcode_other:N
}
\ExplSyntaxOff
\begin{document}
\getfilename[_]{kpsewhich eng_rs.sty | xargs basename}
\getfilename[_]{kpsewhich eng_rs.sty | xargs dirname}[\foo]
\meaning\foo
\getfilename[\%]{ls | grep b}
\getfilename[\%_]{ls | grep y}
\end{document}
Я создал два файла a%b.tex
и a_x%y.tex
просто для того, чтобы показать использование первого необязательного аргумента. Обратная косая черта нужна для таких символов, как обратная косая черта, процент и решетка ( #
).