我正在尝试从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
,所有\thing
s 都会被删除,直到\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.