为了格式化标题,我使用了titlesec
包。我需要每个标题前有 12 pt 的空间,标题后有 6 pt 的空间。如果有连续的标题(即标题后直接跟着副标题),我需要它们之间有 12 pt 的空间。因此,我使用了包选项largestsep
。但是,两个标题之间的空间超过 12 pt。我遗漏了什么吗?
引用 titlesec 文档:“默认情况下,当有两个连续的标题时,它们之间使用第一个标题的 aftersep 空格。[…] 使用 largestsep 时,将使用其中最大的一个。”)
梅威瑟:
\documentclass{article}
\usepackage{lipsum}
\usepackage[largestsep]{titlesec}
\titlespacing {\section} {0pt} {12pt} {6pt}
\titlespacing {\subsection} {0pt} {12pt} {6pt}
\begin{document}
\section{Section}
\subsection{Subsection}
\lipsum
\end{document}
答案1
您说这不起作用是对的。在我看来,这看起来像是一个错误。\unskip
在第一个标题后添加可恢复行为,删除插入到输出中的虚假零大小垂直跳跃并阻止内部\addvspace
产生任何影响。我不知道这个额外的零空间是在哪里生成的。
在下面的代码中,\showoutput
告诉我们\unskip
变体导致
...\glue 6.0
...\glue -6.0
...\glue 12.0
正如所期望的,而没有\unskip
我们得到
...\glue 6.0
...\glue 0.0
...\glue 12.0
\documentclass{article}
\usepackage{lipsum}
\usepackage[largestsep]{titlesec}
\titlespacing{\section}{0pt}{12pt}{6pt}
\titlespacing{\subsection}{0pt}{12pt}{6pt}
\begin{document}
\showoutput
\section{Section}\unskip
\subsection{Subsection}
\lipsum[1]
\section{Section}
\subsection{Subsection}
\lipsum[2]
\end{document}
更新:感谢 Ruixi Zhang,已确定了跳过零的来源。代码titlesec
使用 LaTeX \vspace
,本质上是必需的,\vskip
后跟第二个零\vskip
。在适当的内部函数中更改为可获得所需的行为。以下是通过进行的本地\vspace
修补:\vskip
etoolbox
\documentclass{article}
\usepackage{lipsum}
\usepackage{etoolbox}
\usepackage[largestsep]{titlesec}
\titlespacing{\section}{0pt}{12pt}{6pt}
\titlespacing{\subsection}{0pt}{12pt}{6pt}
\makeatletter
\patchcmd{\ttl@straight@ii}{\vspace{\@tempskipb}}{\vskip\@tempskipb}{}{}
\makeatother
\begin{document}
\showoutput
\section{Section}
\subsection{Subsection}
\lipsum[1]
\section{Section}
\subsection{Subsection}
\lipsum[2]
\end{document}
生产胶水序列
...\glue 6.0
...\glue -6.0
...\glue 12.0
如愿以偿,并导致