Как сделать колонтитул latex

Добавил пользователь Владимир З.
Обновлено: 04.10.2024

Использую класс . Наивысшая используемая мной структурная единица --- .
По умолчанию в такой конфигурации верхний колонтитул --- одна строка, содержащая название главы.

Однако если верстать старомодные книги (всего-то середина XIX века --- но оно), в которых названия не столько красивы, сколько информативны (например \chapter ), стандартный верхний колонтитул смотрится мягко говоря не лучшим образом:

Ситуация усугубляется, тем, что я бы хотел сделать не глобальную подмену, а подмену только для случая одной главы.
Варианты решения проблемы:
1. Расширить поле верхнего колонтитула (до [например] двух строк);
2. Подставить вместо названия главы в поле верхнего колонтитула некоторую подходящую по длине текстовую строку.
Однозначного выбора между этими вариантами не вижу.

Простое переназначение @oddhead в тексте никакого видимого эффекта не произвело.
Что было бы правильного почитать про объявление колонтитулов в LaTeX?

За оформление верхних колонтитулов отвечают команды \@oddhead и \@evenhead. Точнее говоря, если стиль оформления документа "двусторонний", то команда \@oddhead задает верхний колонтитул на страницах с нечетными номерами, а команда \@evenhead — на страницах с четными номерами. Если же стиль оформления документа " односторонний", то \@oddhead задает все верхние колонтитулы, а команда \@evenhead на оформление документа вообще не влияет. Аналогично обстоит дело с \@oddfoot и \@evenfoot, отвечающими за нижние колонтитулы. Все четыре названные команды получают некоторое определение в LaTeX'овском стандарте, так что переопределять их надо с помощью \renewcommand.

Теперь обсудим, как вышеназванные команды влияют на оформление колонтитулов. Основной принцип таков. При оформлении страницы верхний колонтитул получается в результате исполнения команды

(мы предположили, что стиль двусторонний и страница четная; в других случаях — с очевидными изменениями). Можно сказать, что в каждой из команд \@evenhead и ей подобных записан текст и TeX'овские команды, которые при верстке страницы будут подставлены в \hbox to \textwidth.

Пусть, например, мы готовим к изданию роман Л.Н.Толстого " Война и мир"; стиль документа выберем двусторонний. Предположим, что мы выбрали такое оформление:

если Вам нужны "простые" колонтитулы, то все зависит от стиля документа. В Львовском можно найти как изменить стандартные надписи в колонтитулах. Вот цитата из одной книги (может Вы и видели):

2.5 Колонтитулы
Содержание верхнего и нижнего колонтитулов зависит от стиля страницы. Изменить его можно декларациями
\pagestyle
\thispagestyle
Декларация \pagestyle устанавливает стиль style, начиная с текущей страницы. Её область действия подчиняется обычным правилам, \thispagestyle устанавливает стиль style только текущей страницы. Имеются четыре предопределенных стиля страницы:
plain Печатается номер страницы в середине нижнего колонтитула. Верхний колонтитул пуст. Используется по умолчанию в стандартных классах, за исключением book и letter.
empty Верхний и нижний колонтитулы пусты. Используется по умолчанию в классе letter.
headings Печатается название секций и номер страницы в верхнем колонтитуле. Нижний колонтитул пуст. Используется по умолчанию в классе book.
При односторонней печати в классах book и report печатается название главы из команды \chapter, а в классах article и ргос —название раздела из команды \section. Такой формат по умолчанию задан описанной ниже декларацией \markright.
При двухсторонней печати колонтитул на левых страницах оформляется как при односторонней печати, а на правой странице в классах book и report печатается название раздела из команды \ section, а в классах article и ргос —название подраздела из команды \subsection. Такой формат по умолчанию для левых страниц задан первым аргументом описанной ниже декларации \markboth, а для правых страниц — \markright.

$\LaTeX

В. Сюткин Справочник по командам

Я бы посоветовал почитать документацию к пакету fancyhdr (C:\texmf\doc\latex\fancyhdr). Я думаю использование этого пакета оптимально, так как легко можно достичь желаемого. Но документация конечно же на английском.

скачал книгу, прочитал, но мало что понял. поясниет пожалуйста!
как вставлять колонтитулы я понял. но это приходиться делать на каждой странице в документе. А каким образом можно автоматизировать этот процесс?чтобы один раз написать Иванов Иван Иванович и чтобы все это шло автоматом по всему документу колонтитуллом.Заранее спасибо!

Я почему-то хочу еще раз повторить, что если у вас большие запросы к колонтитулам, то лучше использовать пакет fancyhdr. Например, я в одном своем документе использовал такой код:

\fancypagestyle \fancyhead<> % ----на обычных страницах без колонтитулов
\renewcommand<\headrulewidth>
>
\fancyhead[LO]

L значит слева, R - справа, O - нечетные страницы, E - четные. Там еще и линия есть. Экспериментируйте! А более детально в документации.

Я почему-то хочу еще раз повторить, что если у вас большие запросы к колонтитулам, то лучше использовать пакет fancyhdr. Например, я в одном своем документе использовал такой код:

\fancypagestyle \fancyhead<> % ----на обычных страницах без колонтитулов
\renewcommand<\headrulewidth>
>
\fancyhead[LO]

L значит слева, R - справа, O - нечетные страницы, E - четные. Там еще и линия есть. Экспериментируйте! А более детально в документации.

В данном же случае - в зависимости от названия главы, секции, подсекции тексты колонтитулов будут менятся.

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

image


Всем привет. Недавно меня тоже настигла переломная веха студенческой жизни — бакалаврская дипломная работа. Среди многих формальных деталей этого замечательного явления особо заметным стоит нормоконтроль. Нет, я понимаю и всячески поддерживаю, что стандарты необходимы, в том числе стандарты на оформление академического текста. Просто наши стандарты, в отличие от западных, достаточно идиотичны. Они не экономят ни чернила, ни бумагу, они не упрощают поиск литературы по номенклатуре, а усложняют чтение названия. Не говоря уже о том, что текст стандарта спроектирован и описан людьми, работающими в редакторе Microsoft Word. Опять-таки, я не имею ничего против Word, это мощнейшая система. Но технический текст в нем набирать неудобно, и по гибкости он во много раз проигрывает бессмертному творению Дональда Кнута — LaTeX.

Под катом я полностью опишу процесс настройки каждой конкретной детали и использование их при написании, а также разные мелочи, упрощающие написание диплома еще больше. Сразу предупреждаю: где-то мои решения могут показаться костылями. Где-то они не слишком универсальны. Я это знаю, понимаю, принимаю и приветствую критику и предложения в комментариях ;-)

Заготовка

Стандарт предполагает написание всего текста 14 шрифтом Times New Roman с полуторным интервалом. Последнее — терминология Microsoft Word :) Чтобы составить её аналог в LaTeX, подключим пакет extsizes , который добавляет в параметры класса документа 14pt, и настроим все остальное, как написано ниже:

\usepackage < extsizes >
\usepackage < cmap >% для кодировки шрифтов в pdf
\usepackage [ T2A ] < fontenc >
\usepackage [ utf8 ] < inputenc >
\usepackage [ russian ] < babel >
\usepackage

\usepackage < graphicx >% для вставки картинок
\usepackage < amssymb,amsfonts,amsmath,amsthm >% математические дополнения от АМС
\usepackage < indentfirst >% отделять первую строку раздела абзацным отступом тоже
\usepackage [ usenames,dvipsnames ] < color >% названия цветов
\usepackage < makecell >
\usepackage < multirow >% улучшенное форматирование таблиц
\usepackage < ulem >% подчеркивания

\linespread < 1.3 >% полуторный интервал
\renewcommand < \rmdefault > < ftm >% Times New Roman
\frenchspacing

Нумерация страниц

Нумерация страниц должна быть проставлена в верхнем правом углу. В моем случае она начинается с №5, так как первые 4 страницы занимают титульная, лист задания, календарный план и прочая бюрократия. Формы для них были присланы в doc/docx, и их гораздо проще распечатать как есть, нежели тратить время на имитирование этого оформления в LaTeX ;)

Стоит отметить, что первая страница главы (chapter) по умолчанию использует стиль страницы plain. Его приходится тоже переопределить в терминах fancyhdr , чтобы номера проставлялись и на первых страницах глав (см. команду \fancypagestyle ).

Подписи под изображениями и таблицами


Настроим формат подписей, для чего прежде всего подключим пакет caption . Поскольку я люблю детальные иллюстрации с несколькими взаимосвязанными подчастями, подключим также и пакет subcaption . По стандарту название рисунка располагается под рисунком, а название таблицы — над таблицей. Следить за этими расположениями вам придется самостоятельно (см. ниже), но пакету можно подсказать об этом законе, чтобы он оптимизировал выделение пустого места соответствующим образом.

Отдельно стоит прокомментировать последнюю строку. Так как я разделяю иногда иллюстрации на подчасти, что позволяет делать пакет subfigure , эти подчасти нужно нумеровать. Принято нумеровать их маленькими буквами по порядку — однако в нашем случае это должны быть буквы кириллицы, а не латиницы! Кириллическое представление счетчиков (по аналогии с известными представлениями arabic , roman , latin и др.) уже реализовано в пакете babel . Называется оно соответственно \asbuk для маленьких кириллических букв, и \Asbuk для больших.

Приведу пример типичного оформления рисунка:

\begin < table >[ ht ]
\ caption < Расчет весомости параметров ПП >
\ label < tab_weight >
\centering
\begin < tabular > < |c|c|c|c|c|c|c|c|c| >
\ hline \multirow < 2 >< * > < Параметр $x_i$ >& \multicolumn < 4 >< c| > < Параметр $x_j$ >&
\multicolumn < 2 >< c| > < Первый шаг >& \multicolumn < 2 >< c| > < Второй шаг >\\
\cline < 2-9 >& $X_1$ & $X_2$ & $X_3$ & $X_4$ & $w_i$ &
$< K_ \text < в >> _i$ & $w_i$ & $< K_ \text < в >> _i$ \\
\ hline $X_1$ & 1 & 1 & 1.5 & 1.5 & 5 & 0.31 & 19 & 0.32 \\
\ hline $X_2$ & 1 & 1 & 1.5 & 1.5 & 5 & 0.31 & 19 & 0.32 \\
\ hline $X_3$ & 0.5 & 0.5 & 1 & 0.5 & 2.5 & 0.16 & 9.25 & 0.16 \\
\ hline $X_4$ & 0.5 & 0.5 & 1.5 & 1 & 3.5 & 0.22 & 12.25 & 0.20 \\
\ hline \multicolumn < 5 >< |c| > < Итого: >& 16 & 1 & 59.5 & 1 \\
\ hline
\end < tabular >
\end

Стоит отметить использование команд \multirow и \multicolumn для создания красивых таблиц. Они соответствуют параметрам HTML

: rowspan и colspan , соответственно. Правда, первый требует подключения пакета multirow .

Результат оформления показан ниже.
Для рисунка:



Заголовки

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

И вот как все это теперь выглядит при печати обыкновенными \chapter и \section :


Списки

Оглавление

Эти команды настраивают все необходимые мелочи из вышеприведенного списка, кроме одной. Со специальными разделами придется обходиться особым образом.

Специальные разделы (аннотация, вступление, список сокращений, выводы, список литературы)

Перечисленные разделы оформляются особенно. Во-первых, каждый из них начинается с новой страницы. Это не проблема — команду \newpage знает каждый. Во-вторых, их заголовок оформляется по центру страницы полужирным шрифтом верхнего регистра… и отделяется от текста двумя строками. И наконец, в довершение этой ахинеи, специальные разделы находятся в оглавлении на уровне глав, но не нумеруются, и главами не являются. Чувствуете, как кому-то было нечего делать?

Команда \chapter* по очевидным причинам не подходит: начатые ею главы не включаются в оглавление. Кроме того, нужно как-то оформить двойной перенос строки перед текстом — ну не писать же \newline вручную каждый раз?

Мы не ищем легких путей. Я решил создать свой собственный вид секции. Как оказалось, это не так-то и сложно.
Чтобы определить секцию (я назвал её likechapter ), для начала стоит определить соответствующую оформляющую команду. Оформить центрирование и капитализацию названия секции — раз плюнуть. Что я и сделал — команда \likechapterheading печатает как надо переданное ей название секции.

Однако секцию нужно еще и включить в оглавление и выровнять по уровню главы. И вот здесь уже нужно чуть извернуться.

  1. Тип перечня, в который добавить строку. В нашем случае это toc — оглавление (table of contents).
  2. Уровень, на котором разместить строку.
  3. Добавляемый текст строки.

Когда LaTeX печатает определенный уровень в оглавлении, он вызывает внутреннюю команду \l@XXX , где XXX — название уровня (chapter, section и т.д.). У этой команды два параметра — текст заголовка и номер страницы. Цель команды — напечатать непосредственно строку оглавления с пунктирной линией, отступами и всем полагающимся. Если мы желаем определить собственный вид уровня, нам достаточно определить такую команду для своего названия уровня. Тогда LaTeX в процессе обработки команды \addcontentsline посмотрит на её второй параметр, найдет среди своих определений соответствующую \l@XXX , где XXX — подставленный этот самый второй параметр, и тем самым закончит печать строки в оглавлении.

Осталось определить команду \l@likechapter (попутно настроив для нее период между точками в пунктирной линии, как в tocloft ), и закончить определение заголовка \likechapter :


Теперь можно и посмотреть на результат трудов. Вот так выглядит начало оглавления:

Специальный раздел показывать смысла нет, полагаю. Это просто жирный капитализированный текст по центру страницы, напечатанный с помощью \likechapter .

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

При верстке ссылок на источники я решил не пользоваться BibTeX, о чем потом тысячу раз пожалел. Необходимость аккуратно вручную расставлять все эти слеши, точки, запятые и тире при описании очередного номера журнала просто убивает. Но, к сожалению, BibTeX я до того не пользовался, и разбираться с настройкой его оформления желание к концу преамбулы уже иссякло. А жаль.

Кстати, уверен, что уже настроенные BibTeX-файлы в уже упоминавшемся проекте disser почти полностью решают эту задачу.

Но пока здесь мы рассматриваем конкретно мою преамбулу. Для верстки списка литературы я пользовался старым добрым окружением thebibliography и командами \bibitem в чистом виде. Для их небольшой настройки необходимо было проделать следующее:

Счетчик страниц, рисунков, таблиц, источников

Начнем со страниц. Здесь дела обстоят проще всего: подключаем пакет lastpage , а в тексте просто ссылаемся на новую определяемую им метку LastPage с помощью \pageref* :

С рисунками и таблицами мог бы помочь пакет totcount, который и был написан для таких целей — подсчитывать количество разнообразных объектов в документе. К сожалению, по состоянию на настоящий момент у него есть серьезный недостаток: счетчики обычно сбрасываются в конце каждой главы при несквозной нумерации, так что на выходе в случае документа типа report, а не article мы получаем не общее количество рисунков, а лишь количество рисунков в последней главе. Автор уведомлен о баге, а пока он работает, необходимо было найти workaround.

Рецепт был найден на просторах StackOverflow. Мы определим для каждого типа объектов собственный счетчик, а потом значение этого счетчика запишем в aux-файл (в конце компиляции, командой \AtEndDocument ). При следующей компиляции оно возьмется из файла, и определенная нами команда подставит в текст необходимое число. Таким образом, после двух запусков pdfLaTeX мы получим текст с корректным значением счетчика.

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

Автоматизацией занимается пакет etoolbox . В нем (помимо всего прочего) есть замечательная команда \pretocmd , которая позволяет приписать к определению любой команды спереди какой-то дополнительный код. В данном случае мы желаем, чтобы перед любым вызовом \chapter изменялось значение счетчика.

Отмечу, что вручную команды изменения счетчиков все же приходится вызвать еще дважды. Один раз в самом конце документа (см. выше \AtEndDocument ). И один раз перед началом приложений, которые классифицируются как главы, но не вызываются с помощью \chapter (см. ниже).

Наконец, с источниками можно поступить точно так же: определить счетчик, автоматически увеличивать его и сбросить в aux-файл в конце компиляции. Только на этот раз хачить придется команду \bibitem :

и можно писать в тексте " \totref ~источников. "

Приложения

Не мудрствуя лукаво, я соорудил костыль. Я решил оформлять приложения как… параграфы. Все равно настоящие параграфы в тексте я нигде не использовал. Дело было за малым — настроить отображение \paragraph в заголовке идентично \chapter , и добавить соответствующую строку в оглавление на уровне likechapter.

Обратите внимание на невыносимую легкость бытия: приложения по сути представляют собой paragraph-ы, оформляются в оглавление как likechapter-ы, но при этом для их подсчета я использую счетчик chapter, потому что по сути-то приложения являются главами :) В качестве представления счетчика взят \Asbuk , так как приложения принято нумеровать заглавными кириллическими буквами.

Теперь поподробнее о том, как оформить каждое из двух обязательных приложений, указанных в дипломной работе бакалавра.

Приложение А: Иллюстративный материал доклада

Первым обязательным приложением являются слайды презентации. Презентацию я создавал в Microsoft Power Point, здесь против отличного продукта у меня никаких претензий не возникает пока. Возможно, наступит скоро в жизни переломный момент, когда я и презентации буду делать в LaTeX, но пока что я еще не на той стадии. Основным доводом является то, что большое количество формул в презентации я набираю на LaTeX-подобном языке разметки, встроенном в Microsoft Office версий 2007 и выше ;)

Итак, презентация готова, сохранена в pptx-файл рядом с исходниками диплома. Как бы теперь ее автоматически вставлять в PDF диплома прямо при компиляции? Способ был найден, и очень простой. Сконвертируем презентацию в PDF и вставим этот PDF внутрь генерируемого с помощью замечательного пакета pdfpages .


Приложение Б: Код программного продукта

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

\usepackage < listings >
%.
\append < Код программного продукта >
\lstset < language= [ Sharp ] C,
morekeywords= < yield,var,get,set,from,select,partial >,
breaklines=true,
basicstyle= \footnotesize \ttfamily >
\linespread < 1 >% вернем временно единичный межстрочный интервал
\lstinputlisting

Организация рабочего пространства

Весь документ, конечно же, разобьем на множество файликов — по одному tex-файлу на подраздел (section). Каждую главу будем хранить в отдельной подпапке, с названием вроде chapter_ProgramSynthesis . В этой папке будет лежать файл chapter_ProgramSynthesis.tex , содержащий в себе сборку подразделов главы, собственно файлы sec_XXX.tex с конкретными подразделами и все нужные дополнительные материалы (например, картинки).

Чтобы включить в тело основного документа файл главы и разрешить ему, в свою очередь, включать в себя подфайлы и искать путь к материалам в своей подпапке, воспользуемся пакетом import . В нем есть прекрасная команда \subimport , которая принимает два параметра — папку, которая временно становится путем поиска файлов, и непосредственно включаемый файл. Для включения глав в диплом определим вспомогательную команду, и можем теперь легко ссылаться на главы по имени.

В основном файле diploma.tex :

В файле chapter_ProgramSynthesis/chapter_ProgramSynthesis.tex :

Файлы sec_Basics.tex и прочие лежат в той же подпапке chapter_ProgramSynthesis . Ссылка на картинки из той же подпапки происходит непосредственно — см. пример определения иллюстрации в начале статьи.

Заключение

В конце концов, мы и любим LaTeX именно за эту безграничную мощь, не так ли? ;) Удачной вам верстки!

Читайте также: