![Как поднять заголовок главы в Koma-script, чтобы он совпадал с префиксом главы?](https://rvso.com/image/286992/%D0%9A%D0%B0%D0%BA%20%D0%BF%D0%BE%D0%B4%D0%BD%D1%8F%D1%82%D1%8C%20%D0%B7%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BE%D0%BA%20%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B%20%D0%B2%20Koma-script%2C%20%D1%87%D1%82%D0%BE%D0%B1%D1%8B%20%D0%BE%D0%BD%20%D1%81%D0%BE%D0%B2%D0%BF%D0%B0%D0%B4%D0%B0%D0%BB%20%D1%81%20%D0%BF%D1%80%D0%B5%D1%84%D0%B8%D0%BA%D1%81%D0%BE%D0%BC%20%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B%3F.png)
У меня сейчас вот это:
\documentclass{scrbook}
\usepackage{mwe}
\renewcommand*{\chapterformat}{\mbox{\chapappifchapterprefix{\nobreakspace}\scalebox{3}{\thechapter}\enskip}}
\begin{document}
\chapter{\baselineskip{-1em}This chapter caption has multiple lines and does not fit into a single line}
\lipsum[1]
\end{document}
Но я хочу, чтобы название главы было выровнено с базовой линией префикса, например так:
Я знаю, что слишком длинные названия глав — это боль. Но иногда они не помещаются в одну строку, и я считаю первый результат немного тревожным.
решение1
Использование a \Longstack
будет работать для двухстрочного названия главы, с разрывами, вставленными вручную. Однако, если вы дойдете до трех строк, ни один метод не окажется подходящим для просмотра.
\documentclass{scrbook}
\usepackage{mwe}
\renewcommand*{\chapterformat}{\mbox{\chapappifchapterprefix{\nobreakspace}\scalebox{3}{\thechapter}\enskip}}
\usepackage{lipsum}
\usepackage[usestackEOL]{stackengine}
\begin{document}
\chapter{\Longstack[l]{This chapter caption has multiple lines\\ and does not fit into a single line}}
\lipsum[1]
\end{document}
Обратите внимание также, что \Longstack
не будет выравнивать текст заголовка правого края по правому полю. Его появление здесь просто случайно.
Наконец, если вы хотите использовать оглавление, вам необходимо использовать необязательный аргумент \chapter
:
\chapter[This chapter caption has multiple lines and does not fit into a single line]%
{\Longstack[l]{This chapter caption has multiple lines\\ and does not fit into a single line}}
чтобы избежать отображения стека в toc.
решение2
Решение с автоматическим переносом строк с использованием мини-страниц:
Мини-страницам нужна спецификация ширины. Поэтому я определил новую команду, \chapmark
содержащую большую часть \chapterformat
определения, длину которой я могу измерить. Для этого я использовал две возможности пакета calc
: команду \widthof
и возможность производить вычисления длин. Ориентация базовой линии сохраняется необязательным b
аргументом мини-страниц.
Новая \Chapter
команда (с заглавной буквой C) определена таким образом, что вы можете использовать расширенные возможности KOMA-Script, которые будут указаны в необязательном аргументе, но обратите внимание, что ее нельзя использовать с опцией KOMA-Script, chapterprefix
установленной в значение true. Тогда вместо этого необходимо использовать значение по умолчанию \chapter
, см. вывод ниже глав 11 и 12 в примере.
Кроме того, вывод оглавления не зависит от мини-страниц, см. вывод ниже.
Кроме того, я использовал \RaggedRight
from ragged2e
в качестве замены \raggedright
для лучшего выравнивания.
Вместо \NewDocumentCommand
from xparse
я мог бы использовать также классический метод \newcommand
вместе с тестами на пустые строки из пакетов (x)ifthen
или etoolbox
.
\documentclass{scrbook}
\usepackage[T1]{fontenc}
\usepackage[english]{babel}
\usepackage{calc} % provides advanced length computation and command "\widthof"
\usepackage{ragged2e}% better text alignment
\usepackage{xparse}% advanced command definitions
\renewcommand*{\raggedchapterentry}{\RaggedRight}% for chapter TOC entries
\renewcommand*{\raggedsection}{\RaggedRight}% for alignment in titles
\newcommand*{\chapmark}{%
\scalebox{1.5}{\chapappifchapterprefix{\nobreakspace}}\scalebox{3}{\thechapter}\enskip%
}
\renewcommand*{\chapterformat}{%
\begin{minipage}[b]{\widthof{\chapmark}}
\chapmark
\end{minipage}%
}
\NewDocumentCommand\Chapter{o m}{% note the uppercase "C"
\IfValueTF{#1}% optional argument given or not
{% with optional argument:
\chapter[#1]{%
\begin{minipage}[b]{\textwidth-\widthof{\chapmark}}
#2
\end{minipage}}%
}{% without optional argument:
\chapter[#2]{%
\begin{minipage}[b]{\textwidth-\widthof{\chapmark}}
#2
\end{minipage}}%
}
}
\begin{document}
\Chapter{This chapter caption is too long to fit into a single line} % ch. 1
\Chapter[TOC entry for caption with 3 lines] % ch. 2
{This chapter caption is longer than the first one and does not even fit into
two lines}
\setcounter{chapter}{9}
\Chapter{Another chapter caption that is too long to fit into a single line} % ch. 10
\KOMAoption{chapterprefix}{true}
\Chapter[Another TOC entry for caption with 3 lines] % ch. 11
{This chapter caption is also longer than the first one and does not even fit into
two lines}
\chapter{% ch. 12
This caption produced with \textmd{\textbackslash chapter} is too long to fit into
a single line}
\tableofcontents
\end{document}