以下文档按预期进行编译,并且看起来与预期一致:
\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}