如何使用包含“{”的代码的“patchcmd”?

如何使用包含“{”的代码的“patchcmd”?

我有一个带有长 的宏hbox,我想tikz通过在其 前面添加一行代码来集成一个简单的框{。但是,由于该行中包含花括号,我面临挑战。这里有一个 (MWE) 来说明,我需要用\hbox{%替换\hbox{\tikz[anchor=base,baseline]\node[red] at (0,0) {Tikz};%

\documentclass{article}

\usepackage{tikz}
\usepackage{etoolbox}

\def\text{\hbox{% 
This is a test.
%several lines of code here
}}


\patchcmd{\text}{\hbox{%
}
{\hbox{\tikz[anchor=base,baseline]\node[red] at (0,0) {Tikz};%
}
{\typeout{SUCCEEDED}}{\typeout{FAILED}}

\begin{document}
\text
\end{document}

虽然我知道我可以使用整个\hbox{}结构进行修补,但我发现为了修改一行代码而重复大量代码很麻烦。具体来说,我正在寻找一种更简洁的方法来实现这一点。

答案1

你绝对不能用 来做到这一点\patchcmd

我并不是推荐这个,但是,嘿,它确实有效!

\documentclass{article}

\usepackage{tikz}
\usepackage{regexpatch}

\def\mytext{%
  \hbox{%
    This is a test.%
    %several lines of code here
  }%
}

\regexpatchcmd{\mytext}
  {\c{hbox}\{}
  {\c{\hbox}\{\c{tikz}[anchor=base,baseline]\c{node}[red]\ at\ (0,0)\ {Tikz};}
  {\typeout{SUCCESS}}{\typeout{FAILURE}}

\begin{document}

\mytext

\end{document}

如果你\show\mytext在补丁完成后这样做,你就会得到

> \mytext=macro:
->\hbox {\tikz [anchor=base,baseline]\node [red] at (0,0) {Tikz};This is a test.}.

你也可以省去一些麻烦

\documentclass{article}

\usepackage{tikz}
\usepackage{regexpatch}

\def\mytext{%
  \hbox{%
    This is a test.%
    %several lines of code here
  }%
}

\def\tmp{\tikz[anchor=base,baseline]\node[red] at (0,0) {Tikz};}

\regexpatchcmd{\mytext}
  {\c{hbox}\{}
  {\0\u{tmp}}
  {\typeout{SUCCESS}}{\typeout{FAILURE}}

\begin{document}

\mytext

\show\mytext

\end{document}

解释:

  1. \c{hbox}火柴\hbox;
  2. \{与括号匹配;
  3. \0代表比赛;
  4. \u{tmp}被宏的内容替换\tmp

答案2

您可以先定义一个命令,在其中添加内容\hbox,然后\hbox通过修补用您的自定义命令替换:

\documentclass{article}
\usepackage{tikz}
\usepackage{etoolbox}

\newcommand\myhbox[1]{%
    \hbox{\tikz[anchor=base,baseline]\node[red] at (0,0) {Tikz};%
        #1%
    }%
}

\newcommand\mytext{%
    \hbox{% 
        This is a test.
        %several lines of code here
    }%
}

\patchcmd{\mytext}
    {\hbox}
    {\myhbox}
    {\typeout{SUCCEDED}}{\typeout{FAILED}}

\begin{document}
\mytext
\end{document}

在此处输入图片描述

相关内容