Как указать команде ввода игнорировать специальные символы (как в режиме глагола)?

Как указать команде ввода игнорировать специальные символы (как в режиме глагола)?

Я использую следующую строку, чтобы записать в 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просто для того, чтобы показать использование первого необязательного аргумента. Обратная косая черта нужна для таких символов, как обратная косая черта, процент и решетка ( #).

введите описание изображения здесь

Связанный контент