如何在宏中进行搜索和替换?

如何在宏中进行搜索和替换?

是否可以让 (La)TeX 在编译时搜索并替换宏中的文本?例如,给定

\newcommand{\sometext}{a b c d e f g}

我想要一些类似的东西

\searchreplace{\sometext}{b c}{x

y}

这将导致

a x

y d e f g

理想情况下,这可以通过替换宏来实现,例如

\searchreplace{hi {\itshape there}}{\itshape}{\bfseries}

然后会产生(并解释)

hi {\bfseries there}

答案1

etoolbox通过 提供此功能,它在\patchcmd{<cmd>}{<search>}{<replace>}{<success>}{<failure>}其中搜索并将其替换为,如果搜索和替换成功则执行,否则。<search><cmd><replace><success><failure>

下面使用传递给的基本参数\patchcmd

在此处输入图片描述

\documentclass{article}

\usepackage{etoolbox}

% \patchcmd{<cmd>}{<search>}{<replace>}{<success>}{<failure>}
\newcommand{\searchreplace}[3]{\patchcmd{#1}{#2}{#3}{}{}}

\begin{document}

\newcommand{\sometext}{a b c d e f g}

\sometext

\searchreplace{\sometext}{b c}{x

y}

\sometext

\end{document}

建议也包括以下内容,\tracingpatches以便确保(通过.log)如果修补不成功,到底出了什么问题。

你可能会遇到某些宏的问题,而你的替代方案是xpatch当然,也存在其他选项(例如,regexpatch)。

相关内容