В последнем видеофрагменте этого блока мы рассмотрим две вещи.
Во-первых, как создавать не просто новые
команды, а новые окружения, то есть environments.
А, во-вторых, как использовать простейшие логические операции для того,
чтобы проверять значение тех или иных аргументов в созданных нами командах.
Во-первых, давайте создадим новый раздел.
Так, у меня здесь был тестовый раздел, который я удалю.
Давайте создадим новый раздел, который будет называться "Окружения".
И я воспользуюсь командой \newenviroment.
У \newenvironment три обязательных аргумента.
Ну, я напомню, что окружение, environment, - это что-то, что
начинается со слова \begin, и что-то, что заканчивается словом \end.
Например, у нас тут были \begin{equation} ... \end{equation}.
И самое большое окружение - это \begin{document} ... \end{document}.
Вот внутри этого окружения можно создавать и другие.
В частности, я сейчас создам окружение, которое назову zadacha.
Оно тоже будет предназначено для того, чтобы вставить текст задачи
в мой документ, но работать будет немножко по-другому.
Как устроено, как устроен язык создания новых окружений?
Ну, на самом деле, довольно просто.
Все, что нужно здесь сделать, это написать вместо begdef
то, что должно быть в начале, а вместо enddef - все, что должно быть в конце.
То есть, когда я напишу \begin{zadacha} и \end{zadacha},
а между ними какой-то текст, то LaTeX сделает следующее: он
перед этим текстом выведет содержимое
второго обязательного аргумента команды
\newenvironment, а после этого содержимого выведет то, что... после этого текста
выведет то, что в конце.
То есть то, что в третьем обязательном аргументе команды \newenvironment.
Ну, давайте я сделаю вот какое окружение.
Пусть у меня опять же... Да, здесь тоже можно
использовать аргументы точно так же, как с командой \newcommand.
Пусть это будет, опять же, environment с одним обязательным аргументом.
Ну и пусть он будет делать то же
самое, что команда \z, которую я перед этим создавал.
Вместо \begin нужно оставить пустую строку.
Также нужно добавить к счетчику nc
значение 1.
Так.
А в конце можно ничего не делать.
То есть сейчас я просто уберу все содержимое последнего аргумента.
Ну или, например, можно сделать так,
чтобы в конце LaTeX вставлял небольшой
вертикальный промежуток, вертикальный пробел, перед следующей задачей.
Я могу написать здесь специальную команду \vspace.
С тем, как она работает, мы поподробнее познакомимся в следующем
блоке, но уже сейчас вы можете догадаться, потому что я напишу \vspace{1cm}.
Это значит, что нужно поставить вертикальный пробел размером
1 сантиметр после того, как закончится текст окружения.
Итак, давайте теперь воспользуемся вновь созданным окружением.
Я пишу \begin{zadacha} и \end{zadacha}.
Между ними нужно указать текст задачи.
Но и еще я настроил 1 обязательный аргумент.
Давайте это будет названием задачи.
Скажем, задача, которую я сейчас создаю, будет называться "Главная задача".
Так.
Ну и в ней какой-нибудь текст задачи напишем.
Чтобы это правильно отобразилось, нужно, как и в
прошлый раз, задать соответствующее действие в команде \newenviroment.
После того, как я добавлю единичку к счетчику 1, мне нужно написать, что
здесь будет задача арабскими цифрами,
точнее, сначала просто номер раздела так, как
у меня в документе принято его обозначать.
Точка.
Потом арабскими цифрами номер задачи, то есть значение счетчика nc.
Точка.
У меня аргумент номер 1 - это название задачи, поэтому его можно написать здесь.
Скажем, я могу даже поставить его в кавычки.
Правильные кавычки ставятся вот так, но поподробнее мы
об этом поговорим, когда будем обсуждать русский язык.
И подставить сюда аргумент.
Итак, смотрите еще раз.
У нас есть окружение задачи, у которого 1 обязательный аргумент.
Начинается оно с пустой строки.
То есть нужно перейти на следующий абзац.
Первое, что мы делаем там, - это добавляем единичку к счетчику nc.
Тут можно поставить процент, чтобы лишнего пробела после этого действия не возникло.
Дальше мы пишем "Задача".
Подставляем номер задачи вместе с номером раздела, в котором она находится.
И в кавычках подставляем
значение первого аргумента (и единственного аргумента).
То есть названия задачи.
Все.
На это все, что связано с \begin, заканчивается.
Закрывается фигурная скобка, и начинается то, что связано с \end.
Ну а в конце, после того, как текст задачи
будем выведен, я прошу LaTeX поставить вертикальный отступ 1 сантиметр.
Итак, давайте посмотрим, как это работает.
Работает так, как задумано.
То есть у меня здесь написано, что это задача A.1.
Первая задача в этом разделе.
Дальше выведено ее название, которое я указал здесь в виде
аргумента окружения zadacha, и текст задачи выводится дальше сам собой.
Дальше, в следующем блоке, мы научимся,
как, скажем, выделять жирным или подчеркивать заголовок.
Ну и последнее, что я хочу показать - это то,
как использовать пакет etoolbox, который был подключен в преамбуле.
Я создам новый раздел в своем документу, назову его "etoolbox".
Я сделаю такую простую вещь.
Я напишу, что мне нужна новая бинарная переменная.
Я сначала сделаю, а потом объясню, что я сделал.
Итак, новая бинарная переменная, которая называется answers.
Она может принимать 2 значения, раз она бинарная: единичка или нолик.
То есть верно или нет.
По умолчанию, когда я пишу эту команду \newbool,
пакет etoolbox подставляет значение false, то есть нолик.
Если мне нужно изменить его на единичку, то есть на true, то я должен написать
команду \booltrue и указать здесь название своей переменной answers.
Зачем я это делаю?
Я хочу настроить так, чтобы от одной строчки в документе, в
начале документа, зависело, выводятся мои задачи с ответами или без ответов.
Я сделал подготовительную работу в виде создания бинарной переменной.
Если она примет значение true, то есть истина, то ответы будут.
Если она примет значение false, то есть ложь, то ответов не будет.
Теперь мне нужно сделать, чтобы это
понимала команда, которая отвечает за задачу.
То есть за объект zadacha в моем тексте.
Давайте я возьму команду \z, которую уже создавал раньше,
вот отсюда, скопирую ее сюда в конец и буду модифицировать.
Ну, раз я ее буду модифицировать, раз она уже создана,
то вместо \newcommand мне нужно, конечно, использовать \renewcommand.
Пусть теперь у моей задачи будет не один, а два обязательных....
Нет, два аргумента, но один из них обязательный, а другой - нет.
То есть я написал здесь в квадратных скобках цифру 2.
Чтобы показать LaTeX, что один из аргументов необязательный,
мне нужно во вторых квадратных скобках указать его значение по умолчанию.
Ну, вторым аргументом, необязательным аргументом, будет ответ
на задачу, поэтому я укажу здесь "Нет ответа".
То есть если пользователь, который пишет дальше документ, не привел ничего в
виде этого необязательного аргумента, то это значит, что задача без ответа.
Окей.
Теперь, что мне нужно изменить в самом тексте задачи?
Ну, во-первых, поскольку необязательным должен быть первый
аргумент, то сам текст задачи будет вторым
аргументом, поэтому я здесь меняю #1 на #2, там, где выводится сам текст решения.
А теперь мне нужно вывести ответ к этой задаче, но
только в том случае, если переменная answers принимает значение "истина".
Для этого я использую команду \ifbool,