如何在自定义命令中减少环境下的垂直空间?

如何在自定义命令中减少环境下的垂直空间?

我想根据我定义的自定义命令来操作垂直空间。我该怎么做?

(这么多年我其实从未研究过这个问题……)

图片

在此处输入图片描述

平均能量损失

\documentclass{scrartcl}

\usepackage{
setspace,
lipsum
}

\newcommand{\something}[1]{\begin{flushleft}\large\sffamily{#1}\end{flushleft}}

\begin{document}
\onehalfspacing
\lipsum[1]
\something{Words}
\lipsum[2]
\end{document}

解决方案

\makeatletter
\newcommand{\something}[1]{%
    \par\addvspace{\topsep}%
    \noindent\begingroup\raggedright\sffamily#1\par\nobreak\addvspace{0.15\baselineskip}\endgroup
    \@afterheading\@afterindentfalse
}

答案1

您不想使用flushright,而只是\raggedright;而且您还缺少一个\nopagebreak

\documentclass{scrartcl}

\usepackage{lipsum}

\newcommand{\something}[1]{%
  \par\addvspace{\topsep}%
  \noindent\begingroup\raggedright\sffamily#1\par\endgroup
  \nopagebreak
  \noindent\ignorespaces
}

\begin{document}

\lipsum[1]

\something{Words}
\lipsum[2]

\end{document}

不要在\something{...}和后面的文本之间留下任何空行。

在此处输入图片描述

我删除了它,\onehalfspacing因为它违背了我的宗教信仰。;-)如果你真的要破坏你的文档,那就添加它。;-)

\something{...}一个可能更好的解决方案是,在使用节标题后使用的内部构件之后,还允许出现空行。

\documentclass{scrartcl}

\usepackage{lipsum}

\makeatletter
\newcommand{\something}[1]{%
  \par\addvspace{\topsep}%
  \noindent\begingroup\raggedright\sffamily#1\par\nobreak\endgroup
  \@afterheading\@afterindentfalse
}
\makeatother

\begin{document}

\lipsum[1]

\something{Words}

\lipsum[2]

\end{document}

答案2

flushleft定义为trivlist,因此它使用topsep\partopsep\parskip长度(添加!)作为到下一个文本内容的顶部和底部间距。为了减少下面的间距,最好将此弹性长度设置为0pt一对以内\begingroup...\endgroup,但\vspace{\topsep}在之前发出,以便与上面的文本保持一定的距离。

\documentclass{scrartcl}

\usepackage{setspace,
lipsum%
}


\newcommand{\something}[1]{\begingroup
  \vspace{\topsep}% Use the old top distance
  \setlength\partopsep{0pt}\setlength\topsep{0pt}\setlength\parskip{0pt}% Set the top seps to zero
  \begin{flushleft}\large\sffamily{#1}%
  \end{flushleft}\endgroup%
}%


\begin{document}
\onehalfspacing
\lipsum[1]
\something{Words}
\lipsum[2]
\something{Other Words}
\lipsum[3]
\end{document}

在此处输入图片描述

相关内容