帶有可選參數的朗道表示法

帶有可選參數的朗道表示法

我想為蘭道符號(例如小 o)建立一個命令,它有一個可選參數,由兩個元素(變數和點)組成,以逗號分隔。我該怎麼做呢?

這是一個例子。

\documentclass[11pt]{article}
\usepackage{amsmath}

\begin{document}

% \petito[x, \infty]{\ln x}. Expected result :
$ \underset{x \rightarrow \infty}{\mathrm{o}} \left( \ln x \right)$ 

% \petito{\ln x}. Expected result :
$ \mathrm{o} \left( \ln x \right)$ 

\end{document}

答案1

對我來說\petito[x,\infty]{...}語法很糟糕,無論是閱讀還是解析,直接使用都更[x\to\infty]容易

\documentclass[11pt]{article}
\usepackage{amsmath}
\DeclareMathOperator*{\ooo}{o}
\NewDocumentCommand\petito{o m}{
  \IfNoValueTF{#1}{
    % normal case
    \ooo\left(#2\right)
  }{
    \ooo_{#1}\left(#2\right)
  }
}
\begin{document}

$\petito[x\to\infty]{\ln x}$

\[
  \petito[x\to\infty]{\ln x}
\]

$ \underset{x \rightarrow \infty}{\mathrm{o}} \left( \ln x \right)$ 


$\petito{\ln x}$

$ \mathrm{o} \left( \ln x \right)$ 

\end{document}

筆記:$...$應該絕不寫在下面,這會擾亂行間距,因此\DeclareMathOperator*用於製作一個行為類似於 的巨集\lim

另外,我不喜歡柵欄自動縮放,但我把它留在這裡了。

答案2

我不認為建議的語法會比

\petito_{x\to\infty}(\log x)

或者,如果您想以更簡單的方式指定括號的大小,

\petito_{x\to\infty}{\log x}

也許與

\petito_{x\to\infty}[big]{\log x}

對於較大的括號或

\petito_{x\to\infty}[*]{\log x}

對於自動調整大小的。

ltcmd您可以使用(以前的)輕鬆實現後一種語法xparse

\documentclass{article}
\usepackage{amsmath}

\NewDocumentCommand{\petito}{e{_}O{}m}{%
  \genericlandau{o}{#1}{#2}{#3}%
}
\NewDocumentCommand{\grando}{e{_}O{}m}{%
  \genericlandau{\mathit{O}}{#1}{#2}{#3}%
}

\ExplSyntaxOn

\NewDocumentCommand{\genericlandau}{mmmm}
 {
  \operatorname*{#1}
  \IfValueT{#2}{\sb{#2}}% the subscript
  \jowe_landau_arg:nn { #3 } { #4 }
 }

\cs_new_protected:Nn \jowe_landau_arg:nn
 {
  \str_case:nnF { #1 }
   {
    {*}{\left}
    {}{}
   }
   { \use:c { #1l } } (
  #2
  \str_case:nnF { #1 }
   {
    {*}{\right}
    {}{}
   }
   { \use:c { #1r } } )
 }

\ExplSyntaxOff

\begin{document}

\begin{gather}
\petito{\log x} \\
\petito[big]{\log x} \\
\petito[Big]{\log x} \\
\petito[*]{\frac{\sin x}{x}} \\
\petito_{x\to\infty}{\log x} \\
\petito_{x\to\infty}[big]{\log x} \\
\petito_{x\to\infty}[Big]{\log x} \\
\petito_{x\to\infty}[*]{\frac{\sin x}{x}} \\
\grando{\log x} \\
\grando[big]{\log x} \\
\grando[Big]{\log x} \\
\grando[*]{\frac{\sin x}{x}} \\
\grando_{x\to\infty}{\log x} \\
\grando_{x\to\infty}[big]{\log x} \\
\grando_{x\to\infty}[Big]{\log x} \\
\grando_{x\to\infty}[*]{\frac{\sin x}{x}}
\end{gather}

\end{document}

在此輸入影像描述

相關內容