我看过这个问题: titlesec 软件包在 \chapter 顶部添加了额外的空间,尽管命令相反
从某种意义上来说,我的代码也是重复的。但是,我想知道是否有更简单的方法可以做到这一点?解决方案中的这段代码让我完全不知所措。
\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
我通常使用包来构造命令等,但这部分代码我完全不明白。抱歉,我真正需要的是一个替代方案,因为我通常更喜欢了解我的代码的作用。
\documentclass[11pt]{book}
\usepackage{titlesec, lipsum, xcolor}
\titleformat{\chapter}[display] % shape
{\bfseries \Huge}
{\hfill \textcolor{gray!50}{\thechapter}} % Label
{0pt} % Separation after chapter name.
{\vspace{70pt}} % Between Chapter no. and name
[\vspace{-1em}\rule{\textwidth}{0.3pt}\\]
\titlespacing*{\chapter}{0pt}{0pt}{0pt}
\begin{document}
\chapter{Hi}
\lipsum[1-8]
\end{document}
基本上,如果可能的话,我想消除前后的所有空间,最好通过比解决方案中提供的代码更简单的代码。
我不明白其中的、 、 、 、\def
、\ttl
、\global
或\ifcase
任何带有的东西代表什么。\relax
\fi
\beforetitleunit
\makeatletter
\makeatother
@
如果没有“更简单”的解决方案,我想那也没关系……如果有帮助的话,我可以使用 tikz 和其他东西。或者,如果有除默认形状之外的形状可以给我同样的结果,那就太好了。
答案1
就这些,我尽量简单。看来你误解了一些参数。请注意,对于水平对齐,我使用了titlesec
( \filleft
, \filright
, \filcenter
) 提供的专用工具;规则 ( \titlerule
) 也是如此。此外,你的第四个强制参数中的 `vspace{70pt} 应该只是第三个参数中的 70pt。
\documentclass[11pt]{book}
\usepackage[showframe]{geometry}%
\usepackage{titlesec, lipsum, xcolor}
\titleformat{\chapter}[display] % shape
{\bfseries \Huge}
{\filleft \textcolor{gray!50}{\thechapter}} % Label
{70pt} % Separation after chapter label.
{} % Before chapter title
[\titlerule]
\titlespacing*{\chapter}{0pt}{-5ex}{1ex}
\begin{document}
\chapter{Hi}
\lipsum[1-8]
\end{document}