Notación Landau con argumento opcional

Notación Landau con argumento opcional

Me gustaría crear un comando para las notaciones de Landau (o pequeña por ejemplo), que tendría un argumento opcional que constaría de dos elementos (la variable y el punto) separados por una coma. ¿Cómo hago esto?

Aquí hay un ejemplo.

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

Respuesta1

Para mí, la \petito[x,\infty]{...}sintaxis es mala, tanto para leer como para analizar, es más fácil de usar [x\to\infty]directamente.

\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: $...$deberíanuncaescriba a continuación, eso altera el espacio entre líneas, por lo que \DeclareMathOperator*se usa para crear una macro que se comporta como \lim.

Además, no soy un fanático del escalado automático de vallas, pero lo dejé aquí.

Respuesta2

No veo cómo la sintaxis propuesta sería más clara o más fácil que

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

o, si quieres especificar de una forma más sencilla el tamaño de los paréntesis,

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

con tal vez

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

para paréntesis más grandes o

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

para los de tamaño automático.

Puedes realizar esta última sintaxis con bastante facilidad con 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}

ingrese la descripción de la imagen aquí

información relacionada