특수 문자를 무시하도록 입력 명령에 지시하는 방법(동사 모드에서와 같이)?

특수 문자를 무시하도록 입력 명령에 지시하는 방법(동사 모드에서와 같이)?

다음 줄을 사용하여 문서의 소스 코드와 함께 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두 개의 파일을 만들었습니다 . a_x%y.tex백슬래시, 퍼센트, 해시 표시( ) 등의 문자에는 백슬래시가 필요합니다 #.

여기에 이미지 설명을 입력하세요

관련 정보