比较宏参数

比较宏参数

我正在尝试从a和比较和。可以通过重新定义和使它们扩展到它们的参数,然后比较参数并最终重置和的值来完成。但这看起来真的很丑。有没有更好的方法?比如→ ?b\f{a}\g{b}\f\g\f\g\skip\f{x}{x}

提前感谢您的回答。


我显然没能尽量减少我的问题,所以这里是整个事情:

\ExplSyntaxOn
\DeclareExpandableDocumentCommand \eatstart { m m } { \eat_loop:NN #1 #2 }
\DeclareExpandableDocumentCommand \eatstop { m } {}
\cs_new:Npn \eat_loop:NN #1 #2
{
  \token_if_eq_meaning:NNTF { #2 } { \eatstop }
  {
    #2
  }
  {
    \eat_loop_not_stop:NN { #1 } { #2 }
  }
}
\cs_new:Npn \eat_loop_not_stop:NN #1 #2
{
  \token_if_eq_meaning:NNTF { #2 } { #1 }
  {
    \eat_loop:NN { #1 }
  }
  {
    \token_if_expandable:NTF { #2 }
    {
      \expandafter\eat_loop:NN\expandafter#1#2
    }
    {
      #2
    }
  }
}
\ExplSyntaxOff


\begin{document}
\newcommand{\plop}{o}
\newcommand{\plip}{i}
[] = [\eatstart{\plop}\plop\eatstop{\plip}\plop\eatstop{\plop}]
\end{document}

这个想法是,在 a 之后\starteat\thing,所有\things 都会被删除,直到\eatstop\thing达到 a 或 a 字符。我的问题是,目前它停在任意位置\eatstop,我不知道如何让它只在 a 之后停止\eatstop\thing

答案1

您是否在寻找类似以下内容的内容(纯 TeX 语法,它也适用于 LaTeX,因为我不知道您正在使用什么):

\def\comparearguments#1#2#3#4{%
  \def\argI{#2}%
  \def\argII{#4}%
  \ifx\argI\argII
    \immediate\write16{* Arguments are equal.}%
  \else
    \immediate\write16{* Arguments are not equal.}%
  \fi
}

\comparearguments\f{a}\g{b}
\comparearguments\f{abc}\g{abc}
\comparearguments\f{a}\f{b}

结果:

* Arguments are not equal.
* Arguments are equal.
* Arguments are not equal.

相关内容