Mailing List CyrTeX-ru@vsu.ru Message #1511
From: neGODnick <CyrTeX-ru@vsu.ru>
Subject: Re: Класс NCC ? проблемы с оглавлением
Date: Sun, 12 Jul 2009 17:33:11 +0400
To: Cyrillic TeX Users Group <CyrTeX-ru@vsu.ru>
Здравствуйте все, а особенно Александр Иосифович Роженко!

Тема тогда заглохла, пишу в продолжение:

https://info.vsu.ru/Lists/CyrTeX-ru/Message/7951.html
https://info.vsu.ru/Lists/CyrTeX-ru/Message/7955.html
https://info.vsu.ru/Lists/CyrTeX-ru/Message/7958.html
https://info.vsu.ru/Lists/CyrTeX-ru/Message/7993.html
https://info.vsu.ru/Lists/CyrTeX-ru/Message/7994.html

Кажется, нашёл загвоздку!

Итак...

Если заголовки очень длинные, то для колонтитулов и оглавления часто
изпользуют их сокращённые варианты. Но это не всегда возможно и не
всегда желательно. Для того, чтобы длинные заголовки в оглавлении не
наезжали на номера страниц и хорошо смотрелись, можно увеличить
горизонтальное расстояние между заголовками и номерами страниц.
Средствами LaTeX это делается так:

\newcommand\@tocrmarg{2.55em} --- определено в классе (здесь значение для book)

поменяем:

\makeatletter
\renewcommand{\@tocrmarg}{10em} % LaTeX ToC --- отступ заголовка от номера стр.
\makeatother

а пакет tocloft предоставляет для этого специальную команду:

\usepackage[titles]{tocloft}
\cftsetrmarg{6em} % tocloft --- отступ заголовка от номера стр.

Команда \cftsetrmarg на самом деле представляет собой то же самое:

\newcommand{\cftsetrmarg}[1]{\renewcommand{\@tocrmarg}{#1}}

К сожалению, в классе ncc или при загрузке пакета nccsect не работает
ни то, ни другое. Выяснилось, что картину портит команда \NCC@setpnum,
которая в файле nccsect.sty определена так:

\def\NCC@setpnum{%
\settowidth\@tempdima{\NCC@pnum}%
\edef\@pnumwidth{\the\@tempdima}%
\advance\@tempdima 1em
\edef\@tocrmarg{\the\@tempdima \noexpand\NCC@tocdrift}%
}

Если её выключить, например, так:

\renewcommand*{\NCC@setpnum}{}

то \@tocrmarg снова будет работать. Зато не будет работать команда
\PnumPrototype пакета nccsect для задания ширины места, отведённого
под номера страниц. В файле nccsect.sty она определена так:

\newcommand*{\PnumPrototype}[1]{\def\NCC@pnum{#1}\NCC@setpnum}
\@onlypreamble\PnumPrototype
\def\NCC@setpnum{%
\settowidth\@tempdima{\NCC@pnum}%
\edef\@pnumwidth{\the\@tempdima}%
\advance\@tempdima 1em
\edef\@tocrmarg{\the\@tempdima \noexpand\NCC@tocdrift}%
}

Но к счастью, в LaTeX имеется собственная команда, переопределив
которую, можно задать этот размер. В классе book задано так:

\newcommand{\@pnumwidth}{1.55em}

Я пока не всё проверил, но вроде бы работает. В остальном ncc и пакет
tocloft вроде бы не конфликтуют.

Конечно, если обнулить нужную вещь команду, то будут утрачены какие-то
возможности ncc для настройки оглавления --- проверю со временем. Но
мне лично пакет tocloft нравится больше. Насколько я вижу, возможности
по оформлению одинаковые, но у tocloft настройки намного понятнее для
пользователя.
_____________________________

Непонятно вот что: в ncc есть команда \TOCMarginDrift{размер},
которая, как я понял, как раз и должна менять \@tocrmarg, но у меня
она почему-то не работает даже в «чистом» ncc безо всяких tocloft. В
файле nccsect.sty она определена так:

\newcommand*\TOCMarginDrift[1]{%
\def\@tempa{#1}%
\ifx\@tempa\@empty \let\NCC@tocdrift\@empty
\else \def\NCC@tocdrift{\@plus #1\relax}\fi
}
Subscribe (FEED) Subscribe (DIGEST) Subscribe (INDEX) Unsubscribe Mail to Listmaster