\renewcommand 容量超出错误

\renewcommand 容量超出错误

当我编写命令时,\in我多次需要添加\nolinebreak,所以我在序言中写道\renewcommand{\in}{\in \nolinebreak},但这导致了错误消息{见下文}。我怀疑这与需要处于数学模式有关,\in但我不知道如何修复它。有什么建议吗?

\documentclass{book}

\usepackage{amsfonts}
\usepackage{amsthm}
\usepackage{amsmath}

\renewcommand{\in}{\in \nolinebreak}

\begin{document}
$ x \in c $
\end{document}

Error ! TeX capacity exceeded, sorry [input stack size=5000].\in ->\in\nolinebreak $ x \in

答案1

这与数学模式无关。这是一个更简单的例子:

\documentclass{article}
\newcommand*\robin{Robin}
\renewcommand*\robin{\robin~Hood}
\begin{document}
\robin
\end{document}

这会出现错误:

! TeX capacity exceeded, sorry [input stack size=5000].
\robin ->\robin 
                ~Hood
l.14 \robin

!  ==> Fatal error occurred, no output PDF file produced!

为什么?

的定义\robin很好。但随后它被重新定义为…… \robin。因此,当 TeX 尝试扩展 时\robin,它会尝试扩展\robin~Hood。因此它首先尝试扩展\robin。因此它尝试扩展\robin~Hood~Hood并首先尝试扩展\robin并……无限循环。它无法管理无限循环,因此当容量耗尽时它会声明致命错误。你必须明白它的意思。

无限罗宾

在这种情况下,你需要首先保存旧定义因此您可以在新的定义中使用旧的定义:

\documentclass{article}
\newcommand*\robin{Robin}
\let\oldrobin\robin
\renewcommand*\robin{\oldrobin~Hood}
\begin{document}
\robin
\end{document}

一个罗宾汉

话虽如此,我认为重新定义是不明智的\in,而且我怀疑,如果您试图按照您描述的方式重新定义它,那么您使用的数学排版环境可能不是最好的。但是,由于您的实际示例并未说明您为何如此想这样做,因此需要更多的背景信息才能进一步说明这一点。

答案2

尝试这个:

\let\oldin\in
\renewcommand{\in}{\oldin\nolinebreak}

相关内容