Я понимаю, что TeX использует \headline
для размещения заголовков. Если \headline
бы не существовало, как бы можно было реализовать простую версию того же самого? Кроме того, где можно найти простую документацию о том, как это \headline
реализовано за пределамиTeXbook? ИзодинОсобый интерес представляет использование команд, используемых для позиционирования текста заголовка (или поля, в котором находится заголовок).
решение1
\headline
является именованным регистром маркера в plain.tex
, назначенным с помощью \newtoks\headline
и установленным в \headline={\hfil}
(пустое). Его содержимое затем используется в выходной процедуре через \makeheadline
макрос (упрощенно и написано "открыто"):
\def\makeheadline{\vbox to 0pt{\vskip-22.5pt
\hbox to \hsize{\vbox to 8.5pt{}\the\headline}\vss}\nointerlineskip}
То есть, по умолчанию содержатся "жесткие константы" для использования с настройкой 10pt. А содержимое регистра используется в горизонтальном режиме (поэтому не может иметь материал вертикального режима, если не находится внутри \vbox
), охватываячас горизонтальныйразмертекстового блока. Весь этот блок установлен так, чтобы не занимать никакого вертикального пространства, и подкреплен константой 22,5pt над самим текстовым блоком.
Кнут пишет в TeXbook относительно константы в 22,5 пункта:
Магическая константа -22,5pt равна (topskip - height of strut - 2(baselineskip)), т. е. 10pt - 8,5pt - 24pt; это помещает контрольную точку заголовка точно на 24pt выше контрольной точки верхней строки на странице, если только заголовок или верхняя строка не слишком велики.
Макрос также воздерживается от вставки обычного межстрочного пропуска между заголовком и блоком набора.
Например, установим:
\headline={Testing headline\hfill \folio}
будет «Заголовок тестирования» слева, а затем клей сдвинет номер страницы вправо.
Теперь это будет одинаково для каждой страницы, но, скажем, вы хотите иметь разные заголовки для оборотной и лицевой сторон, вы можете сделать что-то вроде
\newtoks\versohead \versohead={\folio\hfill Testing headline}
\newtoks\rectohead \rectohead={Testing headline\hfill \folio}
\headline={\ifodd\pageno\the\versohead\else\the\rectohead\fi}