%3F.png)
Eu uso a seguinte linha para escrever no PDF o nome do repositório git com o código fonte do documento:
\input|"git config --get remote.origin.url | xargs basename"
Estou enfrentando um problema com um repositório com sublinhado no nome, por exemplo repo_name
, pois o caractere especial faz meu compilador mudar para o modo matemático.
Eu provavelmente poderia usar o \catcode
como mostrado nooutra resposta, mas não é apenas o sublinhado que pode causar problemas, e eu preferiria torná-lo robusto contra todos os caracteres especiais que possam ocorrer em nomes de diretórios.
Responder1
Você pode usar catchfile
:
\documentclass{article}
\usepackage{catchfile}
\begin{document}
\CatchFileDef\repository{|"kpsewhich eng_rs.sty | xargs basename"}{\catcode`_=12 }
\texttt{\repository}
\texttt{\meaning\repository}
\end{document}
Usei um nome de arquivo com sublinhado, apenas a título de exemplo.
Uma versão possivelmente melhor, com 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}
Criei dois arquivos a%b.tex
apenas a_x%y.tex
para mostrar o uso do primeiro argumento opcional. Uma barra invertida é necessária para caracteres como barra invertida, porcentagem e hash ( #
).