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}