![\renewcommand 为 \forall 添加参数](https://linux22.com/image/281018/%5Crenewcommand%20%E4%B8%BA%20%5Cforall%20%E6%B7%BB%E5%8A%A0%E5%8F%82%E6%95%B0.png)
嗨,我正在尝试重新定义\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