入力コマンドに特殊文字を無視するように指示するにはどうすればよいですか (動詞モードなど)?

入力コマンドに特殊文字を無視するように指示するにはどうすればよいですか (動詞モードなど)?

次の行を使用して、ドキュメントのソース コードを含む Git リポジトリの名前を PDF に書き込みます。

\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最初のオプション引数の使用方法を示すために、2 つのファイルを作成しました。バックスラッシュ、パーセント、ハッシュ マーク ( )a_x%y.texなどの文字にはバックスラッシュが必要です。#

ここに画像の説明を入力してください

関連情報