用於替換參數中匹配標記的巨集?

用於替換參數中匹配標記的巨集?

我想要一個宏,調用\magicreplace它來獲取一些任意參數(=標記序列),並用一些固定的標記序列(例如,或)替換某些標記(例如a,或x)的每次出現。,hello\text{hello}

所以,\magicreplace{a}{abc{abc}}展開為hellobc{abc}.

某些軟體包中是否有可用的東西可以做到這一點?如果沒有,我將如何實施這個事情?

筆記:

  • 可以是 LaTeX 而不是普通的 TeX
  • 請提供 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}

相關內容