매개변수에서 일치하는 토큰을 대체하는 매크로?

매개변수에서 일치하는 토큰을 대체하는 매크로?

\magicreplace매크로를 갖고 싶습니다 . 임의의 매개변수(= 토큰 시퀀스)를 가져오고 일부 토큰(예: a또는 x또는 ,)의 모든 발생을 고정된 토큰 시퀀스(예 hello: 또는 또는 \text{hello}) 로 바꾸는 매크로를 호출하고 싶습니다 .

따라서 .\magicreplace{a}{abc{abc}}hellobc{abc}

이를 위해 일부 패키지에 사용할 수 있는 것이 있습니까? 그렇지 않다면 어떻게 구현해야 할까요?

노트:

  • 일반 TeX가 아닌 LaTeX가 될 수 있습니다.
  • pdftex 및/또는 xetex 부탁드립니다.

답변1

이 기능은 다음에서 이미 사용 가능합니다 expl3.

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\magicreplace}{mmm}
 {
  \tl_set:Nn \l_einpoklum_magicreplace_tl { #3 }
  \tl_replace_all:Nnn \l_einpoklum_magicreplace_tl { #1 } { #2 }
  \tl_use:N \l_einpoklum_magicreplace_tl
 }
\tl_new:N \l_einpoklum_magicreplace_tl
\ExplSyntaxOff

\begin{document}

\magicreplace{a}{hello}{abc{abc}}

\magicreplace{a}{hello}{a b c{a b c}a}

\end{document}

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

대체 문자열이 고정된(그러나 변경 가능) 다른 버전입니다.

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\magicreplace}{mm}
 {
  \tl_set:Nn \l_einpoklum_magicreplace_tl { #2 }
  \tl_replace_all:NnV \l_einpoklum_magicreplace_tl { #1 } \l_einpoklum_magicreplace_rep_tl
  \tl_use:N \l_einpoklum_magicreplace_tl
 }
\NewDocumentCommand{\setreplacement}{m}
 {
  \tl_set:Nn \l_einpoklum_magicreplace_rep_tl { #1 }
 }

\tl_new:N \l_einpoklum_magicreplace_tl
\tl_new:N \l_einpoklum_magicreplace_rep_tl
\cs_generate_variant:Nn \tl_replace_all:Nnn { NnV }
\ExplSyntaxOff

\begin{document}

\setreplacement{hello}

\magicreplace{a}{hello}{abc{abc}}

\setreplacement{world}
\magicreplace{a}{a b c{a b c}a}

\end{document}

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

답변2

공백에 대해 더 주의를 기울이는 것이 가능하지만 간단한 버전은 다음과 같습니다.

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

\documentclass{article}

\def\zz#1#2#3{\def\zzz##1#1{##1#2\zzz}{\zzz#3\zzzz#1\relax}}
\def\zzzz#1\relax{}
\begin{document}

\zz{a}{hello}{abc{abc}abc}
\end{document}

관련 정보