선택적 인수가 있는 Landau 표기법

선택적 인수가 있는 Landau 표기법

쉼표로 구분된 두 요소(변수와 점)로 구성된 선택적 인수를 갖는 Landau 표기법(예: 작은 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}

여기에 이미지 설명을 입력하세요

관련 정보