\renewcommand 为 \forall 添加参数

\renewcommand 为 \forall 添加参数

嗨,我正在尝试重新定义\forall命令,以便它接受参数而不是使用常规并置。

目前的情况是

\renewcommand{\forall}[1]{\forall{(#1)}\;}

不适用于

\forall{(u,v) \in V \times V}

产生错误信息:

! TeX capacity exceeded, sorry [input stack size=5000].

\forall #1->\forall (
                     #1)\;

尽管需要替换\forall文档中出现的每一个内容,但下面的方法仍然有效:

\newcommand{\all}[1]{\forall{(#1)}\;}

这种重新定义是否具有内在的递归性?

答案1

你的定义是递归。

\documentclass{article}

\let\ForAll\forall
\renewcommand\forall[1]{\ForAll{(#1)}\;}
\begin{document}

$\forall{(u,v) \in V \times V}$

\end{document}

答案2

我不会改变标准命令的语义。定义如下可能更好\Forall

\newcommand{\Forall}[1]{\forall{(#1)}\;}

而不是重新定义\forall

只是为了好玩,\let如果你决定不服从,这是一个“免费”的解决方案:

\documentclass{article}

\edef\forall#1{\mathchar\number\forall{(#1)}\noexpand\;}

\begin{document}

$\forall{(u,v) \in V \times V}$

\end{document}

有点困难\renewcommand,但可以做到:

\expandafter\renewcommand\expandafter\forall\expandafter[\expandafter1\expandafter]%
\expandafter{\expandafter\mathchar\number\forall{(#1)}\;}

或者

\begingroup\edef\x{\endgroup
  \unexpanded{\renewcommand\forall[1]}{\mathchar\number\forall{(##1)}\noexpand\;}%
}\x

相关内容