如何使页面开头的章节标题和部分标题位于同一行?

如何使页面开头的章节标题和部分标题位于同一行?

考虑测试用例:

\documentclass{report}

\usepackage{titlesec}
\titleformat{\chapter}{\normalfont\LARGE\bfseries}{\thechapter}{10pt}{}
\titlespacing*{\chapter}{0pt}{0pt}{10pt}


\begin{document}
\chapter{Test0}\newpage
\chapter{Test1}\newpage
\section{Test1.1}\newpage
\end{document}

即使将标题前的垂直空间设置为0pttitlespacing页面开头的章节和节标题仍然不在同一行:

在此处输入图片描述

这可以说是使用的结果report,至少在article这方面差异是1pt左右。

是否可以将章节标题前的垂直间距设置为 0 或将其删除?而不是使用titlespacing负值?

答案1

如果你使用贡萨洛梅迪纳或者丹尼尔·埃尔斯答案,章节标题上方的垂直空间“几乎”被删除了。根据 Gonzalo Medina 的回答:

内部命令\ttl@mkchap@i为章节标题添加了一些垂直间距,因此您需要删除这个间距;这可以通过注释掉负责这个间距的行(代码中标有 % NEW 的行)来完成:

应用 Gonzalo Medina 解决方案后的输出: 在此处输入图片描述 红线表示页边距。

通过注释掉 来删除垂直空间后\vspace*,仍然会剩下一小段空间。这个小空间背后的原因是(见支柱)被遗弃在titlesec 文档.来自文档:

通过在某些地方插入一些支柱来定义的样式titlesec以确保垂直空间与基线的关系相同。

要从章节标题中删除此支柱,\nostruts可以在\titleformat章节中使用宏。

\documentclass{report}

\usepackage{titlesec}

\makeatletter
\def\ttl@mkchap@i#1#2#3#4#5#6#7{%
  \ttl@assign\@tempskipa#3\relax\beforetitleunit
  %\vspace*{\@tempskipa}% NEW
  \global\@afterindenttrue
  \ifcase#5 \global\@afterindentfalse\fi
  \ttl@assign\@tempskipb#4\relax\aftertitleunit
  \ttl@topmode{\@tempskipb}{%
    \ttl@select{#6}{#1}{#2}{#7}}%
  \ttl@finmarks  % Outside the box!
  \@ifundefined{ttlp@#6}{}{\ttlp@write{#6}}}
\makeatother

\titleformat{\chapter}{\normalfont\LARGE\bfseries\nostruts}{\thechapter}{10pt}{} %%\nostruts here
\titlespacing*{\chapter}{0pt}{0pt}{10pt}

%-------Shows page layout-------------------
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%-------------------------------------------

\begin{document}
\chapter{Test0}\newpage
\chapter{Test1}\newpage
\section{Test1.1}\newpage
\end{document} 

第一页:

1

第二页:

2

第三页:

3

请注意,该支柱仍然存在于章节标题中,因为我们仅将其从章节标题中删除。

相关内容