是什么造成了上边距和目录标题之间的空白?

是什么造成了上边距和目录标题之间的空白?

我正在尝试控制章节标题周围的白色间距,更具体地说是目录标题和顶部边距之间的间距。但是,我似乎无法控制某些间距,有人能告诉我应该转到哪个旋钮吗?

使用以下代码我认为我删除了章节标题周围的所有空白(即目录、参考书目标题等等):

\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 个额外空间,并保留其他章节标题的原样:

  1. 重新定义\chapter宏以向那些不在页面顶部的章节添加 X 垂直空间。
  2. 从所有章节标题中删除 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}

我从以下答案中得到了启发和帮助:

相关内容