Создание новых команд
Окружения типа " теорема"
Если вы пишете математический текст, то в этом тексте будет содержаться немалое количество теорем, лемм, определений и тому подобных вещей. Эти элементы математического текста желательно оформлять специальным образом. Например, формулировки теорем часто печатают, для ясности, другим шрифтом, само слово "теорема" также выделяют (третьим) шрифтом и т.д. Чтобы задать такое оформление, в исходном тексте приходится написать довольно много TeX'овских команд, и лучше не повторять этот длинный набор команд много раз, а создать заменяющее его макроопределение, что, в свою очередь, может потребовать некоторого труда (чем-то подобным мы занимались в предыдущих разделах, когда разрабатывали команду \z ). Если же вы или редакция, с которой вы имеете дело, не слишком требовательны к деталям оформления, то соответствующие макросы (точнее говоря, новые окружения) легко создать из полуфабрикатов, предоставляемых нам для этих целей LaTeX'ом.
Окружения, используемые в LaTeX'е для оформления фрагментов текста типа "теорема", заранее не определены. Дело в том, что количество различных типов объектов наподобие теоремы, присутствующих в одном тексте, может быть достаточно велико (предложение, утверждение, лемма, определение, замечание,...), так что LaTeX в целях экономии машинной памяти и исходя из того, что на все вкусы таких окружений все равно не напасешься, определять их предоставляет вам. Как это делать, удобнее всего разобрать на примере.
Пусть в нашем тексте присутствуют "предложения". Давайте создадим окружение {predl} таким образом, чтобы можно было, например, писать
\begin{predl} Волга впадает в Каспийское море. \end{predl} \textbf{Доказательство.} См. любую географическую карту.
Для создания такого окружения используется команда \newtheorem:
\newtheorem{predl}{Предложение}
Как видите, команда \newtheorem имеет два обязательных аргумента: первый - название окружения, которое мы создаем, второй - заголовок нашей "теоремы".
Теперь обсудим, как работают окружения, созданные при помощи команды \newtheorem (будем называть их просто окружениями типа "теорема"). Во-первых, как вы уже заметили, формулировка печатается курсивом, а заголовок — полужирным шрифтом. Во-вторых, абзац, идущий после нашего окружения, начинается с абзацным отступом, если после закрывающей окружение команды \end идет пустая строка, и без отступа в противном случае (так что в этом отношении окружения типа "теорема" ведут себя совершенно аналогично таким окружениям, как {quote}, {itemize} и т.п.). В-третьих, окружение типа " теорема" может иметь необязательный аргумент (как обычно, в квадратных скобках). Текст, стоящий в этих квадратных скобках, будет напечатан в скобках после заголовка "теоремы" и ее номера. Обычно это используется для указания ученого, чьим именем названа "теорема":
При пользовании классами документов, предоставляемыми Американским математическим обществом, появляются дополнительные возможности влиять на оформление "теорем". См. следующий пункт.
Вместе с окружением типа "теорема" автоматически создается и счетчик, хранящий его номер. Имя этого счетчика совпадает с именем окружения (так что в нашем примере счетчик называется predl); чтобы изменить представление на печати номеров наших "теорем", можно обычным образом переопределить соответствующую the-команду. Например, если мы хотим, чтобы предложения нумеровались прописными латинскими буквами, надо в преамбуле написать:
\renewcommand{\thepredl}{\Alph{predl}}
" Теоремы", определяемые описанным выше способом, будут иметь сплошную нумерацию на протяжении всего документа. Как мы уже понимаем, это далеко не всегда удобно. Часто хотелось бы сделать так, чтоб, например, в каждом разделе нумерация " теорем" начиналась заново. Для таких целей предусмотрена команда \newtheorem с необязательным аргументом. Этот аргумент ставится после двух обязательных и представляет собой имя того счетчика, которому будет подчинен счетчик нашей " теоремы". Пусть, например, в нашем тексте есть не только предложения, но и теоремы (без кавычек), и мы хотим, чтобы нумерация теорем начиналась заново в каждом разделе. Тогда можно написать в преамбуле так:
\newtheorem{theorem}{Теорема}[section]
После этого можно будет писать, например, вот что:
\begin{theorem} Сумма углов треугольника равна $180^{\circ}$. \end{theorem}
Обратите внимание, что, если "теорема" определена таким образом (со счетчиком, подчиненным другому счетчику), то представление ее номера на печати изменяется: при определении
\newtheorem{xyz}[abcd]
(счетчик "теоремы" типа xyz подчинен счетчику abcd) команда \thexyz будет определена как
\theabcd.\arabic{xyz}
(если вы хотите, чтобы нумерация "теоремы" представлялась на печати иначе, вы опять-таки можете переопределить the-команду).
Наконец, LaTeX предоставляет еще одну возможность нумерации определяемых вами "теорем". Предположим, что кроме теорем в вашем тексте есть еще и леммы, и при этом вы хотите, чтобы леммы и теоремы нумеровались совместно: теорема 2.1, теорема 2.2, затем лемма 2.3, затем теорема 2.4 и т.д. Тогда, предполагая, что окружение {theorem} уже определено, как выше, можно определить окружение {lemma} так:
\newtheorem{lemma}[theorem]{Лемма}
В этом случае необязательный аргумент команды \newtheorem располагается между двумя обязательными; этот аргумент - имя того окружения типа "теорема", совместно с которым будет нумероваться определяемая вами "теорема".
Команду \newtheorem можно использовать или с одним необязательным аргументом, или с другим, но не с обоими вместе.
Окружения типа "теорема" в пакете amsthm
Все LaTeX'овские "теоремы", определяемые пользователем при помощи окружения {newtheorem}, оформляются в одном и том же стиле, что не всегда приемлемо. Пакет {amsthm}, распространяемый Американским математическим обществом, позволяет внести в это оформление некоторое разнообразие. Итак, предположим, что вы его подключили. Что нового, по сравнению с "чистым" LaTeX'ом, можно сделать?
Во-первых, в этом пакете определен "вариант со звездочкой" команды \newtheorem. Именно, если определить очередной тип " теорем" с помощью \newtheorem* вместо \newtheorem, то "теоремы" указанного типа не будут нумероваться.
Во-вторых, для управления стилем оформления окружений типа "теорема" предназначена команда \theoremstyle, аргументом (единственным) которой может быть слово plain , definition или remark. Если в преамбуле дать эту команду с одним из трех допустимых аргументов, то все "теоремы", определяемые с помощью \newtheorem после этой команды \theoremstyle, будут оформлены в соответствующем стиле; чтоб определить тип теорем, оформляемый в другом стиле, надо написать еще одну команду \theoremstyle (с другим аргументом, разумеется), а уж после нее — очередную \newtheorem. Стиль plain рекомендуется для собственно теорем, предложениий и лемм, definition — для определений, remark — для замечаний3В стиле plain заголовок печатается жирным шрифтом, а текст " теоремы" — курсивом, в стиле definition заголовок печатается жирным шрифтом, а текст " определения" — прямым, в стиле remark заголовок печатается курсивом, а текст "замечания" — прямым шрифтом.. Если в преамбуле нет ни одной команды \theoremstyle, подразумевается стиль plain.
В-третьих, в пакете amsthm предусмотрено также окружение proof, предназначенное для оформления доказательств. Это окружение автоматически ставит слово Proof в начало доказательства и автоматически же завершает доказательство символом Если вас не устраивает, что слово "доказательство" пишется по-английски, нужно переопределить с помощью \renewcommand команду \proofname. Если символ нужен вам сам по себе (например, как знак завершения какого-то рассуждения, не выделенного в качестве доказательства нумерованного утверждения), можно воспользоваться командой \qed.
Окружение proof допускает и необязательный аргумент: если написать, скажем,
\begin{Proof}[Доказательство основной теоремы]
то вместо слова Proof появится текст, записанный нами в квадратных скобках.