Definiowanie operatorów typu sin, log itp.

Last edit

Summary: uwaga o \operatorname z gwiazdką

Changed:

< i już mamy operator //supremum istotnego//, czyli dostaniemy np. $\operatorname*{ess\,sup}\limits_{x\in[0,1]}f(x)$ (komenda {{{\,}}} wstawia mały odstęp, co widać na załączonym obrazku).

to

> i już mamy operator //supremum istotnego//, czyli dostaniemy np. $\operatorname*{ess\,sup}\limits_{x\in[0,1]}f(x)$ (komenda {{{\,}}} wstawia mały odstęp, co widać na załączonym obrazku); analogicznie działa {{{\operatorname*}}}.


LaTeX ma cały szereg komend składających operatory, które tradycyjnie pisze się antykwą (pismem prostym, nie kursywą). Są to na przykład sin, log i wiele innych. Zamiast zatem pisać

$sin^2 x + cos^2 x = 1$

(co daje błędne [Error: dvipng binary and convert binary not found at /usr/bin/dvipng or ], czyli iloczyn s, i, kwadratu n oraz x… i tak dalej), powinno się pisać

$\sin^2 x + \cos^2 x = 1$

(co daje poprawne [Error: dvipng binary and convert binary not found at /usr/bin/dvipng or ]).

Oczywiście, katalog odpowiednich komend LaTeXa nie jest pełny. Nie ma w nim np. operatora sgn. Co zatem zrobić, gdy chcemy użyć oznaczenia, którego w LaTeXu nie ma?

Najczęstszy błąd to pisanie po prostu

${\rm sgn}x$

czego rezultat wygląda fatalnie: [Error: dvipng binary and convert binary not found at /usr/bin/dvipng or ]. Widać problem? Po “sgn” powinien być mały odstęp! Podobny problem mamy, gdy napiszemy

$\mbox{sgn}x$

ale wtedy jest jeszcze gorzej – gdyby akurat trafić na sytuację, gdy takie wyrażenie jest w indeksie górnym lub dolnym, litery “sgn” nie będą się skalować! (Spróbujcie sami.)

W pakiecie amsmath (czy klasach amsart itd.) znajduje się rozwiązanie: piszemy po prostu

$\operatorname{sgn}x$

i wszystko jest dobrze (również ze skalowaniem). Trzeba jednak uważać! Dziś zauważyłem coś takiego: kolega chciał sobie ułatwić życie i napisał w preambule

\newcommand{\sgn}{{\operatorname{sgn}}}

Niestety, prawidłowy odstęp po “sgn” sobie poszedł… Nie będę tłumaczył, dlaczego – ciekawych odsyłam do TeXbooka;) – powiem tyle, winne są oczywiście dodatkowe nawiasy klamrowe…

Po tym wszystkim mogłoby się wydawać, że najlepiej napisać w preambule

\newcommand{\sgn}{\operatorname{sgn}}

(bez dodatkowych nawiasów) i sprawa załatwiona… Okazuje się, że nie: jest to na tyle przydatne, że służy do tego specjalna komenda. Piszemy mianowicie w preambule tak:

\DeclareMathOperator{\sgn}{sgn}

i mamy komendę \sgn, która robi to, co trzeba: wstawia właściwe odstępy, skaluje się, jest robust (jak przetłumaczyć ten dość TeXniczny termin?). W dodatku, gdybyśmy chcieli w formułach “wyeksponowanych” (czyli tych wycentrowanych, a nie pojawiających się w tekście) móc położyć coś pod lub nad naszym operatorem, możemy napisać

\DeclareMathOperator*{\esssup}{ess\,sup}

i już mamy operator supremum istotnego, czyli dostaniemy np. [Error: dvipng binary and convert binary not found at /usr/bin/dvipng or ] (komenda \, wstawia mały odstęp, co widać na załączonym obrazku); analogicznie działa \operatorname*.

Podsumowując: definiujmy nowe operatory przez \DeclareMathOperator, jeśli operator występuje tylko raz, możemy użyć \operatorname, a przede wszystkim – wstawiajmy w formułach matematycznych tylko tyle nawiasów “wąsatych” ({, }), ile potrzeba.

KategoriaTeX, KategoriaLaTeX, KategoriaLaTeXPręgierz