По умолчанию в LaTeX определено множество счетчиков,
которые мы с вами уже видели.
Так, например, нумерация разделов, sections, – это счетчик.
И сейчас, тогда, когда я это пишу, счетчик был равен двум, потому что у нас был,
было два раздела и последний имел номер 2 и назывался «Новые команды».
Когда я написал \section{Счетчики}, то этот...
значение этого счетчика,
отвечающего за нумерацию section, увеличилось
на единицу, то есть сейчас он станет равен
трем, и LaTeX нам напишет, что это третий раздел.
Можно управлять значением, которое принимает счетчик в ту
или... в тот или иной момент в документе, а также
можно создавать свои счетчики и использовать их разными способами,
изменяя их значение и выводя его в разных местах.
Давайте попробуем создать свой счетчик.
Создание нового счетчика вполне логично происходит с помощью команды \newcounter.
У команды \newcounter всего один
обязательный аргумент – это название счетчика.
Давайте я назову его nc - от слов new counter.
Также у команды \newcounter есть
необязательный аргумент - чему должен подчиняться этот счетчик.
Чему должна подчиняться нумерация нового счетчика.
То есть, если здесь ничего не написать,
то нумерация будет сквозная в течение всего документа.
То есть независимо от того, как будут меняться
части документа, главы, параграфы, подпараграфы, счетчик будет идти своим
чередом, то есть один, два, три, четрыре, пять, независимо
от того, в каком разделе или подразделе он оказывается.
Но можно задать подчинение, то есть я могу здесь написать в виде необязательного
аргумента section - это будет означать, что
новый созданные мною счетчик, подчиняется нумерации разделов.
И он будет обнуляться каждый раз, когда я буду создавать новый раздел.
Хорошо, давайте выведем текущее значение этого счетчика.
Узнаем, какое значение присваивается счетчику для того...
в тот момент, когда мы его создаем.
Вывести значение счетчика можно по-разному.
Скажем, если я хочу вывести значение счетчика в виде арабской цифры, то я могу
написать \arabic и в скобках – название этого счетчика: \arabic{nc}.
Давайте посмотрим, что получается. Итак, ноль.
Ну, ноль – это значит, что вновь созданный счетчик получил такое значение.
Ну, ноль – это не очень интересно.
Давайте поставим счетчик на какое-нибудь другое значение.
Для этого существует команда \setcounter, у которой есть,
как нетрудно догадаться, два обязательных аргумента: первый – это название счетчика.
У меня это nc, а второй – это, собственно,
на какое значение нужно этот счетчик поставить – скажем, десять.
Вот я поставил его на значение десять,
и давайте еще раз выведу его арабскими цифрами.
Значение счетчика можно вывести и другими способами, не только арабскими цифрами.
Скажем, можно вывести римскими цифрами.
Я могу написать вместо \arabic, могу написать \roman.
И то же название счетчика nc.
И посмотреть, что получается.
Значение счетчика вывелось римской цифрой десять, она задается буквой
x, и вы можете заметить, что это строчная буква x.
То есть, если здесь будет какое-нибудь другое
число... Любое число с помощью команды \roman выводится
маленькими римскими цифрами, то есть латинскими буквами, строчными
латинскими буквами, отвечающими за римские цифры.
Это довольно нетипично – чаще для римских цифр используются заглавные латинские
буквы, поэтому я хочу написать слово Roman с большой буквы.
С тех пор, как я написал слово Roman с большой
буквы, у меня будет заглавная буква X, отвечающая за десятку.
Если я здесь поставлю \setcounter не десять, а, скажем, 532,
то и римские цифры соответственно посчитаются.
Можно выводить не только цифрами значение счетчика, но и буквами.
Скажем, я могу здесь написать \alph – от слова
«алфавит», и значение счетчика nc.
Какая 532-я буква алфавита?
Никакая.
Поэтому здесь выдалась ошибка, что счетчик принял слишком большое значение.
Ну, давайте будет не 532, а просто пять.
Вот теперь у нас здесь есть пятая буква алфавита – это английского, это буква e.
Что, если я хочу русский алфавит?
Благодаря пакету babel у меня есть такая возможность.
Для этого я могу написать \asbuk,
и у \asbuk указать аргумент названия счетчика.
Какая пятая буква русского алфавита?
Буква д.
И поэтому мы здесь ее видим.
То есть счетчик nc у меня сейчас находится на
значении 5, и я могу разными способами вывести его значение.
Ну, как нетрудно догадаться, если я напишу, скажем, \Asbuk с большой
буквы, то буква, которая выведется в виде этого счетчика, будет большая.
Можно узнать, чему равны текущие значения счетчика не только
того, который мы сами создали, но и стандартных счетчиков.
Стандартные счетчики имеют стандартные названия.
Скажем, если я хочу узнать, какой у меня сейчас section, то я могу написать \roman,
в скобках section, запустить обрабатываться,
и увидеть, что у меня сейчас третий section, правда римскими
маленькими буквами, маленькими латинскими
буквами, отвечающими за римские цифры.
Я могу написать вместо этого \arabic, и тройка окажется
обычная, то, как мы ее привыкли видеть.
Вот. Что, если я хочу
переопределить то, как выводится какой-нибудь стандартный счетчик?
Скажем, я хочу, чтобы у меня разделы, sections,
нумеровались не цифрами, а буквами или, скажем, римскими цифрами.
Это делается так: мне нужно переопределить некоторую команду, которую LaTeX знает.
Для этого я использую \renewcommand, то
есть то, что мы уже знаем, как пользоваться.
И в виде первого обязательного аргумента, то есть названия команды,
которую я переопределяю, я пишу \thesection – это
стандартный способ описания названия коман, вывода названия
команды, которая отвечает за отображение того, чему счетчик сейчас равен.
То есть счетчик section обычно выводится в виде команды \thesection.
Мне нужно, чтобы здесь были русские буквы вместо, вместо арабских цифр.
Давайте я напишу тогда \asbuk, ну и значение этого счетчика section.
Смотрите, что должно произойти: с помощью
команды \thesection выводится вот эти вот цифры: 1, 2, 3, – это значит, что сейчас
тип вывода переопределится, и следующий section после того, как я
переопределил этот счетчик, будет выведен
в виде нумерации, будет нумероваться русскими буквами.
Давайте я, чтобы это проверить, создам
новый section с каким-нибудь бессмысленным названием.
Что получилось?
Вот он, вот он этот section, и он назван русской буквой.
Ну, естественно, что это буква Г, потому что это четвертый section.
Если мне, например, нужно, чтобы нумерация sections началась заново, то мне
нужно сделать следующее: поставить значение счетчика на другое число.
Перед тем как я начал \section{Тест}, давайте сделаем \setcounter{section}{0}.
Запускаем.
И, поскольку мы обнулили счетчик, то когда
встретилась команда \section, к этому счетчику прибавилась единичка -
он получил значение один, и, поскольку ему
предписано выводиться русскими буквами, он вывелся буквой А.
Хорошо.
Давайте создадим команду, которая
использует нужный нам функционал со счетчиком.
Это будет вот какая команда: что, если я
делаю задачник, в котором главным объектом является задача.
Я сделаю команду, которая будет задавать задачу, это будет команда \z.
У этой команды будет всего один аргумент, то есть, собственно, текст задачи.
Что я хочу, чтобы произошло?
Я хочу, чтобы когда в документе встретилась команда
\z, в документе было написано: задача, дальше -
номер этой задачи, и после этого - текст,
который я скормлю команде в виде обязательного аргумента.
Давайте по порядку сделаем все это.
Во-первых, я хочу использовать какой-нибудь
счетчик для задачи, скажем, пусть
это будет счетчик nc, который я уже перед этим создал.
Итак, мне нужно, чтобы было написано: задача - да,
во-первых, мне нужно, чтобы это было с новой строки.
То есть мне нужно, чтобы обязательно каждая задача начиналась
с нового абзаца, поэтому я оставлю здесь пустую
строку, то есть это будет предписанием, что нужно
начать с нового абзаца все, что будет дальше.
Итак, задача.
Дальше я хочу написать номер этой задачи.
Я могу написать здесь просто \arabic{nc}, поскольку
именно счетчик nc я использую для нумерации задач.
Но, как вы помните, счетчик nc подчиняется нумерации разделов, нумерации section.
Поэтому, будет естетвенно, чтобы здесь было
написано не просто задача восемь, а задача,
скажем, пять точка восемь, если эта задача
встретилась в восьмой... в восьмом разделе.
Поэтому, я здесь напишу не просто \arabic{nc}, а перед этим еще напишу
\arabic{section}. Точнее, даже можно не писать \arabic{section}
section - пусть section выведется так, как это настроено в моем документе.
Вдруг в моем документе разделы выводятся не арабскими
цифрами, а то, как, например, сейчас - русскими буквами.
Для этого мне достаточно написать здесь \thesection.
Тогда, как мы уже выяснили, номер section будет выведен
в том виде, в котором он выводится обычно в документе.
Вот, ну давайте теперь еще, поставим
точку и предпишем LaTeX выводить сюда значение того
аргумента, который мы задали для задачи, которую пишем.
Так, ну давайте я в разделе \section{Тест} создам первую задачу.
Напишу \z, мне команда TeX... программа TeXstudio уже
подсказывает, что у нее должен быть один обязательный аргумент.
Я напишу здесь что-нибудь бессмысленное - "Текст задачи". И посмотрю, что получилось.
Задача А точка ноль.
Ну, кое-что получилось хорошо, так как мы ожидали, кое-что не очень.
В частности, номер задачи, видимо, подставился именно такой, какой он и есть.
То есть мы добились того, что у нас задачи нумеруются.
Однако то, чего мы не сделали - это мы не увеличили счетчик на единицу.
То есть каждый раз, когда создается новая задача, нужно не просто
вывести эту задачу в PDF-документ, но еще и увеличить значение счетчика.
То есть сделать так, чтобы эта задача
имела номер, на единицу отличающийся от предыдущей.
Для этого я могу воспользоваться такой командой, как \addtocounter.
Обратите внимание: я пишу его до того, как начать текст задачи.
Почему?
Потому, что все начинается с нуля.
Мне не нужна задача номер ноль, поэтому я хочу увеличить значение
счетчика на единицу, уже до того, как начну самую первую задачу.
Поэтому, я пишу команду \addtocounter, у нее два обязательных аргумента.
Первый - это nc, название счетчика, а второй - это насколько нужно увеличить.
На единицу.
Запускаем.
Вот теперь все порядке.
Это задача А точка один.
Если я хочу сделать здесь еще задачу, назову ее
задача два, то появилась задача два.
Вы можете увидеть здесь некоторую странность:
они как будто лесенкой расположены, то есть у задачи два есть... у задачи А
точка два есть абзацный отступ, красная строка, а у задачи А точка один - нет.
Это особенность верстки документов, принятая на Западе,
что первый абзац после заголовка разделов не нумеруется.
Когда мы будем обсуждать особенности работы с русским языком в LaTeX, мы
научимся избавляться от этого и делать, чтобы все выглядело более красиво.
Итак, у нас теперь есть две задачи, которые
автоматически нумеруются так, как нам нужно, с помощью простой команды.
Смотрите, я совершенно не забочусь... С тех пор, как я один раз написал, как
должна выглядеть команда \z, я больше не
забочусь о том, чтобы нумерация была правильная,
чтобы она подчинялась нумерации разделов, чтобы автоматически
обновлялась, чтобы все это выводилось в PDF -
все это делается само собой, потому что
я один раз написал процедуру, которая это автоматизирует.