當方程式編號被推到下一行時警告我

當方程式編號被推到下一行時警告我

amsmath當等式太長並將數字推到下一行時,是否可以警告我?

我希望它要么打印 Equation (1) too long到控制台,要么使該(1)部分變成紅色。

\documentclass[twocolumn]{article}

\usepackage{amsmath}

\begin{document}

    \begin{equation}
        A+B+C+D+R+F+G+H+I+J+L+M+N+O+P
    \end{equation}

\end{document}

答案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}

相關內容