关于重新定义“amsart”中的“\lim”命令的查询

关于重新定义“amsart”中的“\lim”命令的查询

我尝试重新定义命令\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}

你得到输出

在此处输入图片描述

你应该将它与没有重新定义时得到的结果进行比较

在此处输入图片描述

我毫不怀疑哪一个更好(当然是后者)。但选择权在你手中。

相关内容