titlesec 软件包在 \chapter 顶部添加了额外的空间,尽管命令相反

titlesec 软件包在 \chapter 顶部添加了额外的空间,尽管命令相反

我所在大学的博士论文指南规定了章节第一页的精确顶部边距。我尝试使用 titlesec 设置此边距,但它似乎总是将其设置为大于应有的边距。编译以下代码时,从文本区域顶部到单词 Chapter 的边距大于 0,据我所知,以下代码应将其设置为 0。

\documentclass[12pt]{report}
\usepackage[compact]{titlesec}
\titleformat{\chapter}
    [display]
    {\normalfont\Large\bfseries\centering}
    {\large\chaptertitlename\ \thechapter}
    {0in}
    {}

\titlespacing*{\chapter}{0pt}{*0}{*0}
\begin{document}
\chapter{Hello}
Hello
\end{document}

我真正想要的是章节名称上方总共正好两英寸的上边距。根据 Gonzalo 的回复,我希望下面的方法可以奏效,但它仍然将上边距设置为 0。更令人困惑的是,添加 \vspace*{1in} 会使上边距增加一英寸以上!为什么?

\documentclass[12pt]{report}

\usepackage[showframe]{geometry}
\usepackage[compact]{titlesec}

\titleformat{\chapter}
    [display]
    {\normalfont\Large\bfseries\centering}
    {\large\chaptertitlename\ \thechapter}
    {.1in}
    {}

% the following block eliminates the extra space above a chapter heading
\makeatletter
\def\ttl@mkchap@i#1#2#3#4#5#6#7{%
  \ttl@assign\@tempskipa#3\relax\beforetitleunit
  %\vspace*{\@tempskipa}% NEW
  %\vspace*{1in}
  \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

\titlespacing*{\chapter}
    {0pt} % left
    {1in} % before
    {.5in} % after

\begin{document}
\chapter{Hello}
Hello
\end{document}

答案1

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

\documentclass{book}
\usepackage[showframe]{geometry} % just for the example
\usepackage{titlesec}
\usepackage{lipsum}

\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}[display]
    {\normalfont\Large\bfseries\centering}
    {\large\chaptertitlename\ \thechapter}
    {0in}
    {}
\titlespacing*{\chapter}{0pt}{*0}{*0}

\begin{document}

\chapter{Test chapter}

\lipsum[1-12]

\end{document}

在此处输入图片描述

我添加了geometry带有showframe选项的包只是为了说明结果。

现在已经对原始问题进行了编辑,下面是产生新请求结果的代码:

\documentclass[12pt]{report}
 \usepackage[top=1in, bottom=1in, left=1.5in, right=1in,showframe]{geometry}
\usepackage[compact]{titlesec}
\usepackage{lipsum}

\newlength\mylen
\setlength\mylen{\dimexpr\topskip+\baselineskip-\ht\strutbox-1in\relax}

\titleformat{\chapter}
    [display]
    {\normalfont\Large\bfseries\centering}
    {\large\chaptertitlename\ \thechapter}
    {.1in}
    {}

\titlespacing*{\chapter}
    {0pt} % left
    {-\mylen} % before
    {.5in} % after

\begin{document}
\chapter{Hello}
\lipsum[1-12]
\end{document}

在此处输入图片描述

相关内容