カスタマイズ可能な制限と合計記号

カスタマイズ可能な制限と合計記号

私は定義する方法を探していますカスタマイズ可能制限と合計演算子。現在、私は強い/弱い制限を定義しています。

\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

関連情報