考虑测试用例:
\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}
即使将标题前的垂直空间设置为0pt
,titlespacing
页面开头的章节和节标题仍然不在同一行:
这可以说是使用的结果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}
第一页:
第二页:
第三页:
请注意,该支柱仍然存在于章节标题中,因为我们仅将其从章节标题中删除。