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.