Tex: подробное описание С. М. Львовский


 Отношение подчинения между счетчиками


Download 1.51 Mb.
Pdf ko'rish
bet102/143
Sana08.05.2023
Hajmi1.51 Mb.
#1444247
1   ...   98   99   100   101   102   103   104   105   ...   143
Bog'liq
LaTeX-Lvovsky

2.2. Отношение подчинения между счетчиками
Команда \z, как мы ее определили в предыдущем разделе, нумерует задачи автоматически,
но при этом нумерация получается
«сплошной». Часто, однако, требуется, чтобы в каждом
разделе документа нумерация задач начиналась заново, так что шестая задача в разделе с но

мером 3 была озаглавлена Задача 3.6, а первая задача в разделе с номером 4
— Задача 4.1.
Сейчас мы узнаем, как этого добиться.
Выше мы уже упоминали, что к моменту начала обработки L
A
TEXом нашего текста некото
рые счетчики уже определены. В частности, это счетчики, содержащие номера текущих раз

делов документа. Их имена совпадают с именами команд, генерирующих эти разделы: chapter


VII.2. СЧЕТЧИКИ
147
(если стилем предусмотрено разбиение на главы), section, subsection и т. д. При каждом
исполнении, например, команды \section значение счетчика section увеличивается на 1,
и значение этого счетчика в каждый момент равно номеру текущей секции. Поэтому, если в
определении команды \z написать
\arabic{section}.\arabic{ZADAˆA}.
то перед номером задачи будет печататься номер текущей секции и точка.
Но как же, все-таки, сделать, чтобы в каждой секции нумерация задач начиналась зано

во? Можно, конечно, после каждой команды \section присваивать счетчику ZADAˆA значе
ние 0 с помощью команды \setcounter, но это некрасиво и ненадежно (а вдруг забудем?).
Вместо этого следовало бы сразу определить счетчик ZADAˆA таким образом:
\newcounter{ZADAˆA}[section]
При таком определении счетчик ZADAˆA будет, как говорят, подчинен счетчику section: вся
кий раз, когда значение счетчика section увеличивается на единицу командой \section, зна

чение счетчика ZADAˆA будет устанавливаться в нуль, и тем самым счет задач будет в каждой
секции начинаться заново. Стало быть, если считать, что счетчик ZADAˆA определен именно
так, как сказано выше, то очередной раз исправленное определение команды \z выглядит
так:
\newcommand{\z}{\par\addtocounter{ZADAˆA}{1}%
{\bf zADAˆA \arabic{section}.\arabic{ZADAˆA}.} }
При этом нумерация задач будет начинаться заново в каждом разделе (section), и вторая
задача третьего раздела будет иметь номер 3.2.
Теперь сообщим точные правила создания счетчиков, подчиненных другому счетчику.
Они просты: команда \newcounter может принимать один необязательный аргумент (после
обязательного)
— имя того счетчика, которому будет подчинен определяемый нами счет
чик. Разумеется, в момент выполнения команды \newcounter с необязательным аргументом
счетчик, имя которого дается в квадратных скобках, должен уже существовать.
Ко всему сказанному требуется одно важное уточнение: мы еще толком не объяснили, в
каких случаях значение подчиненного счетчика устанавливается в нуль. В самом деле, пусть
счетчик SLUGA подчинен счетчику HOZQIN; тогда команда
\addtocounter{HOZQIN}{1}
никоим образом не повлияет на значение подчиненного счетчика SLUGA: изменение значений
счетчика влияет на значения подчиненных ему счетчиков только в том случае, если значение
подчиняющего счетчика изменялось с помощью специальных команд. Таких команд всего
две, из них чаще всего используется \refstepcounter: она увеличивает на единицу значе

ние счетчика, имя которого является ее аргументом, а значения всех счетчиков, подчиненных
счетчику
— ее аргументу, устанавливает в нуль. Если, например, в нашем тексте определены
два счетчика так:
\newcounter{HOZQIN}
\newcounter{SLUGA}[HOZQIN]
то после выполнения команд


VII.2. СЧЕТЧИКИ
148
\setcounter{HOZQIN}{10}
\setcounter{SLUGA}{10}
значения обоих счетчиков станут равны 10, после выполнения команды
\addtocounter{HOZQIN}{1}
значение счетчика HOZQIN станет равно 11, а значение счетчика SLUGA не изменится, а вот
после выполнения команды
\refstepcounter{HOZQIN}
значение счетчика HOZQIN станет равно 12, а значение счетчика SLUGA станет равно нулю.
Наряду с \refstepcounter существует еще одна команда, изменяющая значение счетчика таким
образом, что значения всех подчиненных ему счетчиков устанавливаются в нуль. Эта команда назы

вается \stepcounter; она также увеличивает на единицу значение счетчика, имя которого является
ее аргументом, и при этом обнуляет все подчиненные ему счетчики, но она непригодна для организа

ции автоматических ссылок (см. следующий раздел), вследствие чего область ее применения более
ограничена.
Хороший пример использования подчиненных счетчиков дают стандартные стили L
A
TEXа.
Например, если основным стилем является book, то перед началом обработки текста выпол

няются следующие команды:
\newcounter {part}
\newcounter {chapter}
\newcounter {section}[chapter]
\newcounter {subsection}[section]
\newcounter {subsubsection}[subsection]
\newcounter {paragraph}[subsubsection]
\newcounter {subparagraph}[paragraph]
Стало быть, нумерация глав не зависит от нумерации частей (если третья часть книги
завершается десятой главой, то четвертая часть начинается с одиннадцатой главы), а нуме

рация секций уже начинается заново в каждой главе.

Download 1.51 Mb.

Do'stlaringiz bilan baham:
1   ...   98   99   100   101   102   103   104   105   ...   143




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling