答案1
我不想說這是不可能的,但這絕對是一個難題,因為amsmath
依賴\eqno
原語來為環境完成這項工作equation
。
\hsize=8cm
$$A+B+C+D+R+F+G+H+I+J+L+M+N+O+P\eqno(1)$$
\bye
因此,我看到的唯一方法是覆蓋\eqno
原語並測量懲罰,以查看數字是否會刷新到下一行。
對於align
環境系列來說,這要容易一些,因為標籤移動是由巨集處理的,您只需將自訂錯誤或警告掛入其中即可
\documentclass[twocolumn]{article}
\usepackage{amsmath}
\makeatletter
\def\place@tag{%
\iftagsleft@
\kern-\tagshift@
\if1\shift@tag\row@\relax
\errmessage{Equation too wide}%
\rlap{\vbox{%
\normalbaselines
\boxz@
\vbox to\lineht@{}%
\raise@tag
}}%
\else
\rlap{\boxz@}%
\fi
\kern\displaywidth@
\else
\kern-\tagshift@
\if1\shift@tag\row@\relax
\errmessage{Equation too wide}%
\llap{\vtop{%
\raise@tag
\normalbaselines
\setbox\@ne\null
\dp\@ne\lineht@
\box\@ne
\boxz@
}}%
\else
\llap{\boxz@}%
\fi
\fi
}
\makeatother
\begin{document}
\begin{align}
A+B+C+D+R+F+G+H+I+J+L+M+N+O+P
\end{align}
\end{document}
另一種可能性是將方程式排版兩次,但一次寬度為零(使用\vphantom
),這樣數字就不能出現在第二行。然後將常規排版方程式的高度與零寬度方程式的高度進行比較。如果常規高度大於另一高度,則出現換行。
\documentclass[twocolumn]{article}
\usepackage{amsmath}
\usepackage{environ}
\NewEnviron{warnequation}{
\setbox0=\vbox{\begin{equation}\BODY\end{equation}}%
\setbox1=\vbox{\begin{equation}\vphantom{\BODY}\end{equation}}%
\ifdim\ht0>\ht1
\errmessage{Equation too wide}%
\fi
\box0
}
\begin{document}
\begin{warnequation}
A+B+C+D+R+F+G+H+I+J+L+M+N+O+P
\end{warnequation}
\end{document}