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

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

Список литературы

Если вам не нравится, что библиографические ссылки печатаются в квадратных скобках, то вы можете переопределить команды \@cite и \@biblabel. По умолчанию они определены так:

\newcommand{\@cite}[2]{[{#1\if@tempswa , #2\fi}]}
\newcommand{\@biblabel}[1]{[#1]\hfill}

Мы не будем даже пытаться объяснить, что означают заковыристые команды в первом из этих макроопределений (#1 в нем означает номер источника, а #2 — дополнительную информацию, помещенную в необязательном аргументе команды \cite, если таковой имеется), а отметим только, что в " замещающем тексте" первого из этих определений можно заменить квадратные скобки на какие-нибудь другие (скажем, круглые или косые) — и тогда в соответствующих скобках будет печататься ссылка, генерируемая командой \cite ; аналогично, если заменить скобки в "замещающем тексте" второго из этих определений, то в соответствующих скобках будет печататься номер источника в списке литературы. Разумеется, при переопределении этих команд надо писать \renewcommand вместо \newcommand.

Если вы хотите, чтобы дополнительная информация печаталась вне скобок, скажите

\renewcommand{\@cite}[2]{{[#1]\if@tempswa , #2\fi}}

(не делайте пробела между закрывающей скобкой и \if@tempswa, иначе на печати выйдет лишний пробел). Текст между \if@tempswa и \fi будет выполняться тогда и только тогда, когда у команды \cite присутствует необязательный аргумент; если в вашем определении \@cite не будет участвовать #2, то необязательный аргумент команды \cite будет игнорироваться.

Предметный указатель

Первое, что вы можете изменить в оформлении предметного указателя (окружение {theindex}), - это отступы, создаваемые командами \item, \subitem и т.д. Для изменения отступов "на первом уровне" (создаваемых командой \item ) надо переопределить команду \@idxitem (но не сам item!). Чтобы вам было от чего отталкиваться, посмотрите на стандартное определение этой команды. Оно очень простое:

\newcommand{\@idxitem}{\par\hangindent=40pt}

Для изменения отступов, создаваемых такими командами, как \subitem и subsubitem, надо переопределить непосредственно эти команды. Их стандартные определения также бесхитростны:

\newcommand{\subitem}{\par\hangindent=40pt\hspace*{20pt}}
\newcommand{\subsubitem}{\par\hangindent=40pt\hspace*{30pt}}

Наконец, команда \indexspace, создающая в предметном указателе дополнительный вертикальный пробел, определяется в стандартных стилях так:

\newcommand{\indexspace}{\par\vspace{10pt plus 5pt minus 3pt}}

Иногда хочется изменить оформление предметного указателя более существенным образом. Например, вы можете захотеть, чтобы ссылка на предметный указатель присутствовала в оглавлении (в LaTeX'овском стандарте это не предусмотрено); возможно также, что вы захотите предпослать предметному указателю небольшое введение, набранное во всю ширину страницы. Чтобы добиться таких вещей, надо переопределить окружение \theindex. Его стандартное определение в стилях book и report выглядит так:

\newenvironment{theindex}{\@restonecoltrue
\if@twocolumn\@restonecolfalse\fi
\columnseprule=0pt \columnsep=35pt
\twocolumn[\@makeschapterhead{\indexname}]%
\@mkboth{\uppercase{\indexname}}{\uppercase{\indexname}}%
\thispagestyle{plain}\parindent=0pt
\setlength{\parskip}{0pt plus .3pt}%
\let\item=\@idxitem}%
{\if@restonecol \onecolumn \else \clearpage \fi}

Первая, вторая, предпоследняя и последняя строки этого определения содержат незнакомые вам команды; мы не будем пытаться объяснить, что они значат, а только скажем, что менять эти места в определении окружения {theindex} нельзя. Зато все остальное в этом определении должно быть понятно читателю, усвоившему основную часть нашей книги. Именно, в третьей строке задаются параметры двухколонного оформления в предметном указателе: там сказано, что колонки в окружении theindex не надо разделять линейкой и задается промежуток между двумя колонками. В пятой строке дана команда, задающая (неким не рассматривавшимся нами способом) материал для колонтитулов. Она либо вносит левую и правую пометки, совпадающие со стандартным заглавием предметного указателя, либо ничего не делает. Если вы переопределяете \theindex, то можете в этой строке написать \markboth вместо \@mkboth с теми аргументами, с какими считаете нужным, или вообще убрать эту строку, чтоб пометок не было. В шестой строке обратите внимание на команду, устанавливающую нулевое значение абзацного отступа. Менять ее не надо, поскольку именно с таким значением абзацного отступа согласовано действие команд \item, \subitem и т.п. (вспомните, как действует команда \angindent ).

Наконец, в четвертой строке стоит команда \twocolumn с необязательным аргументом. Как объяснялось в "лекции 3" , то, что стоит в необязательном аргументе, будет напечатано во всю ширину страницы. В стандартном определении тут стоит команда \@makeschapterhead, создающая заголовок ненумерованной главы, но вы можете записать туда и любой текст, который хотите предпослать собственно предметному указателю. Правда, тут возникает один технический момент: введение к предметному указателю вы, видимо, захотите редактировать, и нехорошо для этого всякий раз лазать в стилевой пакет. Один из возможных выходов таков. Запишите в вашем определении окружения {theindex} четвертую строку так:

\twocolumn[\@makeschapterhead{\indexname}\input{ukaz.tex}]

Здесь ukaz.tex — файл, в который вы запишете свое введение к предметному указателю.

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

\addcontentsline{toc}{chapter}{\indexname}

Поскольку предметный указатель, задаваемый с помощью окружения {theindex}, использует команду \twocolumn, колонки на последней странице указателя могут оказаться разной высоты. Как обычно, лекарство от этого — подключить стилевой пакет {multicol} и сделать так, чтобы окружение {theindex} использовало для печати окружение {multicols}. Для этого нужно переопределить окружение {theindex} следующим образом (мы предполагаем, что пакет {multicol} подключен):

\renewenvironment*{theindex}{\columnseprule=0pt\columnsep=35pt
\@makeschapterhead{\indexname}%
\@mkboth{\uppercase{\indexname}}{\uppercase{\indexname}}%
\thispagestyle{plain}\parindent=0pt
\setlength{\parskip}{0pt plus .3pt}%
\let\item=\@idxitem
\begin{multicols}{2}}%
{\end{multicols}}

Разумеется, вы можете также изменить параметры в этом определении по своему усмотрению.

Последнее, что нужно сказать про окружение {theindex}, это то, что в классе article четвертая строка его стандартного определения выглядит так:

\twocolumn[\section*{\indexname}]%

(поскольку в классе article главы не определены).

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