删除末尾的多余空间

删除末尾的多余空间

我意识到不应该有两个连续的显示数学方程式,如垂直间距不均匀 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}

相关内容