Titlesec

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

Обзор документации.

Пакет TITLESEC

Подключение пакета

Для установки пакета в преамбуле документа пишем:

\usepackage[explicit]{titlesec}

Родная документация

https://mirror.macomnet.net/pub/CTAN/macros/latex/contrib/titlesec/titlesec.pdf

Сам пакет на SPAN

https://ctan.org/pkg/titlesec

команда explicit мне будет нужна, чтобы в настройках заголовков указывать {#1} для подстановки в нужное место.

В пакете есть так называемые простые настройки и продвинутые.

Простые настройки

Что можно изменять в формате

Для настройки формата заголовка используем три параметра:

  1. Тип шрифта rm sf tt md bf up it sl sc по умолчанию в заголовках стоит \bf.
  2. Размер шрифта big medium small tiny
  3. Выравнивание заголовка raggedleft center raggedright
  4. compact — задает более компактный вид и уменьшает пробелы
  5. uppercase — выведет все буквы заглавными (говорят не всегда работает)

Основные команды в простом режиме

titlelabel

\titlelabel{⟨label-format ⟩} Эта команда изменяет формат метки заголовка

\titlelabel{\thetitle\quad}

т.е можно настроить буквенный вывод, изменить длину пробела, поставить точку и т.д.

titleformat

\titleformat*{⟨command ⟩}{⟨format⟩} Собственно сам формат заголовка.

command — это \section, \subsection и т.д.

format — соответственно, все, что было сказано выше. Размер шрифта, семейство шрифта и выравнивание.

\titleformat*{\section}{\Large\sf}

Собственно для простой настройки и все!!!

Продвинутые настройки

titleformat

\titleformat{⟨command ⟩}[⟨shape⟩]{⟨format⟩}{⟨label ⟩}{⟨sep⟩}{⟨before-code⟩}[⟨after-code⟩]

command:

это:

  • \part,
  • \chapter,
  • \section,
  • \subsection,
  • \subsubsection,
  • \paragraph,
  • \subparagraph.

shape:

это:

  • hang — значение по умолчанию (висящая метка)
  • block — заголовок помещает в блок. Можно добавлять рисунки и прочее.
  • display — помещает метку в отдельный абзац.
\titleformat{\section}[display] 
{\fontsize{120}{20}\boldfont} 
{\vbox{\hfil\thesection}\hfil}{0em}
{\LARGE\uppercase{#1}}

\titlespacing{\section} {0pc}{20.5ex plus .1ex minus .2ex}{30.5ex minus .1ex}[0pc]

Пример заголовка

Вот так получится.

  • runin — в документации пишут, что как стандартный параграф, но особо не заметил разницы. Наверно бесполезная вещь.
\titleformat{\subsection}[runin] 
{\fontsize{44}{10}\boldfont} 
{\thesection}{0.5em}
{\LARGE\uppercase{#1}}

\titlespacing{\section} {0pc}{20.5ex plus .1ex minus .2ex}{30.5ex minus .1ex}[0pc]

Образец заголовка

Использую пакет fontspec для большей красоты настроек. fontsize оттуда.

  • leftmargin — тяжело понять, лучше увидеть. Все выравнивает по левому краю.
\titleformat{\subsection}[leftmargin] 
{\boldfont} 
{\thesection}{1.5em}
{\Large\uppercase{#1}}

\titlespacing{\subsection} {-15pc}{2.5ex plus .1ex minus .2ex}{3.5ex minus .1ex}[5pc]
...

\subsection{Subsection test two line}

Образец заголовка

И еще одна интересная заметка для заголовка: если я меняю первый параметр в \titlespacing на 3pc то получится:

Образец заголовка

  • rightmargin — как leftmargin, но только вправо. Но у меня результата не получилось. Все улетает за пределы страницы.

titlespasing изменил третий параметр в отрицательную величину, и добился результата.

  • drop/wrap — реально оборачивает текст вокруг заголовка
\titleformat{\subsection}[wrap] 
{\Large\boldfont} 
{\thesection}{1.5em}
{\uppercase{#1}}

\titlespacing{\subsection}{2pc}{4.5ex plus .1ex minus .2ex}{8.5ex plus .2ex minus .1ex}[2pc]

но нужно правильно настроить 3-й параметр в \titlespacing я для своего заголовка поставил 8.5ex, в общем подбираем экспериментально.

Но получилось: Образец заголовка

\titlespacing{\subsection}{12pc}{8.5ex plus .1ex minus .2ex}{8.5ex plus .2ex minus .1ex}[6pc]

поменял настройки на 12pc и заголовок стал выглядеть приятнее, Образец заголовка для сравнения если я поставлю drop то будет перенос строк по другому режиму: см. ниже: Образец заголовка

  • frame — также переносит метку в отдельный параграф как display, но еще рисует рамку

Образец заголовка

format

Все что угодно из латекса. Ставится перед заголовком и действует на метку и заголовок. Цвет, шрифт, размер и пр.

\titleformat{\section}[display] 
{\color{red}\fontsize{120}{20}\boldfont} 
{\vbox{\hfil\thesection}\hfil}{0em}
{\LARGE\uppercase{#1}}

label

метка раздела. Чтобы все работало корректно лучше ставить, если предусмотрено стилем. Т.к., когда будет применяться команда заголовка со *, то номер подавится автоматически.

\thesection
\thesubsection
\thesubsubsection
...

sep

отступ от метки. Тоже нельзя оставлять пустым. 0pt но поставь.

before-code

самая звездная штука. В нее можно поставить вообще все и в качестве аргумента вляпать #1 как текст заголовка.

\titleformat{\section} 
{\LARGE\boldfontwhite} 
{}{.5em}
{\colorbox{BleuLBA}{\parbox{21cm}{\rule[-5pt]{0pt}{21pt}\hspace{1.5cm}\thesection\, \uppercase{#1}}}}

это я сделал для французов в синей рамочке белыми буквами. Но тут есть одна ошибка. Надеюсь с ней разобраться. Это номер заголовка.

Образец заголовка

after-code

тоже самое, что и before, только код ставит после заголовка. Любой!

chaptertitlename

изменяет название главы по умолчанию

\renewcommand{\chaptertitlename}{Новое название главы}

titlespacing

\titlespacing*{⟨command ⟩}{⟨left⟩}{⟨before-sep⟩}{⟨after-sep⟩}[⟨right-sep⟩]

Нужная команда для настроек пространства заголовка

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

command

команда заголовка \section и т.д.

left

обязательный параметр, может быть положительный и отрицательный делает отступ заголовка влево и вправо.

Помогает при настройке с параметром drop и wrap.

before-sep

буквально вертикаьный отступ перед заголовком

after-sep

двигает текст после заголовка вертикально и горизонтально. Важен при настройке текста с обтеканием.

right-sep

необязательный параметр для установки отступа справа для установок с hang, block и display. Помогает залезать в правое поле. Это \beforetitleunit и \aftertitleunit тонкие настройки клея в заголовках. Я не использую.

А теперь я добился того, ради чего затевал этот конспект. Я настроил заголовок без ошибок:

%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%5000
\titleformat{\section} [hang]
{\LARGE\boldfontwhite} 
{\llap{\colorbox{BleuLBA}{\parbox{2cm}{\rule[-5pt]{0pt}{21pt}\filleft\thesection}}}}{0em}
{\colorbox{BleuLBA}{\parbox{21cm}{\rule[-5pt]{0pt}{21pt}\filright \uppercase{#1}}}}

\titlespacing{\section} {0pc}{2.5ex plus .1ex minus .2ex}{3.5ex minus .1ex}[0pc]

Результат смотрим ниже: Образец заголовка

Дополнительные команды выравнивания

\filright \filcenter \filleft \fillast \filinner \filouter в принципе благодаря им очень хорошо настроил и решил свою задачу выше.

Они заполняют пространство перед или после заголовкаа, в зависимости от названия.

\wordsep — пространство между слов в заголовке

indentafter noindentafter — обходит настройки отступов страницы

rigidchapters rubberchapters — регулирует пространство между титулом главы и текстом.

bottomtitles nobottomtitles nobottomtitles*

Устанавливаем минимальное пространство внизу страницы, чтобы заголовок не переносился на новую страницу.

\renewcommand{\bottomtitlespace}{⟨length ⟩}

aftersep largestsep

По умолчанию, когда есть два последовательных заголовка, между ними используется пространство ⟨after-sep⟩ от первого. Иногда это нежелательное поведение, особенно когда пространство ⟨before-sep⟩ намного больше, чем пространство ⟨after-sep⟩ (в противном случае предпочтительнее выглядит значение по умолчанию).

pageatnewline — этот странный параметр насильно разрывает заголовок на разные страницы, хотя по умолчанию команды \\ \\* подавлены.

\nostruts nostruts — подавляет умничество latex при изменении высоты пространства в заголовках.

RULES

Добавляет линии под заголовками и не только.

\titleline[⟨align⟩]{⟨horizontal material ⟩} 
\titlerule[⟨height ⟩] 
\titlerule*[⟨width ⟩]{⟨text ⟩}

Можно добавить прямо в текст и получить результат для одного заголовка:

\section{Title first}
\label{sec:title-first}
\titlerule[.8pt]% 
\vspace{1pt}% 
\titlerule

или можно эту же конструкцию добавить в настройки \titleformat. Образец заголовка

calcwidth — изменяет формат переноса строк для режима wrap

PAGE STYLES

\assignpagestyle{⟨command ⟩}{⟨pagestyle⟩}
...
\assignpagestyle{\chapter}{empty}

любой главе или странице можно назначить стиль по умолчанию.

Breaks

\sectionbreak \subsectionbreak \subsubsectionbreak \paragraphbreak \subparagraphbreak \⟨section⟩break

\newcommand{\sectionbreak}{\clearpage}
или
\newcommand{\sectionbreak}{% 
\addpenalty{-300}% 
\vspace*{0pt}}

эта утилита настраивает автоматический разрыв страниц при достижения заданных параметров в разделах.

\chaptertolists — изменяет отступы перед заголовками

\newcommand{\chaptertolists}{}

а этот будет пустой

Команды в преамбуле

explicit

позволяет указывать в titleformat #1 как место для текста заголовка

\titleformat{\section} 
{..} 
{\thesection}{..}{#1.}

newparttoc oldparttoc

используется если \part была переопределена, помогает настроить TOC

clearempty

Изменяет поведение \cleardoublepage, чтобы на пустых страницах использовался стиль пустой страницы.

toctitles

Изменяет поведение необязательного аргумента в заголовках разделов, так что он устанавливает только заголовки в квадратных скобках, а не записи оглавления, которые будут основаны на полном заголовке.

newlinetospace

Заменяет каждое вхождение символов \ или \* в заголовках на пробел в заголовках и записях оглавления.

Расширенные настройки

⟨key⟩=⟨value⟩, ⟨key⟩=⟨value⟩, ⟨key⟩, ⟨key⟩,...

Первый аргумент как \titleformat, так и \titlespaceing имеет расширенный синтаксис, который позволяет устанавливать разные форматы в зависимости от контекста.

  • name= Допустимые значения: \chapter, \section и т. д.
  • page= Допустимые значения: odd или even.
  • numberless Бесполезный ключ. В этом нет необходимости, если вы не хотите установить разные нумерованные (без этого ключа) и ненумерованные (с безномерными) варианты.
\titleformat{name=\section,page=even}[leftmargin]
{\filleft\scshape}{\thesection}{.5em}{} 

\titleformat{name=\section,page=odd}[rightmargin]
{\filright\scshape}{\thesection}{.5em}{}

Создание новыхуровней заголовков

\titleclass{⟨name ⟩}{⟨class ⟩}  \titleclass{⟨name⟩}{⟨class⟩}[⟨super-level-cmd ⟩]

Существует три класса:

  • page — это часть книги, на одной странице,
  • top — это \chapter, который начинает страницу и помещает заголовок вверху,
  • straight предназначен для заголовков в середине текста.

В первом случае \titleclass{\part}{straight} заменяется просто класс.

Во втором случае, можно создать новые подуровни:

\titleclass{\subchapter}{straight}[\chapter] %новый класс
\newcounter{subchapter} %новый счетчик
\renewcommand{\thesubchapter}{\Alph{subchapter}} %буквенный счетчик

уровни секций изменяются автоматически

Глава 0 – уровень \section — 1 уровень и т.д.

loadonly

Обнулит все настройки уровней и позволит создавать свои уровни с нуля.

\titleclass

\titleclass{⟨name ⟩}[⟨start-level-num ⟩]{⟨class ⟩}

добавляет высшего уровня заголовок (0) или (-1) и дальше создаем сои новые уровни.

FootNotes

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

\usepackage[stable]{footmisc}

Номер заголовка в BOX

Полезная вещь. Особенно когда колдуешь с отступами за пределы печатаемой области или работаешь с цветами.

\titleformat{\section} 
{..} 
{\makebox[2em]{\thesection}}{..}{..}

или

\titleformat{\section} [hang]
{\LARGE\boldfontwhite} 
{\llap{\colorbox{BleuLBA}{\parbox{2cm}{\rule[-5pt]{0pt}{21pt}\filleft\thesection}}}}{0em}
{\colorbox{BleuLBA}{\parbox{21cm}{\rule[-5pt]{0pt}{21pt}\filright \uppercase{#1}}}}

Подавляет нумерацию заголовков

\setcounter{secnumdepth}{0}

или

\newenvironment{exercises} 
{\setcounter{secnumdepth}{0}} 
{\setcounter{secnumdepth}{2}}

или

\newenvironment{exercises} 
{\setcounter{secnumdepth}{0}%
\addtocontents{toc}{\protect\setcounter{tocdepth}{0}\ignorespaces}} 

{\setcounter{secnumdepth}{2}%
\addtocontents{toc}{\protect\setcounter{tocdepth}{2}\ignorespaces}}

Как пометить заголовки со сзвездочкой

\newcommand{\secmark}{} 
	\newenvironment{advanced} 
		{\renewcommand{\secmark}{*}} 
		{} 
\titleformat{\section} {..} 
{\thesection\secmark\quad}{..}{..}  

В документе пишим  

\begin{advanced} 
\section{...} ... 
\end{advanced}

Этот раздел будет со звездочкой.

Крутой код по настройке стилей страниц

\documentclass[14pt,a4paper,twoside]{extbook}
\usepackage[utf8]{inputenc} %
\usepackage[T1]{fontenc}
\usepackage{lmodern} %
\usepackage[pagestyles]{titlesec}
\usepackage[x11names]{xcolor} %
\usepackage{theorem}
\newtheorem{worked example}{Worked Example}[chapter]
\newtheorem{solution}{SOLUTION}[chapter]
%\usepackage{anyfontsize}
\usepackage{amsfonts}
\usepackage{textcomp}
\usepackage{enumerate}
\setlength\headheight{21pt}

\newcommand{\hsp}{\hspace{20pt}}
\newcommand{\ntl}{\newline \newline}

\titleformat{\chapter}[hang]{\fontsize{50}{60}\bfseries\color[rgb]{0,0.5,0.75}}{\thechapter\hsp\fontsize{90}{60}\selectfont\textcolor{black}{|}\hsp}{0pt}{\thispagestyle{empty}\Huge\bfseries}

\titleformat{\section}{\large\bfseries}{}{0pt}{\textcolor[rgb]{0,0.5,0.75}{Topic \thesection} \ }[{\titlerule[0.8pt]}]

\usepackage{blindtext}

\newpagestyle{mine}{%
\setlength\fboxsep{10pt}
\sethead[\bfseries\llap{\colorbox{SteelBlue3}{\parbox{\dimexpr\marginparsep + \marginparwidth\relax}{\hspace{20pt}\color{white}\thepage\vphantom{|}}}}%
\colorbox{SlateGray2!40}{\parbox{\dimexpr\linewidth-2\fboxsep}{~\thechapter~|\hspace{0.75em}\chaptertitle}}][][]%
{}{}{\bfseries\colorbox{SlateGray2!40}{\parbox{\dimexpr\linewidth-2\fboxsep}{\thesection~|\hspace{0.75em}\sectiontitle}}%
\rlap{\colorbox{SteelBlue3}{\parbox{\dimexpr\marginparsep + \marginparwidth\relax}{\hspace{20pt}\color{white}\thepage\vphantom{|}}}}}
\setfoot{}{}{}
}

\pagestyle{mine}

\begin{document}

\chapter{{NUMBER}}%\textcolor{black}
\section{BIDMAS.}
\blindtext[10]

\end{document} 

Выдает шикарную вещь: Образец заголовка