align* 在 mdframed 中有额外的前导垂直空间

align* 在 mdframed 中有额外的前导垂直空间

问题

mdframed环境中,放置align*开始环境的上方会产生额外的垂直空间,而使用\[\]则不会产生那么多的垂直空间。这个额外的垂直空间不是align*vs.\[\]放在普通纯文本之后时会出现,因此该问题特定于align*+mdframed组合。

平均能量损失

\documentclass{article}

\usepackage{mdframed}
\usepackage{framed}
\usepackage{amsmath}

\begin{document}

Outside \texttt{mdframed}, using \verb|\[\]|: \hrulefill
\begin{align*}
  x
\end{align*}

Outside \texttt{mdframed}, using \texttt{align*}: \hrulefill
\[
  x
\]

Inside \texttt{mdframed}, using \verb|\[\]|:
\begin{mdframed}
\[
  x
\]
\end{mdframed}

Inside \texttt{mdframed}, using \texttt{align*}:
\begin{mdframed}
  \begin{align*}
    x
  \end{align*}
\end{mdframed}

\vspace*{3em}

After setting skip lengths to 0:
\setlength{\abovedisplayskip}{0pt}
\setlength{\abovedisplayshortskip}{0pt}

Outside \texttt{mdframed}, using \verb|\[\]|: \hrulefill
\begin{align*}
  x
\end{align*}

Outside \texttt{mdframed}, using \texttt{align*}: \hrulefill
\[
  x
\]

Inside \texttt{mdframed}, using \verb|\[\]|:
\begin{mdframed}
\[
  x
\]
\end{mdframed}

Inside \texttt{mdframed}, using \texttt{align*}:
\begin{mdframed}
  \begin{align*}
    x
  \end{align*}
\end{mdframed}
\end{document}

姆韦

可能相关的问题

  • mdframed 包 + align 提供额外的垂直空间

    这不是该问题的重复,因为该问题源于长align*环境在分页符处被破坏,这与此处无关。

    请注意,该问题的可接受答案解决了问题是\allowdisplaybreaksalign*当环境单独放置在环境中时,环境仍然会在自身上方产生一块不雅的垂直空间mdframed上方不雅的帅哥 <code>align*</code>

  • 对齐环境可创建额外的垂直空间

    也不是重复的,因为该问题也是由分页符引起的,但与此无关。

  • 删除 amsmath 对齐环境中的额外垂直空间

    不是重复;问题出align*在一大段文字之后放置了一个新段落。

  • 删除对齐周围的垂直空间

    这并没有解决这个问题。我不想盲目地删除align*环境之前(和之后)的所有垂直空间,我只想将其与\[\]环境一起标准化。尽管如此,我还是尝试了该问题的可接受解决方案(即,,,\setlength{\abovedisplayskip}{0pt});这似乎可以缓解这个问题,但是\setlength{\abovedisplayshortskip}{0pt}\setlength{\belowdisplayskip}{0pt}\setlength{\belowdisplayshortskip}{0pt}不是以理想的方式,因为我不想删除显示数学环境周围的所有垂直间距。

答案1

这是一种可能性:\setlength{}{}使用密钥在 mdframed 环境的开始处添加代码startcode=<code>,以便仅在这些环境中修改空格。

\documentclass{article}

\usepackage{mdframed}
\usepackage{amsmath}

% 
\mdfdefinestyle{removespace}{%
    startcode = {%
                 \setlength{\abovedisplayskip}{0pt}%
                 \setlength{\abovedisplayshortskip}{0pt}%
                }%
}

\begin{document}

Outside \texttt{mdframed}, using \verb|\[\]|: \hrulefill
\begin{align*}
  x
\end{align*}

Outside \texttt{mdframed}, using \texttt{align*}: \hrulefill
\[
  x
\]

Inside \texttt{mdframed}, using \verb|\[\]|:
\begin{mdframed}
\[
  x
\]
\end{mdframed}

Inside \texttt{mdframed}, using \texttt{align*}:
\begin{mdframed}[style=removespace]
  \begin{align*}
    x
  \end{align*}
\end{mdframed}

\vspace*{3em}

After setting skip lengths to 0:
\setlength{\abovedisplayskip}{0pt}
\setlength{\abovedisplayshortskip}{0pt}

Outside \texttt{mdframed}, using \verb|\[\]|: \hrulefill
\begin{align*}
  x
\end{align*}

Outside \texttt{mdframed}, using \texttt{align*}: \hrulefill
\[
  x
\]

Inside \texttt{mdframed}, using \verb|\[\]|:
\begin{mdframed}
\[
  x
\]
\end{mdframed}

Inside \texttt{mdframed}, using \texttt{align*}:
\begin{mdframed}
  \begin{align*}
    x
  \end{align*}
\end{mdframed}
\end{document}

相关内容