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

Модификация стандартных классов

Русский аналог \alph

В лекции 7 мы отмечали, что было бы желательно иметь команду, аналогичную \alph или \Alph, печатающую русскую букву с номером, равным значению счетчика. Сейчас мы расскажем, как вы ее можете определить в своем стилевом пакете. К сожалению, в этом определении используются не рассматривавшиеся нами средства TeX'а, так что рецепт вам придется воспринять сугубо догматически.

Итак, пусть вам нужна команда \ralph, принимающая в качестве аргумента имя счетчика и дающая на печати русскую букву, чей номер в алфавите совпадает со значением счетчика; если этот номер неположителен или превышает число букв в алфавите, команда будет (как и команда \alph в аналогичном случае) выдавать сообщение об ошибке. Определить эту команду (в вашем стилевом пакете) можно так:

\newcommand*{\ralph}[1]{\@ralph{\@nameuse{c@#1}}}
\newcommand*{\@ralph}[1]%
{\ifcase #1\or а\or б\or в\or г\or д\or е\or ж\or з\or и\or
к\or л\or м\or н\or о\or п\or р\or с\or т\or у\or
ф\or х\or ц\or ч\or ш\or щ\or э\or ю\or
я\else\@ctrerr \fi}

(как иногда делают, мы пропускаем буквы ё, й, ъ, ы, ь). Аналогичным образом можно определить команду \Ralph, печатающую прописную букву (в этом случае "вспомогательную команду" с символом @ в имени надо тоже назвать как-нибудь по-другому, скажем, \@Ralph ). Если вы будете модифицировать это определение, не сделайте в нем пробела между буквой и \or или \else (конец строки — это тоже пробел), иначе ваша команда будет печатать лишний пробел.

Кто кому подчинен в стандарте

Нам осталось выполнить свое обещание и рассказать, какие счетчики определены в LaTeX'овском стандарте и каковы отношения подчинения между ними.

В классах article и proc счетчик section определен как

\newcounter{section}

в то время как в классах report и book, в которых существуют еще и главы, определяется никому не подчиненный счетчик chapter для глав, а счетчик section определяется как подчиненный счетчику chapter:

\newcounter{chapter}
\newcounter{section}[chapter]

Остальные счетчики номеров разделов определяются во всех четырех стандартных классах одинаково:

\newcounter{part}
\newcounter{subsection}[section]
\newcounter{subsubsection}[subsection]
\newcounter{paragraph}[subsubsection]
\newcounter{subparagraph}[paragraph]

Соответствующие этим счетчикам the-команды определены в классах article и proc так:

\renewcommand{\thepart}{\Roman{part}}
\renewcommand{\thesection}{\arabic{section}}
\renewcommand{\thesubsection}{\thesection.\arabic{subsection}}
\renewcommand{\thesubsubsection}%
{\thesubsection.\arabic{subsubsection}}
\renewcommand{\theparagraph}%
{\thesubsubsection.\arabic{paragraph}}
\renewcommand{\thesubparagraph}%
{\theparagraph.\arabic{subparagraph}}

(мы пишем \renewcommand, поскольку все эти the-команды уже получили какое-то определение при создании счетчиков).

В классах report и book, кроме того, определена the-команда для счетчика chapter и по-другому определена \thesection:

\renewcommand{\thechapter}{\arabic{chapter}}
\renewcommand{\thesection}%
{\thechapter.\arabic{section}}

За нумерацию сносок отвечает счетчик footnote. В классах article } и proc этот счетчик определяется как никому не подчиненный:

\newcounter{footnote}

В классах же report и book этот счетчик подчинен счетчику chapter, так как в них присутствует еще и команда

\@addtoreset{footnote}{chapter}

В таком же положении, как счетчик footnote, находится и отвечающий за нумерацию формул счетчик equation: в классах article и proc он определен как никому не подчиненный, а в классах report и book он подчинен счетчику chapter. Однако же в классах report и book переопределяется \theequation:

\renewcommand{\theequation}{\thechapter.\arabic{equation}}

Наконец, счетчики figure и table, отвечающие за нумерацию плавающих иллюстраций и таблиц соответственно, устроены точно так же, как счетчик equation: в классах article и proc они никому не подчинены, а в двух других стандартных классах они подчинены счетчику chapter и соответствующие the-команды определены как

\renewcommand{\thefigure}%
{\thechapter.\arabic{figure}}

(аналогично для table).

Остались еще счетчики, связанные с нумерованными перечнями. Как объяснялось в "лекции 7" , эти счетчики, в зависимости от уровня вложенности enumerate, называются enumi, enumii, enumiii и enumiv. Все эти счетчики, естественно, последовательно подчинены друг другу, а их ссылочные префиксы определены так (это — единственный случай, когда в стандарте используются нетривиальные ссылочные префиксы):

\renewcommand{\p@enumii}{\theenumi}
\renewcommand{\p@enumiii}{\theenumi(\theenumii)}
\renewcommand{\p@enumiv}{\p@enumiii\theenumiii}
Нина Казачек
Нина Казачек
Василий Майоров
Василий Майоров