如何减少 \begin{addmargin} 之前的垂直距离

如何减少 \begin{addmargin} 之前的垂直距离

我有以下文本。我的问题是,在我的文本和我的其它文本之间插入了大约等于整行的距离。我想避免这种情况,但不确定如何做到这一点,所以我的问题是如何减少这个垂直距离?

Mytext
\begin{addmargin}[0.3cm]{0cm}
    MyOtherText
\end{addmargin}

对于我正在使用的 documentclass,它是这个:

\documentclass[8pt,a4paper,BCOR10mm,DIV11,toc=listof,parskip=full, openany]{scrbook}

答案1

\documentclass[parskip=full,]{scrartcl}
\makeatletter
\let\@addmarginORIG\@addmargin
\renewcommand*\@addmargin{%
    \vspace{-\bigskipamount}
    \@addmarginORIG}
\makeatother
\begin{document}

Mytext
\begin{addmargin}[0.3cm]{0cm}
        MyOtherText
\end{addmargin}

\end{document}

答案2

您正在使用parskip=fullscrbook严格遵守:addmargin开始一个新段落,并且它与前一个段落之间以完整的 parskip 分隔。

如果您想在您的环境中删除 parskip addmargin,我建议您定义一个新的环境。

\documentclass[
  parskip=full
]{scrartcl}

\newenvironment{thomasaddmargin}
 {\setlength{\parskip}{0pt plus 1pt}\addmargin}
 {\endaddmargin}

\begin{document}

Mytext
\begin{thomasaddmargin}[0.3cm]{0cm}
MyOtherText
\end{thomasaddmargin}

Mytext

Mytext

\end{document}

如果要遵循“删除垂直空间方法”,则必须修补正确的命令,它不是\@addmargin,而是它调用的内部命令。使用 很容易xpatch;请注意,要删除的粘合是\parskip,而不是\bigskipamount

\documentclass[
  parskip=full
]{scrartcl}

\usepackage{xpatch}

\makeatletter
\pretocmd{\@addmargin}{\vspace{-\parskip}}{}{}
\makeatother

\begin{document}

Mytext
\begin{addmargin}[0.3cm]{0cm}
MyOtherText
\end{addmargin}

Mytext

Mytext

\end{document}

输出是相同的,因为环境中只有一个段落addmargin

两种解决方案的区别在于,前者内部段落之间不使用 parskip addmargin,而后者将使用正常的 parskip。请自行选择。

最后的劝告:使用parskip=full

相关内容