
\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}