addmargin、enumerate 和 align* 错过溢出的水平盒子

addmargin、enumerate 和 align* 错过溢出的水平盒子

以下文档按预期进行编译,并且看起来与预期一致:

\documentclass{article}

\usepackage{scrextend}
\usepackage{amsmath}
\usepackage{lipsum}

\begin{document}
    \lipsum[1]

    \begin{addmargin}[1cm]{0mm}
        \lipsum[2]

        \begin{enumerate}
        \item
            \lipsum[3]

        \item
            \begin{align*}
                abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmn
            \end{align*}
        \end{enumerate}
    \end{addmargin}
\end{document}

环境内容align*溢出了正常文本区域。但是,没有“水平盒子过满”警告。如果将文本拉得更长,最终会产生警告,但为时已晚 - 根据嵌套,只有当文本移出页面很远时才会出现警告。

在这种情况下我怎样才能确保得到警告?

答案1

更新

该问题已在 2017 年 8 月发布的 2.17a 版中修复(使用以下代码)amsmath


amsmath明确测试这种情况并添加代码以发出警告

\begin{macro}{\black@}

\overfullrule如果对齐的总宽度大于 的值\displaywidth,则此宏用于生成一个溢出框消息,并且可能(取决于 的值 )在边距中生成一条规则。

不幸的是,它插入的代码只会产生一个警告fleqn(左对齐方程,这是 AMS 类的默认设置),而不会产生标准默认值的中心方程。

以下内容修复了这个问题,在没有超宽方程的文档中它应该不会发生任何变化。对于具有超宽方程的文档,内部框结构略有不同,但文档应该没有明显的变化,除非在draft模式下,如上文所述,您会在边距处得到一个超满的框规则。

这可能会出现在下一版本中,amsmath等待进一步测试。

如下修改的测试文件产生控制台输出

Overfull \hbox (49.62772pt too wide) detected at line 38

测试文件:

\documentclass{article}

\usepackage{scrextend}
\usepackage{amsmath}


\makeatletter
\def\black@#1{%
    \noalign{%
        \ifdim#1>\displaywidth
            \dimen@\prevdepth
            \nointerlineskip
            \vskip-\ht\strutbox@
            \vskip-\dp\strutbox@
            \vbox{\noindent\hbox to \displaywidth{\hbox to#1{\strut@\hfill}}}%
%       added this         ^^^^^^^^^^^^^^^^^^^^^^^                         ^
            \prevdepth\dimen@
        \fi
    }%
}
\makeatother

\usepackage{lipsum}

\begin{document}
    \lipsum[1]

    \begin{addmargin}[1cm]{0mm}
        \lipsum[2]

        \begin{enumerate}
        \item
            \lipsum[3]

        \item
            \begin{align*}
                abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmn
            \end{align*}
        \end{enumerate}
    \end{addmargin}
\end{document}

相关内容