可定制的限制和总和符号

可定制的限制和总和符号

我正在寻找一种方法来定义可定制限制和求和运算符。目前,我通过以下方式定义强/弱限制

\DeclareMathOperator*{\slim}{\mathfrak{s}-lim}
\DeclareMathOperator*{\wlim}{\mathfrak{w}-lim}
\DeclareMathOperator*{\wslim}{\mathfrak{w*}-lim}

但我希望有更多自由,比如$\lim[\mu]$渲染为具有适当限制的 μ-lim,以及总和($\sum[\mu]$渲染为 μ-Σ)。我该如何实现这一点?

答案1

这是一个可能的实现,假设您正在加载amsmath

\documentclass{article}

\usepackage{amsmath}

\makeatletter

\newcommand*{\plim}[1][]{%
   \if\relax\detokenize{#1}\relax
      \def\next{\qopname\relax m{lim}}%
   \else
      \def\next{\qopname\newmcodes@ m{#1-lim}}%
   \fi
   \next
}

\newcommand*{\psum}[1][]{%
   \DOTSB
   \if\relax\detokenize{#1}\relax\else
      \operatorname{#1-}\mkern-\thinmuskip
   \fi
   \sum@\slimits@
}

\makeatother


\begin{document}

\begin{gather*}
\plim_{x\to0} \quad \plim[s]_{x\to0} \quad \plim[\mu]_{x\to0} \\[2ex]
\psum_i a_i \quad \psum[\mu]_i a_i
\end{gather*}

\end{document}

在此处输入图片描述

我选择了极限的放置方式,使得它们在极限的情况下位于整个表达式的中心,但始终只位于和符号下方(无论之前是什么)。

我个人认为使用更安全新的宏名。当然,没有人阻止你将上面的代码改为

\renewcommand*{\lim}[1][]{%
   \if\relax\detokenize{#1}\relax
      \def\next{\qopname\relax m{lim}}%
   \else
      \def\next{\qopname\newmcodes@ m{#1-lim}}%
   \fi
   \next
}

\renewcommand*{\sum}[1][]{%
   \DOTSB
   \if\relax\detokenize{#1}\relax\else
      \operatorname{#1-}\mkern-\thinmuskip
   \fi
   \sum@\slimits@
}

请注意,可能会存在缺点。

答案2

并不是要从 campa 的非常好的答案中窃取任何东西,但是提议的代码还有改进的空间。

如果您想要一种通用的方式来添加前缀\lim\sum根据通用命令来定义命令,那么使用接口xparse会更容易。

我同意 campa 的观点,即限制应该位于整个“前缀限制”之下,但仅限于在出现\sum或类似情况时出现的大运算符。

\documentclass{article}
\usepackage{amsmath}
%\usepackage{xparse} % not needed with LaTeX 2020-10-01 or later

\NewDocumentCommand{\prelim}{mm}{%
  \operatorname*{#1-{#2}}%
}
\NewDocumentCommand{\preop}{mO{\thinmuskip}m}{%
  \DOTSB\operatorname{#1-}\mspace{-#2}#3%
}

\newcommand{\mulim}{\prelim{\mu}{\lim}}
\newcommand{\xlimsup}{\prelim{x}{\limsup}}

\newcommand{\musum}{\preop{\mu}[6mu]{\sum}}
\newcommand{\mubigcup}{\preop{\mu}{\bigcup}}

\begin{document}

\begin{gather*}
\mulim_{x\to0} f(x) \\
\xlimsup_{x\to\infty} f(x) \\
\musum_{i=1}^{n} a_i \\
\mubigcup_{i\in I}A_i
\end{gather*}

\end{document}

我会避免重新定义\lim\sum。对于偶尔出现的非预定义运算符,您可以使用\prelim\preop以及适当的参数。该\preop命令有一个中间可选参数,用于改善前缀和符号之间的字距,使用 效果更好\sum,但使用 效果不佳\bigcup

在此处输入图片描述

答案3

您还可以使用现有的命令,并重新定义它们以添加添加前缀的可选参数。

\documentclass{article}
\usepackage{amsmath}
\let\oldlim\lim
\let\oldsum\sum
\renewcommand*{\lim}[1][]{%
    \def\temp{#1}%
    \ifx\temp\empty
        \oldlim%
    \else
        #1\text{--}\!\oldlim%
    \fi%
}
\renewcommand*{\sum}[1][]{%
    \def\temp{#1}%
    \ifx\temp\empty
        \oldsum%
    \else
        #1\text{--}\!\!\oldsum%
    \fi%
}
\begin{document}
\(\lim_{x\to 0} f(x)\) 
\(\lim[\mu]_{x\to 0} f(x)\)
\[
\lim_{x\to 0} f(x)
\qquad
\lim[\mu]_{x\to 0} f(x)
\]

\(\sum_{n=0}^\infty f(n)\)
\(\sum[\mu]_{n=0}^\infty f(n)\)
\[
\sum_{n=0}^\infty f(n)
\qquad
\sum[\mu]_{n=0}^\infty f(n)
\]
\end{document}

我将间距调整到我认为好看的程度,但是可以在\lim和的重新定义中轻松更改\sum

相关内容