![关于重新定义“amsart”中的“\lim”命令的查询](https://linux22.com/image/436976/%E5%85%B3%E4%BA%8E%E9%87%8D%E6%96%B0%E5%AE%9A%E4%B9%89%E2%80%9Camsart%E2%80%9D%E4%B8%AD%E7%9A%84%E2%80%9C%5Clim%E2%80%9D%E5%91%BD%E4%BB%A4%E7%9A%84%E6%9F%A5%E8%AF%A2.png)
我尝试重新定义命令\lim
,但收到错误消息。代码类似于以下内容:
\documentclass[oneside,10pt]{amsart}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{amssymb}
\usepackage{mathtools}
\usepackage{mathrsfs}
\newcommand{\li}{\lim\limits}
\renewcommand{\lim}{\li}
有关该问题的任何帮助都将有很大帮助。
问候,拉尔夫
PS: 这是因为 的\lim\limits
定义中吗\li
?这只是猜测。
答案1
如果你从终端执行此操作,latexdef -c amsart lim
你将获得
\lim:
macro:->\qopname \relax m{lim}
你不能按照你的方式去做,因为 TeX 会扩展宏,并且根据你的定义,你会连续得到
\lim
\li\limits
\lim\limits
\li\limits\limits
\lim\limits\limits
...
所以你会看到一个无限循环被创建,它很快就会填满 TeX 的内存(输入堆栈,正如错误消息所说)。
你可能做
\documentclass[oneside,10pt]{amsart}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{amssymb}
\usepackage{mathtools}
\usepackage{mathrsfs}
\NewCommandCopy{\originallim}{\lim}
\renewcommand{\lim}{\originallim\limits}
如果你有一个较旧的 TeX 系统(Overleaf 暂时不支持\NewCommandCopy
),你可以将下面这行代码替换掉
\NewCommandCopy{\originallim}{\lim}
和
\let\originallim\lim
因为最初latexdef
告诉我们这是安全的。
但你其实并不想这样。让我举个例子
\documentclass[oneside,10pt]{amsart}
\usepackage{lipsum}
\NewCommandCopy{\originallim}{\lim}
\renewcommand{\lim}{\originallim\limits}
\begin{document}
\lipsum[1][1-2]
$\lim_{x\to0}x^2=0$
\lipsum[2][1-3]
$\lim_{x\to0}x^2=0$
\lipsum[3][1-3]
$\lim_{x\to0}x^2=0$
\lipsum[4][1-3]
\end{document}
你得到输出
你应该将它与没有重新定义时得到的结果进行比较
我毫不怀疑哪一个更好(当然是后者)。但选择权在你手中。