%3F.png)
次の行を使用して、ドキュメントのソース コードを含む 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
などの文字にはバックスラッシュが必要です。#