¿Cómo decirle al comando de entrada que ignore los caracteres especiales (como en el modo verbal)?

¿Cómo decirle al comando de entrada que ignore los caracteres especiales (como en el modo verbal)?

Utilizo la siguiente línea para escribir en el PDF el nombre del repositorio git con el código fuente del documento:

\input|"git config --get remote.origin.url | xargs basename"

Tengo un problema con un repositorio con un guión bajo en el nombre, por ejemplo repo_name, ya que el carácter especial hace que mi compilador cambie al modo matemático.

Probablemente podría usar el \catcodecomo se muestra en elotra respuesta, pero no es sólo el guión bajo lo que puede causar problemas, y preferiría hacerlo robusto contra todos los caracteres especiales que puedan aparecer en los nombres de los directorios.

Respuesta1

Puedes 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}

Utilicé un nombre de archivo con un guión bajo, sólo a modo de ejemplo.

ingrese la descripción de la imagen aquí

Una versión posiblemente mejor, con 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}

He creado dos archivos a%b.texy a_x%y.texsolo para mostrar el uso del primer argumento opcional. Se necesita una barra invertida para caracteres como barra invertida, porcentaje y marca de almohadilla ( #).

ingrese la descripción de la imagen aquí

información relacionada