有没有办法解决 \patchcmd 的这个限制?

有没有办法解决 \patchcmd 的这个限制?

\patchcmd著名人物的命令etoolbox\patchcmd软件包有一个小限制:每当在另一个命令的参数中使用时,修补似乎都会失败,并且搜索/替换文本本身包含对参数的引用。例如:

\documentclass{article}

\usepackage{etoolbox}

\def\test#1{#1test}

\ifdefparam{\test}{%
  \patchcmd{\test}{#1}{#1-}{\typeout{juhu!}}{\typeout{oje!}}%
}{%
}

\show\test

\begin{document}

\end{document}

这里,可以使用以下技巧轻松解决问题:

\documentclass{article}

\usepackage{etoolbox}

\def\test#1{#1test}

\ifdefparam{\test}\iftrue\iffalse
  \patchcmd{\test}{#1}{#1-}{\typeout{juhu!}}{\typeout{oje!}}
\fi

\show\test

\begin{document}

\end{document}

但问题仍然存在:是否有一种普遍适用的解决方法来解决这个限制\patchcmd

答案1

使用\xpatchcmd(实验性)提供的命令regexpatch包。最小示例:

\documentclass{article}

\usepackage{regexpatch}

\def\test#1{#1test}

\ifdefparam{\test}{%
  \xpatchcmd{\test}{#1}{#1-}{\typeout{juhu!}}{\typeout{oje!}}%
}{%
}

\show\test

\begin{document}

\end{document}

根据其文档,该regexpatch软件包是xpatchl3experimental包,旨在捆绑包中的底层 LaTeX3 包变得稳定后立即替换后者。

请注意,软件包\xpatchcmd所实现的xpatch显示出与 相同的限制\patchcmd。这可以通过软件包文档中的以下句子来解释regexpatch

该包现在完全独立于etoolbox

相关内容