如何告訴輸入指令忽略特殊字元(如動詞模式)?

如何告訴輸入指令忽略特殊字元(如動詞模式)?

我使用以下行將 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.texa_x%y.tex只是為了顯示第一個可選參數的用法。反斜線、百分號和井號 ( ) 等字元需要反斜線#

在此輸入影像描述

相關內容