我正在尝试控制章节标题周围的白色间距,更具体地说是目录标题和顶部边距之间的间距。但是,我似乎无法控制某些间距,有人能告诉我应该转到哪个旋钮吗?
使用以下代码我认为我删除了章节标题周围的所有空白(即目录、参考书目标题等等):
\documentclass{report}
\usepackage{biblatex}
\usepackage{titlesec}
\usepackage{etoolbox}
\usepackage{showframe}
\usepackage{filecontents}
\begin{filecontents}{refs.bib}
@misc{ref,
title = {A title},
author = {Doe, J.},
year = {2000},
}
\end{filecontents}
\addbibresource{refs.bib}
\nocite{*}
\titleformat{\chapter}{
\sffamily\fontsize{18pt}{18pt}
\bfseries
}{\thechapter}{0pt}{}
\titlespacing{\chapter}{0pt}{0pt}{0pt}
\titlespacing{name=\chapter,numberless}{0pt}{-15pt}{0pt}
\setlength{\parskip}{0pt}
\patchcmd{\chapter}{\if@openright\cleardoublepage\else\clearpage\fi}{}{}{}
\begin{document}
\tableofcontents
\listoffigures
\clearpage
\section{first}
\begin{figure}
Text in figure
\caption{First figure}
\label{fig:Fig1}
\end{figure}
\begin{figure}
Text in figure
\caption{Second figure}
\label{fig:Fig2}
\end{figure}
\section{second}
\section{third}
\clearpage
\printbibliography[heading=bibintoc, title={Bibliography}]
\end{document}
但这是我得到的结果:
以下部分似乎没有这个问题:
我读这个答案那:
由于多种原因,当章节样式为显示时,titlesec 继续使用默认的 \@makechapterhead 宏来排版章节标题。... \@makechapterhead 在标题上方添加 50pt 空间,并在其后添加 40pt 空间。
但添加建议-50pt
的\titlespacing
似乎不起作用。添加-15pt
似乎有效,这是否意味着 titlesec 中发生了一些变化,或者这是另一种情况,需要其他解决方案?
编辑:但是我刚刚注意到上述解决方案存在一个问题,当在同一页面上打印额外的“...列表”如图形时(参见上面更新的代码),下一个列表的标题将会剪辑到目录中,如下所示:
我怎样才能防止这种情况发生,同时仍将目录章节放在页面的最顶部?
答案1
好的,下面是我提出的问题的解决方法。我不确定我是否会真正使用它,因为正如 cfr 在评论中指出的那样,我最好只是更改文档类。我需要检查是否/如果我这样做还会有什么问题,不过这个解决方案似乎有效。
我所做的就是从页面顶部的章节标题中删除 X 个额外空间,并保留其他章节标题的原样:
- 重新定义
\chapter
宏以向那些不在页面顶部的章节添加 X 垂直空间。 - 从所有章节标题中删除 X 垂直空格。
这样,页面顶部的章节标题中就多出了 X 个空格,而其他章节标题则没有移动。然后我也可以使用
\titlespacing*{\chapter}{0pt}{0pt}{0pt}
\titlespacing*{name=\chapter,numberless}{0pt}{0pt}{0pt}
使章节标题周围的间距在视觉上为 0pt,而不是像以前一样使用 -15pt。下面是我重新定义它的方式:
\makeatletter
\let\oldchapter\chapter
\renewcommand*\chapter{%
\@ifstar{\starchapter}{\@dblarg\nostarchapter}
}
\makeatother
\newcommand*\starchapter[1]{\vspace{15pt}\vspace*{-15pt}\oldchapter*{#1}}
\def\nostarchapter[#1]#2{\vspace{15pt}\vspace*{-15pt}\oldchapter[{#1}]{#2}}
请注意,我不确定 15pt 是否是“正确”的数值,但它看起来最好。以下是完整示例:
\documentclass{report}
\usepackage{biblatex}
\usepackage{titlesec}
\usepackage{etoolbox}
\usepackage{showframe}
\usepackage{filecontents}
\begin{filecontents}{refs.bib}
@misc{ref,
title = {A title},
author = {Doe, J.},
year = {2000},
}
\end{filecontents}
\addbibresource{refs.bib}
\nocite{*}
\def\chpfontsize{18pt}
\def\extraskip{3pt}
\def\chpbaselineskip{\chpfontsize+\extraskip}
\def\extrachpspc{15pt}
\titleformat{\chapter}{
\sffamily\fontsize{\chpfontsize}{\chpbaselineskip}
\bfseries
}{\thechapter\quad}{0pt}{}
\titlespacing*{\chapter}{0pt}{0pt}{0pt}
\titlespacing*{name=\chapter,numberless}{0pt}{0pt}{0pt}
\setlength{\parskip}{0pt}
\patchcmd{\chapter}{\if@openright\cleardoublepage\else\clearpage\fi}{}{}{}
\makeatletter
\let\oldchapter\chapter
\renewcommand*\chapter{%
\@ifstar{\starchapter}{\@dblarg\nostarchapter}
}
\makeatother
\newcommand*\starchapter[1]{\vspace{\extrachpspc}\vspace*{-\extrachpspc}\oldchapter*{#1}}
\def\nostarchapter[#1]#2{\vspace{\extrachpspc}\vspace*{-\extrachpspc}\oldchapter[{#1}]{#2}}
\begin{document}
\tableofcontents
\listoffigures
\clearpage
\chapter{My Chapter}
\section{first}
\begin{figure}
Text in figure
\caption{First figure}
\label{fig:Fig1}
\end{figure}
\begin{figure}
Text in figure
\caption{Second figure}
\label{fig:Fig2}
\end{figure}
\section{second}
\section{third}
\clearpage
\printbibliography[heading=bibintoc, title={Bibliography}]
\end{document}
我从以下答案中得到了启发和帮助:
- 重新定义
\chapter
- 这到底是干什么
\@dblarg
的? - 当然还有 Mico 对我的问题的评论