Benachrichtigen, wenn die Gleichungsnummer in die nächste Zeile verschoben wird

Benachrichtigen, wenn die Gleichungsnummer in die nächste Zeile verschoben wird

Ist es möglich, amsmathmich warnen zu lassen, wenn die Gleichung zu lang ist und die Zahl in die nächste Zeile verschiebt?

Ich gehe davon aus, dass es entweder Equation (1) too longauf der Konsole gedruckt wird oder dass der (1)Teil rot wird.

\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}

Antwort1

Ich möchte nicht sagen, dass es unmöglich ist, aber es ist auf jeden Fall ein schwieriges Problem, weil amsmathes darauf angewiesen ist, \eqnodass das Primitiv diese Arbeit für die equationUmgebung erledigt.

\hsize=8cm
$$A+B+C+D+R+F+G+H+I+J+L+M+N+O+P\eqno(1)$$
\bye

Bildbeschreibung hier eingeben

Die einzige Möglichkeit, die ich sehe, besteht darin, das Grundelement zu überschreiben \eqnound die Strafen zu messen, um zu sehen, ob die Zahl in die nächste Zeile übernommen wird.


Für die alignFamilie der Umgebungen ist es etwas einfacher, da die Tag-Verschiebung durch Makros erfolgt, in die Sie einfach Ihren benutzerdefinierten Fehler oder Ihre Warnung einbinden.

\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}

Eine andere Möglichkeit wäre, die Gleichung zweimal zu setzen, aber einmal mit der Breite Null (mit \vphantom), so dass die Zahl nicht in die zweite Zeile passt. Vergleichen Sie dann die Höhe der regulär gesetzten Gleichung mit der mit der Breite Null. Wenn die Höhe der regulär gesetzten Gleichung größer ist als die der anderen, gab es einen Zeilenumbruch.

\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}

verwandte Informationen