我如何创建始终具有相同行为的宏?

我如何创建始终具有相同行为的宏?

所以这个问题实际上是两个,但我认为它们会以相同的方式解决,所以我把它们放在一起。这种形式\textstyle\lim_{n\to\infty}总是困扰着我,因为它占用了大量的水平空间,而\displaystyle\lim_{n\to\infty}没有占用太多额外的垂直空间。我试图使用它\DeclareMathOperator*{\mylim}{{\displaystyle\lim}}来创建一个新的限制命令,这样我就不必输入\displaystyle一百万次,但它不起作用。有人能帮忙吗?

另外,我尝试用 做类似的事情\DeclareMathOperator*{\mysum}{{\textstyle\sum}},但也没有成功。修复方法和上面的一样吗?

梅威瑟:

\documentclass[12pt]{letter}
\usepackage{amsmath,amssymb,amsthm}

\DeclareMathOperator*{\mylim}{{\displaystyle\lim}}
\DeclareMathOperator*{\mysum}{{\textstyle\sum}}

\begin{document}
$\mylim_{n\to\infty} x_n = \displaystyle\lim_{n\to\infty} x_n$

\begin{equation*}
     \mysum_{n=1}^\infty x_n = \displaystyle\sum_{n=1}^\infty x_n
\end{equation*}
\end{document}

答案1

amsmath默认情况下(更具体地说amsopn):

  • 带星号的版本\DeclareMathOperator*会创建一个大运算符,将下标/上标放置在像\sum和 这样\lim的位置;也就是说,在显示数学中位于下方/上方,而在内联数学中位于右下角/右上方。
  • 非星号版本\DeclareMathOperator会创建一个大运算符,用于放置下标/上标,如\sin\log;即,总是右下/右上。

因此,如果你想要\sum1)始终将脚本放在右侧2)始终存在\textstyle(后者是比较棘手的部分),你可以简单地这样做

\DeclareMathOperator{\mysum}{\textstyle\sum}% <- The effect of \textstyle is local!

好的,“脚本总是低于/高于”部分是真正棘手的部分,您希望操作员始终在场\displaystyle(后者在您当前的设置下是值得怀疑的,因此我将提供两种不同的方法)。

更新:我将 在以下解决方案中 使用一个宏\mustlimits@,该宏镜像 \nolimits@自 。由于宏名称包含,因此以下代码片段应包装在 内。amsopn@\makeatletter ... \makeatother

  1. 你只是想要\limits,但实际上又不想要\displaystyle由于\lim本质上只是罗马文字,因此它仅带有样式。要强制使用以下/以上脚本,只需执行

    \newcommand{\mylim}{\lim\mustlimits@}
    
  2. 你确实想要\displaystyle(尽管\lim只有一种风格!)好吧,如你所愿:

    \newcommand{\mydisplaylim}{%
      \mathop{\hbox{$\displaystyle\m@th\operator@font lim$}}\mustlimits@
    }
    \newcommand{\mydisplaysum}{%
      \mathop{\displaystyle\sum}\mustlimits@
    }
    
  3. 那么它\mustlimits@到底是什么呢?它的定义如下:

    \newcommand*{\mustlimits@}{\@ifnextchar\nolimits{\limits\@gobble}{\limits}}
    

梅威瑟:

\documentclass[12pt]{letter}
\usepackage{amsmath,amssymb,amsthm}

\DeclareMathOperator{\mysum}{\textstyle\sum}% <- The effect of \textstyle is local!
\makeatletter
\newcommand{\mylim}{\lim\mustlimits@}
\newcommand{\mydisplaylim}{%
  \mathop{\hbox{$\displaystyle\m@th\operator@font lim$}}\mustlimits@
}
\newcommand{\mydisplaysum}{%
  \mathop{\displaystyle\sum}\mustlimits@
}
\newcommand*{\mustlimits@}{\@ifnextchar\nolimits{\limits\@gobble}{\limits}}
\makeatother

\begin{document}
$\mylim_{n\to\infty} x_n = \lim_{n\to\infty} x_n$

\begin{equation*}
     \mysum_{n=1}^\infty x_n = \sum_{n=1}^\infty x_n
\end{equation*}

$\mydisplaylim_{n\to\infty} x_n = \lim_{n\to\infty} x_n$

$\mydisplaysum_{n=1}^\infty x_n = \sum_{n=1}^\infty x_n$
\end{document}

样式


添加\mylim:正如@DavidCarlisle 在评论中指出的那样,\mydisplaylim 很可能会增加行距。 我会不是建议使用\mylim\mysum\mydisplaylim中的任一个\mydisplaysum

答案2

您也可以\newcommand改用,与\limits和一起使用\nolimits

\documentclass[12pt]{letter}
\usepackage{amsmath,amssymb,amsthm}

\newcommand{\mylim}{\lim\limits}
\newcommand{\mysum}{\sum\nolimits}

\begin{document}
$\mylim_{n\to\infty} x_n = \displaystyle\lim_{n\to\infty} x_n$

\begin{equation*}
     \mysum_{n=1}^\infty x_n = \displaystyle\sum_{n=1}^\infty x_n
\end{equation*}
\end{document}

在此处输入图片描述

相关内容