Mailing List CyrTeX-ru@vsu.ru Message #415
From: Alexander I Rozhenko <CyrTeX-ru@vsu.ru>
Subject: Re: Пакет ?bookmark? - можно ли задать глобальные настройки?
Date: Wed, 23 Jul 2008 23:44:41 +0700
To: Cyrillic TeX Users Group <CyrTeX-ru@vsu.ru>

----- Original Message ----- From: "regonly noreply" <CyrTeX-ru@vsu.ru>
To: "Cyrillic TeX Users Group" <CyrTeX-ru@vsu.ru>
Sent: Wednesday, July 23, 2008 10:34 AM
Subject: Re: Пакет ?bookmark? - можно ли задать глобальные настройки?


Александр Иосифович!

Спасибо Вам огромное! Ваша идея работает!
Сейчас я сделал определения для каждого типа заголовка:

% -----------------------------------------------------------
\let\OriginalPart\part
\def\part{\bookmarksetup{bold}\OriginalPart} % Часть - жирная закладка

\let\OriginalChapter\chapter
\def\chapter{\bookmarksetup{bold}\OriginalChapter} % Глава - жирная закладка

\let\OriginalSection\section
\def\section{\bookmarksetup{bold}\OriginalSection} % Раздел - жирная закладка

\let\OriginalSubsection\subsection
\def\subsection{\bookmarksetup{bold=false}\OriginalSubsection} %
Подраздел - обычная

\let\OriginalSubsubsection\subsubsection
\def\subsubsection{\bookmarksetup{bold=false}\OriginalSubsubsection} %
Подподраздел - обычная

\let\OriginalParagraph\paragraph
\def\paragraph{\bookmarksetup{bold=false}\OriginalParagraph} %
Параграф - обычная

\let\OriginalSubparagraph\subparagraph
\def\subparagraph{\bookmarksetup{bold=false}\OriginalSubparagraph} %
Подпараграф - обычная
% -----------------------------------------------------------

Я попытался сразу задавать "отмену", например так:

% -----------------------------------------------------------
\let\OriginalChapter\chapter
\def\chapter{\bookmarksetup{bold}\OriginalChapter}

\addto\OriginalChapter\chapter
\def\chapter{\def\bookmarksetup{bold=false}\OriginalChapter} % ошибки
% -----------------------------------------------------------

или так

% -----------------------------------------------------------
\let\OriginalChapter\chapter
\def\chapter{\bookmarksetup{bold}\OriginalChapter}

\addto\@chapter{\def\bookmarksetup{bold=false}} % ошибки
% -----------------------------------------------------------

и ещё как-то, но либо получаю ошибки, либо нету никаких изменений.

Поэтому пришлось дать определение для КАЖДОГО заголовка, иначе все
последующие закладки (точнее - нижеследующих уровней иерархии) будут
как предыдущие (тоже жирными).

Попытался найти описание команды \addto (правда ли, что она добавляет
в конец) - не нашёл. Возможно, это есть в книге Кнута, но у меня есть
только скан русского издания и английский очень плохой PDF. Я пока не
читал, только заглядывал. Оба без возможности поиска, а быстро найти
нужное вручную в такой толстенной книге не представляется возможным.
Впрочем, \addto нет в предметном указателе, так что и Кнут может не
помочь...

Я ошибся. Команду \addto добавляет содержимое в конец. Но использовать её можно только с командами без параметров, которые в конце не вызывают других команд, берущих параметры из входного потока. Команда определена в пакете Babel (файл babel.def).

Идём дальше. Осталось задать закладки для Библиографии, Предметного
указателя и Оглавления (ну и для списка таблиц, формул, иллюстраций
тоже).

% -----------------------------------------------------------
\let\OriginalTableofcontent\tableofcontent
\def\tableofcontent{\bookmarksetup{bold,color=red165}\OriginalTableofcontent}
%не работает!

\let\OriginalPrintindex\printindex
\def\printindex{\bookmarksetup{bold,color=red165}\OriginalPrintindex}
%не работает!
% -----------------------------------------------------------

В заголовке оглавления используется одна из стандартных команд вывода секций, в зависимости от класса документа. Например, в классе book используется \chapter. Если Вы хотите изменить способ оформления закладки для содержания, поступайте так

\let\OriginalTableofcontent\tableofcontent
\def\tableofcontent{\begingroup
\def\chapter{\bookmarksetup{bold,color=red165}\OriginalChapter}%
\OriginalTableofcontent\endgroup}

Данное переопределение команды \chapter ограничивается только командой \tableofcontent. Вне её будет действовать старое переопределение.

При выводе индекса используется окружение theindex, внутри которого заголовок оформляется достаточно специфически. Так в классе book используется низкоуровневая команда  \@makeschapterhead, которую можно аналогичным образом подменить например так:

\makeatletter
\let\OriginalIndex\theindex
\def\theindex{\let\MyTempMacro\@makeschapterhead
\def\@makeschapterhead{\bookmarksetup{bold,color=red165}\MytempMacro}%
\OriginalIndex}
\makeatother

Можно, конечно после \OriginalIndex ещё восстановить старое значение команды
\@makeschapterhead так:

\OriginalIndex \let\@makeschapterhead\MyTempMacro}

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

Это не работает. Если заменить Tableofcontent\tableofcontent и
Printindex\printindex на Thetableofcontent\thetableofcontent - тоже.
Кстати, в чём разница между the и без него, а также между заглавной
буквой и строчной в данном месте?

Разница в том, что это разные команды. Есть специальная команда \the, которую можно применять к переменным, счётчикам и другим регистрам TeX'а. Она печатает текстовое значение регистра. В остальных случаях the в названии команды обычно ничего не означает и появилось исторически. Например, у окружения theindex приставка the отличает его от команды \index, которая уже определена. Поясню в чём особенность обработки окружений. Последовательность

\begin{foo}
...
\end{foo}

практически эквивалентна командам

\begingroup
\foo
...
\endfoo
\endgroup

Это, конечно, не совсем точно, поскольку в командах \begin и \end выполняется ещё несколько дополнительных действий, но по сути можно считать эти последовательности команд эквивалентными. Как видите, каждому окружению соответствует пара команд (\foo и \endfoo). По этой причине нельзя было назвать окружение для предметного указателя так: \begin{index}... \end{index}, поскольку команда \index уже есть и она служит совсем для других целей. Её переопределять с закладками бессмысленно.

Theindex\theindex не работает тоже, зато работает Index/index
(подобрал методом тыка, а не с понятием, к сожалению):

% -----------------------------------------------------------
\let\OriginalIndex\index
\def\index{\bookmarksetup{bold,color=red165}\OriginalIndex}
% -----------------------------------------------------------

но портит всю картину, меняя цвет и некоторых других закладок:

http://s61.radikal.ru/i172/0807/63/d26b6fdbd35e.png (также в приложении)

Я очень не люблю неопределённости и хотел бы знать, почему так
происходит, хотя проблему можно решить, явно ЗАДАВ ЦВЕТ ДЛЯ ВСЕХ
закладок:

% -----------------------------------------------------------
\let\OriginalPart\part
\def\part{\bookmarksetup{bold,color=[rgb]{0,0,0}}\OriginalPart} %
Часть - жирная чёрная закладка

\let\OriginalChapter\chapter
\def\chapter{\bookmarksetup{bold,color=[rgb]{0,0,0}}\OriginalChapter}
% Глава - жирная чёрная закладка

\let\OriginalSection\section
\def\section{\bookmarksetup{bold,color=[rgb]{0,0,0}}\OriginalSection}
% Раздел - жирная чёрная закладка

\let\OriginalSubsection\subsection
\def\subsection{\bookmarksetup{bold=false,color=[rgb]{0,0,0}}\OriginalSubsection}
% Подраздел - обычная чёрная

\let\OriginalSubsubsection\subsubsection
\def\subsubsection{\bookmarksetup{bold=false,color=[rgb]{0,0,0}}\OriginalSubsubsection}
% Подподраздел - обычная чёрная

\let\OriginalParagraph\paragraph
\def\paragraph{\bookmarksetup{bold=false,color=[rgb]{0,0,0}}\OriginalParagraph}
% Параграф - обычная чёрная

\let\OriginalSubparagraph\subparagraph
\def\subparagraph{\bookmarksetup{bold=false,color=[rgb]{0,0,0}}\OriginalSubparagraph}
% Подпараграф - обычная чёрная


\let\OriginalIndex\index
\def\index{\bookmarksetup{bold,color=red165}\OriginalIndex} %
Алфавитный указатель - жирная тёмно-красная закладка - портит всю
картину, меняя цвет и некоторых других закладок, поэтому вид остальных
надо задавать явно.
% -----------------------------------------------------------

Уф-ф-ф...

Осталось разобраться с Оглавлением и его "младшими братьями", а также
с Библиографией (которую я пока не трогал). Буду пока пробовать, а от
всех TeXпертов с нетерпением жду умных мыслей :)



--------------------------------------------------------------------------------


================================================
CyrTeX-ru mailing list Archives and Information:
https://info.vsu.ru/Lists/CyrTeX-ru/List.html



Subscribe (FEED) Subscribe (DIGEST) Subscribe (INDEX) Unsubscribe Mail to Listmaster