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

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

Рубрикация

Здесь мы расскажем о том, как менять оформление разделов документа, предписываемое LaTeX'овским стандартом.

Что нумеровать и что включать в оглавление

Будет ли раздел документа иметь номер, зависит от двух вещей: "уровня вложенности" раздела и значения счетчика secnumdepth. Раздел документа получает номер, если уровень его вложенности меньше или равен значению secnumdepth (разумеется, все сказанное относится к случаю, когда LaTeX'овская команда для раздела документа дана без звездочки — иначе нумерации не будет заведомо). Уровни вложенности в стандартных стилях приведены в табл. 9.1

Таблица 9.1. Уровни вложенности разделов документа
Название раздела Уровень
\section 1
\subsection 2
\subsubsection 3
\paragraph 4
\subparagraph 5

Стало быть, если мы хотим, чтобы самый мелкий из нумеруемых разделов был \subsection, то надо написать в преамбуле документа команду

\setcounter{secnumdepth}{2}

Что касается команд \chapter и \part, то соответствующие разделы документа будут нумероваться тогда и только тогда, когда значение secnumdepth является неотрицательным числом.

Какие разделы включать в оглавление, определяется другим счетчиком, а именно tocdepth: информация о разделе документа вносится в оглавление в том и только том случае, если уровень вложенности раздела меньше или равен значения этого счетчика (и раздел вводится командой без звездочки).

Модификация команд, задающих разделы

Теперь рассмотрим, что надо делать, чтобы более серьезным образом изменить оформление разделов. Для этого надо переопределить команды \section, \subsection и т.п., а чтобы научиться их должным образом переопределять, надо узнать, как эти команды определены в стандартных LaTeX'овских классах.

Почти все команды для создания разделов документа определяются в классовых файлах через команду \@startsection. Например, команда \section определяется (не буквально, а по существу) так:

\newcommand{\section}{\@startsection{section}{1}{0pt}%
{-3.5ex plus -1ex minus -.2ex}{2.3ex plus.2ex}%
{\normalfont\Large\bfseries}}

В этом определении у команды \@startsection указаны шесть аргументов, в которых закодированы различные параметры оформления раздела. Разберем последовательно, что эти аргументы означают.

Первый из аргументов (в нашем случае section) — это " внутреннее имя", под которым LaTeX будет узнавать определяемый тип разделов документа. Если вы решили использовать команду \@startsection с "нестандартным" первым аргументом (скажем, abcd), то заодно придется определить счетчик с именем abcd, который будет отвечать за нумерацию разделов, а также команду \l@abcd, которая будет отвечать за сбор материала для оглавления, и команду \abcdmark, отвечающую за передачу информации для колонтитулов,так что без надобности командой \@startsection с нестандартным первым аргументом лучше не пользоваться.

Второй аргумент (в нашем случае 1) — это тот самый " уровень вложенности" раздела, о котором шла речь выше.

Третий аргумент задает отступ заголовка от левого поля (в нашем случае этот отступ равен нулю).

Четвертый аргумент команды \@startsection (в нашем случае это -3.5ex plus -1ex minus -.2ex) задает величину вертикального отступа, оставляемого перед заголовком. Точнее говоря, вертикальному отступу равен не сам четвертый аргумент, а его абсолютная величина (при определении отступа знаки - отбрасываются), а знак - означает, что первый абзац нашего раздела будет печататься без абзацного отступа, как и оформляются разделы в стандартных LaTeX'овских стилях. Если задать эти расстояния как положительные числа, то абзацный отступ в первом абзаце подавляться не будет. Тот факт, что отступ перед началом раздела имеет plus- и minus-компоненты, означает, как водится, что этот пробел обладает растяжимостью и сжимаемостью.

Пятый аргумент (в нашем случае 2.3ex plus .2ex) задает величину вертикального отступа после заголовка раздела, а тот факт, что он положителен, означает, что заголовок раздела печатается на отдельной строке (или строках, если в строку он не умещается). Если он будет отрицательным, то заголовок раздела будет печататься не на отдельной строке, а в подбор; значение пятого аргумента \@startsection будет означать при этом (после отбрасывания знака минус, естественно) величину дополнительного горизонтального отступа между заголовком раздела и продолжающим его текстом из первого абзаца раздела.

Пятый аргумент \@startsection тоже, как видите, может содержать plus- и/или minus-компоненту.

Наконец, шестой аргумент команды \@startsection задает стиль оформления заголовка. Точнее говоря, в этом аргументе записан текст и/или команды, которые будут вставлены перед заголовком раздела. В нашем случае этот аргумент содержит только команды

\normalfont\Large\bfseries

задающие шрифт, которым заголовок будет напечатан (на последующий текст эта смена шрифта не повлияет, поскольку команды, указанные в шестом аргументе \@startsection, будут выполняться внутри группы).

Приведем пример того, как можно изменить стандартное оформление. Пусть нам хочется, чтобы команда \section порождала раздел документа, оформленный таким образом:

  • номера разделов печатаются римскими цифрами;
  • перед номером раздела стоит знак \S ;
  • номер раздела и его заглавие печатаются прямым светлым шрифтом размера \Large ;
  • абзацный отступ в первом абзаце не подавляется.

Как этого добиться? Для начала переопределим команду \thesection, определяющую, в каком виде будет представлен на печати номер раздела:

\renewcommand{\thesection}{\Roman{section}}

А теперь переопределим и саму команду \section следующим образом:

\renewcommand{\section}{\@startsection{section}{1}%
{\parindent}{3.5ex plus 1ex minus .2ex}%
{2.3ex plus.2ex}{\normalfont\Large\S}}

Мы воспользовались \renewcommand, поскольку команда \section ранее уже была определена. В четвертом аргументе мы убрали знаки -, чтобы не подавлять абзацный отступ, а в третьем — задали отступ заголовка от левого поля, равный абзацному отступу (причина этого не программистская, а эстетическая: некрасиво, когда первый абзац раздела идет с отступом, а заголовок начинается вплотную к левому полю). Прочие параметры, задающие размеры отступов, мы оставили такими же, как в стандартной LaTeX'овской команде: они достаточно разумны, и незачем их трогать, если на то нет особых причин.

Нина Казачек
Нина Казачек
Василий Майоров
Василий Майоров