Опубликован: 07.02.2007 | Доступ: свободный | Студентов: 4014 / 1341 | Оценка: 4.56 / 3.95 | Длительность: 23:09:00
Специальности: Художник
Лекция 7:

Создание новых команд

Окружения типа " теорема"

Если вы пишете математический текст, то в этом тексте будет содержаться немалое количество теорем, лемм, определений и тому подобных вещей. Эти элементы математического текста желательно оформлять специальным образом. Например, формулировки теорем часто печатают, для ясности, другим шрифтом, само слово "теорема" также выделяют (третьим) шрифтом и т.д. Чтобы задать такое оформление, в исходном тексте приходится написать довольно много TeX'овских команд, и лучше не повторять этот длинный набор команд много раз, а создать заменяющее его макроопределение, что, в свою очередь, может потребовать некоторого труда (чем-то подобным мы занимались в предыдущих разделах, когда разрабатывали команду \z ). Если же вы или редакция, с которой вы имеете дело, не слишком требовательны к деталям оформления, то соответствующие макросы (точнее говоря, новые окружения) легко создать из полуфабрикатов, предоставляемых нам для этих целей LaTeX'ом.

Окружения, используемые в LaTeX'е для оформления фрагментов текста типа "теорема", заранее не определены. Дело в том, что количество различных типов объектов наподобие теоремы, присутствующих в одном тексте, может быть достаточно велико (предложение, утверждение, лемма, определение, замечание,...), так что LaTeX в целях экономии машинной памяти и исходя из того, что на все вкусы таких окружений все равно не напасешься, определять их предоставляет вам. Как это делать, удобнее всего разобрать на примере.

Пусть в нашем тексте присутствуют "предложения". Давайте создадим окружение {predl} таким образом, чтобы можно было, например, писать

\newtheorem{predl}{Предложение}\begin{predl}
Волга впадает в Каспийское море.
\end{predl}
\textbf{Доказательство.}
См. любую географическую карту.
\begin{predl}
Волга впадает в Каспийское море.
\end{predl}
\textbf{Доказательство.}
См. любую географическую карту.

Для создания такого окружения используется команда \newtheorem:

\newtheorem{predl}{Предложение}

Как видите, команда \newtheorem имеет два обязательных аргумента: первый - название окружения, которое мы создаем, второй - заголовок нашей "теоремы".

Теперь обсудим, как работают окружения, созданные при помощи команды \newtheorem (будем называть их просто окружениями типа "теорема"). Во-первых, как вы уже заметили, формулировка печатается курсивом, а заголовок — полужирным шрифтом. Во-вторых, абзац, идущий после нашего окружения, начинается с абзацным отступом, если после закрывающей окружение команды \end идет пустая строка, и без отступа в противном случае (так что в этом отношении окружения типа "теорема" ведут себя совершенно аналогично таким окружениям, как {quote}, {itemize} и т.п.). В-третьих, окружение типа " теорема" может иметь необязательный аргумент (как обычно, в квадратных скобках). Текст, стоящий в этих квадратных скобках, будет напечатан в скобках после заголовка "теоремы" и ее номера. Обычно это используется для указания ученого, чьим именем названа "теорема":

\newtheorem{predl}{Предложение}
\setcounter{predl}{1}
\begin{predl}[Пифагор]
Пифагоровы штаны на
все стороны равны.
\end{predl}

При пользовании классами документов, предоставляемыми Американским математическим обществом, появляются дополнительные возможности влиять на оформление "теорем". См. следующий пункт.

Вместе с окружением типа "теорема" автоматически создается и счетчик, хранящий его номер. Имя этого счетчика совпадает с именем окружения (так что в нашем примере счетчик называется predl); чтобы изменить представление на печати номеров наших "теорем", можно обычным образом переопределить соответствующую the-команду. Например, если мы хотим, чтобы предложения нумеровались прописными латинскими буквами, надо в преамбуле написать:

\renewcommand{\thepredl}{\Alph{predl}}

" Теоремы", определяемые описанным выше способом, будут иметь сплошную нумерацию на протяжении всего документа. Как мы уже понимаем, это далеко не всегда удобно. Часто хотелось бы сделать так, чтоб, например, в каждом разделе нумерация " теорем" начиналась заново. Для таких целей предусмотрена команда \newtheorem с необязательным аргументом. Этот аргумент ставится после двух обязательных и представляет собой имя того счетчика, которому будет подчинен счетчик нашей " теоремы". Пусть, например, в нашем тексте есть не только предложения, но и теоремы (без кавычек), и мы хотим, чтобы нумерация теорем начиналась заново в каждом разделе. Тогда можно написать в преамбуле так:

\newtheorem{theorem}{Теорема}[section]

После этого можно будет писать, например, вот что:

\newtheorem{theorem}{Теорема}[section]
\setcounter{section}{5}

\begin{theorem}
Сумма углов треугольника
равна $180^{\circ}$.
\end{theorem}
\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 в начало доказательства и автоматически же завершает доказательство символом \square. Если вас не устраивает, что слово "доказательство" пишется по-английски, нужно переопределить с помощью \renewcommand команду \proofname. Если символ \square нужен вам сам по себе (например, как знак завершения какого-то рассуждения, не выделенного в качестве доказательства нумерованного утверждения), можно воспользоваться командой \qed.

Окружение proof допускает и необязательный аргумент: если написать, скажем,

\begin{Proof}[Доказательство основной теоремы]

то вместо слова Proof появится текст, записанный нами в квадратных скобках.

Нина Казачек
Нина Казачек
Василий Майоров
Василий Майоров