Titlesec:删除空白边距部分后的空格

Titlesec:删除空白边距部分后的空格

我用它titlesec来为我的部分分配一些自定义格式。特别是我想使用 margin \section,这样标题部分就会排版在左边距上,并且该部分的文本将从与图块相同的高度开始。

但是我在间距方面遇到了一点问题:当 a\section后面紧跟着 a\subsection时,会添加不必要的垂直空间,并且子部分的标题不再与部分的标题对齐(参见下面的代码和图片)。我该如何解决这个问题?

\documentclass{article}
\usepackage{lipsum}
\usepackage{titlesec}
\titleformat{\section}[leftmargin]{\raggedright\scshape}{}{0pt}{}
\titlespacing*{\section}{2.5cm}{*2.5}{0.5cm}
\titleformat{\subsection}{\bfseries}{}{0pt}{}
\titlespacing*{\subsection}{0pt}{*2}{*1}
\begin{document}
\section{First}
\lipsum[1]
\section{Second}
\subsection{This is not nice}
\lipsum[1]
\subsection{This is fine}
\lipsum[1]
\end{document}

titlesec 间距错误

更新:因为我确实需要这个问题的答案(我正在一些我应该很快交付的文档中使用它),所以我将向任何能给我带来答案的人提供赏金。

对于决定解决这个问题的人,我已经浏览了 titlesec 的源代码,并找到了一些获得所需结果的黑客方法。它涉及抑制一些\leavevmode,延迟对一些间距参数的分配子节已排版,并且使 titlesec 将有问题的\subsection标题直接排版到文档中,而不是排版到“框”中以便定位。遗憾的是,这也导致以下段落的缩进出现问题。

我会看到比这更简单的解决方案。从概念上讲,我想做的事情非常简单:在之后以\section某种方式告诉 titlesec 抑制在下一个之前插入的任何垂直间距\subsection。所以我仍然希望存在一些简单的解决方案,但我错过了它,因为我对间距、垂直/水平模式以及段落的排版方式没有太多经验。

即使解决方案更复杂一点,理想的方案是与 titlesec 配合使用,并且不会破坏其任何其他选项。但是,最终我还是会选择一个次要的解决方案,该解决方案修补了 的定义\subsection并使其至少在我的示例和我上面给出的预期配置中工作。

答案1

这是一个非常有趣的布局。尝试以下代码。布尔值与 挂钩\everypar。这意味着如果首先是普通段落,则将其设置为 false,并且下一个子节将具有正常间距。还请注意命令\secskip结束的奇怪位置,但它似乎有效。

编辑 1:恢复原样,并在将子部分向上移动之前\everypar删除垂直空间。 移除所有胶水并添加以防止拉伸。\lastskip\raggedbottom

编辑 2:看起来额外的垂直间距是否\baselineskip

\usepackage{titlesec}
\makeatletter
\newif\ifaftersec\aftersecfalse

\newcommand\setsubskip{%
    \global\aftersectrue
    \everypar{%
        \global\aftersecfalse
        \if@noskipsec
            \global\@noskipsecfalse
            \clubpenalty\@M
            \hskip-\parindent
            \begingroup
                \@svsechd\unskip{\hspace{\@tempskipb}}%
            \endgroup
        \else
            \clubpenalty\@clubpenalty\everypar{}%
        \fi}}

\newcommand\subskip{%
  \ifaftersec
     \removelastskip%         EDIT 2
     \vspace{-\baselineskip}% EDIT 2 ??????????????
  \fi
  \global\aftersecfalse}

\titleformat{\section}[leftmargin]{\raggedright\scshape}{}{0pt}{}[\setsubskip]
\titlespacing*{\section}{2.5cm}{2.5ex}{0.5cm}

\titleformat{\subsection}{\subskip\bfseries}{}{0pt}{}[]
\titlespacing*{\subsection}{0pt}{2ex}{1ex}

\raggedbottom
\makeatother

在此处输入图片描述

相关内容