我尝试过查看,但找不到明确的解决方案。
我有一个文档,其中使用report
with multiple \chapter
s in multiple \part
s,如下所示:
\part{foo}
\chapter{uno}
\chapter{dos}
\part{bar}...
这样一来,整个页面就是“第一部分 Uno”。我想删除分页符,让部分 foo 和章节 uno 都位于同一页上,如下所示:
Part I foo
Chapter 1 Uno
我怎么做?
答案1
随着titlesec
包中,你可以定义一个没有分页符的“标题类”:
\titleclass{\part}{top}
\titleclass{\chapter}{straight}
标题类别包括:
page
:像书本分页一样的单页top
:开始页面并将标题置于顶部straight
:文本中的标题,例如\section
完整示例:
\documentclass{book}
\usepackage{titlesec}
\titleclass{\part}{top}
\titleformat{\part}[display]
{\normalfont\huge\bfseries}{\centering\partname\ \thepart}{20pt}{\Huge\centering}
\titlespacing*{\part}{0pt}{50pt}{40pt}
\titleclass{\chapter}{straight}
\titleformat{\chapter}[display]
{\normalfont\huge\bfseries}{\chaptertitlename\ \thechapter}{20pt}{\Huge}
\titlespacing*{\chapter} {0pt}{50pt}{40pt}
\begin{document}
\part{foo}
\chapter{uno}
\end{document}
答案2
为了实现你的目标没有加载诸如 之类的包时titlesec
,必须 (i) 修改命令\@endpart
,并且 (ii) 更改命令,\chapter
因为它也会默认插入分页符。虽然您没有明确指定这一点,但我进一步假设您 (iii) 想要将“第 xx 部分”材料放在顶部页面顶部,而不是中间。顺便说一句,我假设您的文档设置为“单列”模式,而不是“双列”模式。处理双列情况并不困难,但它确实增加了一些开销,我认为这里不需要。
以下代码显示了如何针对以下情况执行此操作报告文档类。请注意,我创建了一个名为的命令\nonewpagechapter
,并保留了标准\chapter
命令不变。这样,您仍然可以\chapter
在所有这些场合使用该命令做希望章节从新的一页开始。当然,如果\nonewpagechapter
太冗长,不符合你的口味,你可以给它一个更简洁的名字,例如\nchapter
...
\documentclass{report}
\usepackage{etoolbox}
\makeatletter
% First, modify the \@endpart macro.
\def\@endpart{}
% Next, copy the \chapter macro to \nonewpagechapter, and ...
% ... suppress page-breaking instructions in the modified macro
\let\nonewpagechapter\chapter
\patchcmd\nonewpagechapter{\if@openright\cleardoublepage\else\clearpage\fi}{}{}{}
% Third, suppress vertical whitespace before "Part xx" material
\patchcmd{\part}{\null\vfil}{}{}{}
\makeatother
\begin{document}
\part{foo}
\nonewpagechapter{Uno} % starts on same page as "Part I ... foo" header
\chapter{Dos} % starts on a new page
\part{bar} % starts on a new page
\nonewpagechapter{Tres}% starts on same page as "Part II ... bar" header
\end{document}
附录如果有人使用记事本(Koma-Script 书)文档类,而不是报告文档类,他/她必须替换命令
\patchcmd{\part}{\null\vfil}{}{}{}
和
\patchcmd{\part}{\partheadstartvskip}{}{}{}
以抑制在“Part xx”行上方插入额外的空格。其他补丁命令无需修改即可使用。