当我编写命令时,\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}