Como dizer ao comando de entrada para ignorar os caracteres especiais (como no modo verbo.)?

Como dizer ao comando de entrada para ignorar os caracteres especiais (como no modo verbo.)?

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 \catcodecomo 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.

insira a descrição da imagem aqui

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.texapenas a_x%y.texpara mostrar o uso do primeiro argumento opcional. Uma barra invertida é necessária para caracteres como barra invertida, porcentagem e hash ( #).

insira a descrição da imagem aqui

informação relacionada