Здравствуйте, это третья неделя курса "Документы и презентации в LaTeX", представленном Высшей школой экономики для онлайн-университета Курсера. Занятие этой недели будет состоять из двух больших блоков: в первом блоке мы поговорим о процедурах, которые позволяют автоматизировать рутинные задачи, которые вам иногда приходится решать с помощью издательской системы LaTeX, то есть о создании различных счетчиков и макрокоманд. Во второй части, она будет больше, во втором блоке мы затронем различные аспекты оформления документа в целом, такие как различные стили текста, полей, колонтитулов и так далее. В первом видеофрагменте я расскажу вам о таком способе создания нумерованных обьектов, как теорема. Теорема - это просто название. То, что вы будете создавать с помощью этого инструмента, необязательно должно быть теоремой. Это просто может быть любой нумерованный обьект. Скажем, задача или определение, следствие и так далее. То есть, если вам нужно, чтобы в вашем документе что-то нумеровалось, скажем, теорема один, теорема два, теорема три, то, то о чем мы сейчас будем говорить - это инструмент, который позволяет решать именно эту задачу. Давайте обратимся к шаблону, который назывется 3.1. Шаблон этой недели. Преамбула осталась по большей части неизменной с прошлого раза. Но я добавил к ней блок, который называется "Теорема" и в котором определено, определено несколько стилей нумерованных обьектов, о которых мы сейчас поговорим. Также к преамбуле добавлен раздел "Программировние". Пакет etoolbox, о котором мы поговорим в следующем видеофрагменте. Итак, давайте разберемся, что здесь написано. Мы создадим обьекты трех стилей. Типов будет пять, но они будут принадлежать к трем стилям. Первый стиль называется plain. Я не буду сейчас рассказывать, что именно в их отображении будет отличаться. Когда мы запустим документ на обработку, то мы увидим. Ну, давайте посмотрим, как в целом оформляется та часть преамбулы, которая этому посвящена. Во-первых, мы указывем стиль, в первом случае - это стиль plain. Дальше, второй стиль, который у нас есть - это definition. И третий стиль, который у нас есть - это remark. Опять же, это просто названия. Авторы LaTeX заложили - точнее не LaTeX, а AMS-TeX - заложили в него эти свойства, то есть свойства этих трех типов. Но естественно, что вы можете использовать стиль remark для определений, если вам так удобнее и больше нравится. Стиль plain, скажем, для замечаний и теорем. Это всё полностью завсисит от вас. Итак, сначала у нас идет \teoremstyle{plain} - это самый простой стиль по умолчанию. Мы создаем обьекты двух типов. \newtheorem - это команда, которая задает тип нумерованного обьекта. Ее обязательный аргумент номер один - это то, как этот аргумент будет называться на языке LaTeX. То есть это название, которое вы сами придумываете - вот у меня здесь у первого он назван theorem, у второго - proposition, дальше corollary и так далее. Но... Это назание, к которому вы будете дальше обращаться, чтобы создать обьект этого типа. Обязательный аргумент номер два - это то, как этот документ, этот тип обьекта будет называться в документе, то есть человеческое название. У меня здесь написано по-русски слово "Теорема". Тут в первой строчке есть один еще необязательный аргумент. Ну, если говорить коротко, то это тот счетчик, которому будет подчиняться счетчик, созданный для обьекта теоремы, о которой мы сейчас говорим. То есть, здесь написано section - это значит, что если мы находимся в первом разделе документа, то наши теоремы будут нумероваться один точка один, один точка два и так далее. Если мы находимся в пятом разделе документа, то счетчик сбросится, и теоремы снова будут нумероваться пять точка один, пять точка два, пять точка три и так далее. Дальше, здесь создан еще один обьект newtheorem - это обьект, который называется утверждение, по-английски proposition. То есть машинное имя у нас будет "proposition", а человеческое имя - "Утверждение". Обратите внимание, что здесь необязательный аргумент указан в другом месте - не в конце строчки, а между двумя обязательными. Это имеет большое значение, потому что в идее, которую я реализую, теоремы и утверждения - это обьекты одного уровня. Следовательно, счетчик утверждения не должен подчиняться счетчику теоремы. Но то, что должно быть, - это то, что у них должен быть единый счетчик. То есть если у меня была теорема два точка три, а дальше следует утверждение, то это должно быть утверждение два точка четыре. Ну, естественно, я сделал это здесь, чтобы просто продемонстрировать этот функционал. Но вы можете легко придумать пример, когда это действительно, действительно важно так делать. Далее в преамбуле определены теоремы - \newtheorem - еще двух типов. Это definition и remark. От этого зависит только то, как они будут отображаться - сейчас мы разницу увидим - и в классе definiton, у меня два типа нумерованных обьектов. Первый - это следствия, нумерация которых подчиняется счетчику нумерации теорем, то есть если у меня есть теорема два точка один, то следствия у нее будут два точка один точка один, два точка один точка два и так далее. Следующий обьект - это задача. И последний обьект - это решение. Как вы уже можете догадаться, то, что здесь стоит звездочка, означает, что нумерации не будет. Как очень часто это происходит в LaTeX - если вы пишете какую-то команду со звездочкой, то создается ненумерованный обьект. Итак, давайте попробуем обратиться, обратиться к тексту нашего документа и воспользоваться теми типами теорем, которые мы сейчас задали. Ну, во-первых, я напишу здесь заголовок. Итак, когда мы создали несколько классов нумерованных обьектов в преамбуле, начиная с theorem и заканчивая nonum, то в документе LaTeX определились несколько окружений - envirоnments, - которые теперь можно использовать. Вот, скажем, я создал тип обьекта, который называется theorem. Это значит, что теперь в документе я могу написать \begin thеorem ... \end{theorem}, а между ними текст моей теоремы. Ну, скажем, это будет какая-нибудь простая теорема, типа того, что два - перейду в математический режим - два плюс два равно четыре. Мне сейчас достаточно этого для примера. Давайте запустим это на обработку и посмотрим, что получилось. Так, ну вот - теорема ноль точка один. Почему ноль точка один? Потому что никакого раздела еще не началось. Как вы помните, судя по определению в преамбуле, нумерация теорем подчиняется нумерации разделов. Мы еще не создали никакого раздела. Ну, это неправильно, давайте создадим раздел, section, и назовем его "Теоремы". Попробуем еще раз, теперь теорема должна называться один точка один. Действительно, она находится в разделе номер один. Что, если у моей теоремы есть заголовок? Это можно указать в качестве необязательного аргумента у \begin{theorem}. В квадратных скобках, как всегда, с необязательными аргументами. Запускаем, и название теоремы автоматически подставилось рядом с ее номером. Ну, как и на любой нумерованный обьект в LaTeX, на теорему можно ссылаться. Я могу написать здесь label... что-нибудь типа theorem1, а затем в документе написать, что "Смотри теорему \ref{theorem1}, на стр. \pageref{theorem1}". Запустим. Итак, мы увидели то, что и следовало ожидать. Номер теоремы подставился сам собой, так же, как и страница, на которой она находится. Хорошо, давайте создадим еще один похожий обьект, только у него будет уже тип не theorem, а proposition. Утверждение такое будет: трижды три равно девять. Запускаем. Так, что-то не так. Я допустил опечатку в слове times. Запускаем еще раз. Вот, утверждение один точка два. То есть у них единый счетчик. Если теорема, которая встретилась только что, имела номер один точка один, то утверждение, несмотря на то, что это другой класс, благодаря тому, как мы определили его в преамбуле, следует тому же счетчику. Так, ну что у нас там было еще в определениях преамбулы? Вот, скажем, следствие, corollary. Давайте создадим следствие из теоремы... из утверждения один точка два. Какое следствие есть из того, что трижды три равно девять? Ну, скажем, такое: девять разделить на три равно три. Посмотрим, что получилось. Следствие получило номер один точка два точка один. Почему? Потому что нумерация следствий подчиняется нумерации теорем, а теорема или утверждение, которое у нас только что встретилось, имело номер один точка два точка один. На любой из этих обьектов, конечно, можно ссылаться с помощью команды \label и \ref. Давайте попробуем сделать еще обьект другого типа - скажем, remark. Мы создавали тип remark, у нас называлось... тип назывался nonum, потому что... Я его так назвал, потому что у меня он не нумеруется. Ну вот, скажем, \begin{nonum} ... \end{nonum}. Просто какое-то замечание. Я могу написать здесь всё что угодно. Запускаем на обработку. Вот вы видите здесь "Всё что угодно". Поскольку это обьект другого типа, типа remark, а не типа theorem, вернее, а не типа plain, извините, он отображается по-другому. То есть заголовок выделен курсивом, как вы видите, а основной текст - нет. И у него нет номера. По задумке, поскольку это была команда со звездочкой, слово "Решение" оказалось без номера. Соответственно, на него не получится сослаться. Потому что обьект, у которого нет номера, не может иметь перекрестной ссылки внутри документа.