
Я ищу способ определитьнастраиваемыйОператор предела и суммы. В настоящее время у меня есть сильные/слабые пределы, определенные через
\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
Не хочу ничего красть из прекрасного ответа Кампы, но в предлагаемом коде есть возможности для улучшения.
Если вам нужен универсальный способ добавления префиксов \lim
и \sum
и определения команд в терминах универсальных, то интерфейс с ним xparse
будет проще.
Я согласен с кампой, что лимиты должны быть центрированы ниже всего «префиксированного лимита», но только в отношении крупного оператора в случае \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
.