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