问题
在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}
可能相关的问题
-
这不是该问题的重复,因为该问题源于长
align*
环境在分页符处被破坏,这与此处无关。请注意,该问题的可接受答案解决了那问题是
\allowdisplaybreaks
,align*
当环境单独放置在环境中时,环境仍然会在自身上方产生一块不雅的垂直空间mdframed
: -
也不是重复的,因为该问题也是由分页符引起的,但与此无关。
-
不是重复;问题出
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}