是否有人知道根据标题所占的行数获取章节标题后的动态垂直空间的最优雅的方法?
我希望文本主体始终从相同的垂直位置开始,无论章节标题是否跨越 1/2/3 行。
标准基础设施,如\renewcommand*{\chapterheadendvskip}
或
\titlespacing{<command>}{<left>}{<before-sep>}{<after-sep>}[<right>]
从titlesec
包装中只允许相对的垂直间距。
所以我需要类似的东西
\renewcommand*{\chapterheadendvskip}{\vskip\dimexpr 35mm-\n\baselineskip}
其中\n
,表示具体章节标题所占的行数。
梅威瑟:
\documentclass{scrbook}
\usepackage{lipsum}
\renewcommand*{\chapterheadendvskip}{\vskip 35mm}
\begin{document}
\chapter{This is a simple headline}
\lipsum[1]
\chapter{This is a very very long headline taking two or more lines making the
text shift down accordingly}
\lipsum[1]
\end{document}
多谢!
答案1
您可以重新定义\chapterlinesformat
:
\documentclass{scrbook}
\usepackage{lipsum}
\RedeclareSectionCommand[afterskip=35mm]{chapter}
\makeatletter
\renewcommand*{\chapterlinesformat}[3]{%
\parbox[t][0pt][t]{\linewidth}{\raggedchapter\@hangfrom{#2}{#3}}%
}
\makeatother
\begin{document}
\chapter{This is a simple headline}
\lipsum[1]
\chapter{This is a very very long headline taking two or more lines making the
text shift down accordingly}
\lipsum[1]
\end{document}
如果您需要将章节标题第一行的顶部边缘与文本区域的顶部边缘对齐,则需要\par
在 的末尾添加一个额外\chapterlinesformat
的高度。但是,章节标题第一行的额外高度(例如\rule{2cm}{2cm}
)可能会将章节标题后的文本向下移动。您可以使用一些额外的\parbox
和\strut
魔法来避免这种情况:
\documentclass{scrbook}
\usepackage{lipsum}
\usepackage{showframe}% show the text area for debugging
\RedeclareSectionCommand[%
beforeskip=-1sp,% no space or glue before the chapter head and no indent of
% the first paragraph after the chapter
afterskip=35mm,% 35mm (but no glue) after the first line of the chapter head
]{chapter}
\makeatletter
\renewcommand*{\chapterlinesformat}[3]{%
\parbox[t][\ht\strutbox][t]{\linewidth}{\strut
\parbox[t][0pt][t]{\linewidth}{%
\vskip -\ht\strutbox
\raggedchapter\@hangfrom{#2}{\strut #3}}\par
}%
}
\makeatother
\begin{document}
\chapter{This is a simple headline}
\lipsum[1]
\chapter{This is a very very long headline taking two or more lines making the
text shift down accordingly}
\lipsum[1]
\chapter{\protect\rule{5em}{5em}This rule breaks everything}
\lipsum[1]
\end{document}
如果有带前缀行的章节,则必须重新定义\chapterlineswithprefixformat
。有关这些命令及其默认值的更多信息,请参阅手册。
答案2
如果您没有被困在scrbook
课堂上,那么这个titlesec
包裹就有rigidechapters
适合您的。
例子:
\documentclass[a4paper, openany]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[showframe]{geometry}
\usepackage{microtype}
\SetTracking[no ligatures={f}]{encoding=*}{50}
\usepackage{lipsum}
\usepackage[newlinetospace, rigidchapters]{titlesec}%
\titleformat{\chapter}[display]
{\sffamily\bfseries\LARGE\filleft} %\normalsize
{{\Huge\thechapter}\vspace{0.5ex}\\
\titlerule[1.5pt]}%
{0ex}
{\lsstyle}%
\titlespacing{\chapter}{0pt}{0.5cm}{6cm}
\begin{document}
\chapter{Introduction}
\lipsum[1-3]
\chapter{Particles Interaction\\ with Multiphase Fluid \\ and the Applications}
\lipsum[5-8]
\end{document}