titlesec 标题后 \addvspace

titlesec 标题后 \addvspace

因此,我试图创建一个环境,该环境的上方和下方始终填充一定的垂直空间,不多也不少(除非前一个或后面的元素需要更多空间)。我的尝试是

\newenvironment{hello}{\addvspace{\baselineskip}}{\addvspace{\baselineskip}}

如果我有两个hello环境,那么第二个环境\addvspace会按照预期不执行任何操作。同样,在章节标题之后,我得到了所需的行为。

\documentclass{article}

\usepackage{lipsum}
%\usepackage{titlesec}
\newenvironment{hello}{\addvspace{\baselineskip}}{\addvspace{\baselineskip}}

\begin{document}

\section{Hellos}
\begin{hello}
    \lipsum[2]
\end{hello}
\begin{hello}
    \lipsum[3]
\end{hello}

\end{document}

但是使用 时titlesec,部分标题和第一个环境之间的空间太大hello。看起来标题旁边有一个明确的空间,但\addvspace后面的第一个环境看不到,因此\addvspace增加了更多空间。

关于如何修复此问题,您有什么想法吗?(也欢迎指出我的整个方法糟糕的原因。)

答案1

由于间距的原因,titlesec 包使用的\vspace不能很好地与 配合使用\addvspace。您可以使用电子工具箱包来修补内部\ttl@straight@ii命令以便用\vspace替换\vskip

代码结果

\documentclass{article}

\usepackage{lipsum}
\usepackage{etextools}

\usepackage{titlesec}
\makeatletter
\patchcmd{\ttl@straight@ii}{\vspace{\@tempskipb}}{\vskip \@tempskipb}{}{}
\makeatother

\newenvironment{hello}{\addvspace{\baselineskip}}{\addvspace{\baselineskip}}

\begin{document}

\section{Hellos}
\begin{hello}
    \lipsum[2]
\end{hello}
\begin{hello}
    \lipsum[3]
\end{hello}

\end{document}

相关内容