Notação Landau com argumento opcional

Notação Landau com argumento opcional

Gostaria de criar um comando para as notações de Landau (o minúsculo por exemplo), que teria um argumento opcional composto por dois elementos (a variável e o ponto) separados por vírgula. Como eu faço isso?

Aqui está um exemplo.

\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}

Responder1

Para mim a \petito[x,\infty]{...}sintaxe é ruim, tanto para ler quanto para analisar, mais fácil de usar [x\to\infty]diretamente

\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}

Notas: $...$deverianuncaescreva abaixo, que atrapalha o espaçamento entre linhas, portanto \DeclareMathOperator*é usado para fazer uma macro que se comporta como \lim.

Além disso, não sou fã do escalonamento automático da cerca, mas deixei-o aqui.

Responder2

Não vejo como a sintaxe proposta seria mais clara ou mais fácil do que

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

ou, se quiser especificar de forma mais fácil o tamanho dos parênteses,

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

com talvez

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

para parênteses maiores ou

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

para dimensionamento automático.

Você pode perceber a última sintaxe facilmente com ltcmd(anteriormente 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}

insira a descrição da imagem aqui

informação relacionada