![如何提升 Koma-script 中的章节标题以使其与章节前缀对齐?](https://linux22.com/image/286992/%E5%A6%82%E4%BD%95%E6%8F%90%E5%8D%87%20Koma-script%20%E4%B8%AD%E7%9A%84%E7%AB%A0%E8%8A%82%E6%A0%87%E9%A2%98%E4%BB%A5%E4%BD%BF%E5%85%B6%E4%B8%8E%E7%AB%A0%E8%8A%82%E5%89%8D%E7%BC%80%E5%AF%B9%E9%BD%90%EF%BC%9F.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
使用\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}}
以避免堆栈出现在目录中。
答案2
使用 minipages 自动换行的解决方案:
Minipages 需要宽度规范。因此我定义了一个\chapmark
包含大部分\chapterformat
定义的新命令,我可以测量其长度。为此,我使用了包的两个功能calc
:命令\widthof
和计算长度的可能性。基线方向由b
minipages 的可选参数保护。
新\Chapter
命令(大写 C)的定义方式是,您可以使用 KOMA-Script 的增强功能作为可选参数,但请注意,它不能与chapterprefix
设置为 true 的 KOMA-Script 选项一起使用。然后必须使用默认值\chapter
,参见示例中第 11 章和第 12 章的输出。
目录的输出也不受小页面的影响,也请参见下面的输出。
此外,为了更好地对齐,我使用了\RaggedRight
来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}