
Estou procurando uma maneira de definir umCustomizáveloperador de limite e soma. Atualmente tenho limites fortes/fracos definidos através
\DeclareMathOperator*{\slim}{\mathfrak{s}-lim}
\DeclareMathOperator*{\wlim}{\mathfrak{w}-lim}
\DeclareMathOperator*{\wslim}{\mathfrak{w*}-lim}
mas eu gostaria de um pouco mais de liberdade, algo como $\lim[\mu]$
renderizar como μ-lim com limites apropriados, e o mesmo para somas ( $\sum[\mu]$
renderizar como μ-Σ). Como posso conseguir isso?
Responder1
Aqui está uma possível realização, supondo que você esteja carregando arquivos 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}
Escolhi a colocação dos limites de forma que fiquem centrados em toda a expressão no caso do limite, mas sempre apenas sob o símbolo da soma (não importa o que venha antes).
Pessoalmente acho que é mais seguro usarnovonomes de macros. Claro, ninguém impede que você altere o código acima para
\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@
}
Esteja ciente de que pode haver desvantagens.
Responder2
Não quero roubar nada da ótima resposta de campa, mas há espaço para melhorias no código proposto.
Se você deseja uma maneira genérica de prefixar \lim
e \sum
definir comandos em termos dos genéricos, uma interface xparse
é mais fácil.
Concordo com campa que os limites deveriam ser centrados abaixo de todo o “limite prefixado”, mas apenas no que diz respeito ao grande operador em caso de \sum
ou similares.
\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}
Eu evitaria redefinir \lim
e \sum
. Para o operador ocasional não predefinido, você pode usar \prelim
e \preop
com os argumentos adequados. O \preop
comando tem um argumento opcional intermediário que é usado para melhorar o kerning entre o prefixo e o símbolo, que é melhor com \sum
, mas não com \bigcup
.
Responder3
Você também pode usar os comandos existentes e apenas redefini-los para adicionar um argumento opcional que adicione um prefixo.
\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}
Ajustei o espaçamento para algo que achei que ficaria bom aqui, mas pode ser facilmente alterado nas redefinições de \lim
e \sum
.