LaTeX 在我的自定义环境结束后添加了一个额外的空白段落

LaTeX 在我的自定义环境结束后添加了一个额外的空白段落

一位朋友是 LaTeX 用户,但对自定义 LaTeX 不太有信心,他告诉我,他希望能够将带框的段落和带框的方程式放入他的文档中。因此,我自行创建了“charlesbox”和“charlesboxmaths”环境,以便于实现这一点。但是,我遇到了一个奇怪的问题,特别是在 maths 环境后的间距问题。在这个测试示例中,似乎 LaTeX 在该\end{charlesboxmaths}行后面插入了一行额外的、完全空白的文本。

我发现可以通过删除以下段落前的空白行、%在行尾添加 a\end{charlesboxmaths}或仅用开始和结束环境代码本身替换\begin\end命令来抑制此行为。但我的环境代码该如何处理这个问题呢?

\documentclass[a4paper]{article}

\newsavebox{\mysavebox}

\newlength{\charlesboxdefaultwidth}
\newenvironment{charlesbox}[1][\charlesboxdefaultwidth]%
{\begin{lrbox}{\mysavebox}\begin{minipage}{#1}}%
{\end{minipage}\end{lrbox}\begin{center}\fbox{\usebox{\mysavebox}}\end{center}}

\newenvironment{charlesboxmaths}%
{\begin{lrbox}{\mysavebox}\begin{math}}%
{\end{math}\end{lrbox}\[\fbox{\usebox{\mysavebox}}\]}

\setlength{\charlesboxdefaultwidth}{110mm}

\begin{document}

Lorem ipsum dolor sit amet, pede nunc aliquam. Dapibus urna turpis arcu, venenatis in nam nullam. Erat porttitor laoreet, nulla elit eu, pharetra duis litora ante condimentum aliquet lacus, bibendum lacus et ac eu. Massa mi vel. Metus mauris eu in aenean erat tincidunt, convallis odio, erat dui fermentum suspendisse in, nunc ante morbi vestibulum ullamcorper vel. Torquent vel augue habitasse ipsum egestas, non pede nam.

\begin{charlesbox}
    Possimus pede inceptos vitae amet eu egestas, mi phasellus amet suscipit. Semper vehicula, hymenaeos a dignissim dis, nulla erat. Sed sem cras malesuada. At nonummy, velit nullam, vel ridiculus iaculis perferendis pretium erat a. Sapien sed blandit. Neque risus viverra, sit vitae gravida dignissim sed, ornare vehicula libero, erat accumsan.
\end{charlesbox}

Neque dolor, in odio natoque dolor eget ridiculus, eget quisque quis integer dolor, amet enim, tempus mollis. Dui per, amet quo nulla nisl ligula fusce. Feugiat dui eget nulla ultricies, sem in tincidunt quam, non ac erat. Lacinia cum cursus, eget elit et litora nibh quis sed, diam eros ad sit cras nisl, et pellentesque tincidunt lorem vivamus. Ac tellus phasellus libero, tempor eu, pretium consectetuer quis, dolorum et proin et elit aenean vel.

\begin{charlesboxmaths}
    (x^2 + y^2)^3 = \sin(x)\sin(y) + e^{2xy}
\end{charlesboxmaths}

Vel curae congue a risus sit neque, velit quisque ante in aliquam pulvinar, aliquam interdum id amet dapibus ligula ut, neque eget, nullam risus sapien. Sed sed urna posuere vestibulum. Class felis est sit. Augue turpis dolor molestie, viverra in imperdiet viverra tincidunt faucibus, convallis magna sit, vitae augue tempus in aliquet aliquam. Vel commodo libero quis quam odio. Quia semper vitae velit placerat, lectus amet diam, porta ante taciti per nec, eu hac platea, amet ac venenatis pede.

\end{document}

答案1

放在\ignorespacesafterend环境定义的末尾;因此

\newenvironment{charlesboxmaths}%
{\begin{lrbox}{\mysavebox}\begin{math}}%
{\end{math}\end{lrbox}\[\fbox{\usebox{\mysavebox}}\]\ignorespacesafterend}

答案2

在此处输入图片描述

主要区别在于 LaTeX 显示环境就像center内部使用的\par那样,因此它们在环境之后处于垂直模式,因此即使没有明确删除空格标记,空格也会被忽略。然而,显示数学被设计为使用段落,因此它会立即返回到水平模式,如果您没有明确忽略空格,它们将产生字间空格。

该图显示了将显示数学放在内部组中的效果,这样可以阻止后面的空格被\ignorespaces. 看到ccc 4,而 . 被空格覆盖。如果您在组后重新插入忽略空格,则一切恢复正常,这就是效果\ignorespacesafterend(经过一定的手法以适应 LaTeX 在环境的最终代码中进行的其他处理)。

\documentclass{article}

\begin{document}

\fbox{\parbox{4cm}{%

aaa\begin{center}bbb\end{center}ccc 1

aaa{\begin{center}bbb\end{center}} ccc 2

aaa\[bbb\] ccc 3

aaa{\[bbb\]} ccc 4

aaa{\[bbb\]\aftergroup\ignorespaces} ccc 5

}}

\end{document}

相关内容