我意识到不应该有两个连续的显示数学方程式,如垂直间距不均匀 displaymath。但是,就我而言,我有一个宏,它以特定方式排版两个给定的宏,并且每个宏可能包含显示数学。这有时会导致空间过剩。
如果我理解正确的话,这个答案是关于 mdframed 中多余的垂直空间,以显示数学环境结尾大卫·卡莱尔提到“你可以检测零高度的盒子并移除东西”这让我想到应该可以编写一个宏,删除传递给它的文本末尾的任何多余空格。不幸的是,我不懂该代码,所以无法轻松适应它。
我尝试在下面编写这样的宏,直观上似乎是错误的,但是有点有效。但是,在下面的 #3 和 #4 的情况下,间距不正确。我想要的是\RemoveSpaceAtEnd
删除末尾的任何空格。因此,如果传递给它的参数以显示数学环境结尾,则仅\belowdispalyskip
适用0pt
于最后显示数学,不是该宏中的每个显示数学
\documentclass{article}
\usepackage{amsmath}
\newcommand{\RemoveSpaceAtEnd}[1]{% Need to figure out code here. Hack here almost works
\setlength{\abovedisplayskip}{0pt}%
\setlength{\belowdisplayskip}{0pt}%
#1%
}
\newcommand*{\MacroA}{%
Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.
}
\newcommand{\MacroB}{%
\begin{align*}
e &= m c^2
\end{align*}
}
\newcommand{\MacroC}{%
\begin{align*}
F &= ma
\end{align*}
}
\newcommand{\Print}[2]{%
\noindent\RemoveSpaceAtEnd{#1}%
\par\addvspace{\medskipamount}%
\noindent\RemoveSpaceAtEnd{#2}%
\hrule%
}
\begin{document}
\Print{\MacroA}{\MacroA}
\Print{\MacroA}{\MacroB}
\Print{\MacroB}{\MacroC}
\Print{\MacroB}{\MacroA}
\end{document}
答案1
这是评论中概述的算法的一个工作示例,希望它能够实现您的意思:-)
\documentclass{article}
\usepackage{amsmath}
\newcommand{\RemoveSpaceAtEnd}[1]{%
\begingroup
\advance\belowdisplayskip1sp
\advance\belowdisplayshortskip1sp
\par#1\par
\ifdim\lastskip=\belowdisplayshortskip
\typeout{display here (short)}%
\nobreak
\vskip-\belowdisplayshortskip
\else
\ifdim\lastskip=\belowdisplayskip
\typeout{display here \noexpand#1}%
\nobreak
\vskip-\belowdisplayskip
\fi
\fi
\endgroup
}
\newcommand*{\MacroA}{%
Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.
}
\newcommand{\MacroB}{%
\begin{align*}
e &= m c^2
\end{align*}
}
\newcommand{\MacroC}{%
\begin{align*}
F &= ma
\end{align*}
}
\newcommand{\Print}[2]{%
\noindent\RemoveSpaceAtEnd{#1}%
\par\addvspace{\medskipamount}%
\noindent\RemoveSpaceAtEnd{#2}%
\par\hrule
}
\begin{document}
\Print{\MacroA}{\MacroA}
\Print{\MacroA}{\MacroB}
\Print{\MacroB}{\MacroC}
\Print{\MacroB}{\MacroA}
\end{document}