我有一个似乎无法解决的问题。基本上,我希望我的章节标题相对于页面顶部的位置与其余文本相同。我在网上查看了大量资源,但问题仍然没有解决... :(
我尝试使用该titlesec
包,但没有结果:
\usepackage{titlesec}
\titleformat{\chapter}[hang]
{\normalfont\Large\bfseries}{\thechapter}{1em}{\Large}
\titleformat{\section}
{\normalfont\Large\bfseries}{\thesection}{1em}{}
\titlespacing*{\chapter} {0pt}{\baselineskip}{0pt}
\titlespacing*{\section} {0pt}{\baselineskip}{0pt}
以下是我得到的输出:
章节标题:
其他文本(部分):
此外,TOC LoF 和 LoT 的标题与正常章节标题间距略有偏差……
请帮忙!
答案1
不幸的是,如果不重新定义 的一些内部结构,这是不可能的titlesec
。它使用命令
\vspace*{<before vspace>}
在章节命令之前。即使在分页符之后,这也是绝对距离。在章节标题之前,它使用
\addvspace{<before vspace>}
关于 有很多规则\addvspace
,例如仅添加最多两个连续的\addvspace
,分页符后没有空格,等等。
为了得到你想要的,你可以尝试以下重新定义
\usepackage{titlesec}
\makeatletter
\def\ttl@mkchap@i#1#2#3#4#5#6#7{%
\ttl@assign\@tempskipa#3\relax\beforetitleunit
\vspace{\@tempskipa}%<<<<<< REMOVE THE * AFTER \vspace
\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
答案2
在大多数文档类中,章节标题以 开头\vspace*{<sink amount>}
。在报告类中,这是定义的第一部分\@makechapterhead
(对于编号章节)和\@makeschapterhead
(对于未编号章节)。
因为该titlesec
包显然没有直接的方法来省略这个空格,所以重新定义两个相关的命令似乎更容易report.cls
。只需将这两个定义复制到你的序言中,注释掉不需要的\vspace
行,将整个块包装在中间\makeatletter ... \makeatother
,然后继续。添加一条评论来说明你为什么这样做;你以后会为此感到高兴的。