Warum erfordert \tag Klammern, während \frac dies nicht tut?

Warum erfordert \tag Klammern, während \frac dies nicht tut?

Ich bin es gewohnt, \tagohne Klammern wie \tag3statt \tag{3}in Markdown+MathJax zu verwenden, wo es genauso gut funktioniert wie \frac12in normalem LaTeX. Aber als ich versuchte, dies in einer echten .texQuelle zu tun, die mit verarbeitet wurde pdflatex, traten einige Fehler auf.

Hier ist der Code:

\documentclass[]{article}
\usepackage{amsmath}
\begin{document}

\[f(x)=\frac32\tag1\]

\end{document}

Und das pdflatexsagt

This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode
(./test.tex
LaTeX2e <2017-04-15>
Babel <3.18> and hyphenation patterns for 3 language(s) loaded.
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo))
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty
For additional information on amsmath, use the `?' option.
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty))
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty)
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty))
No file test.aux.
Runaway argument?
1\] 
! Paragraph ended before \tag was complete.
<to be read again> 
                   \par 
l.6 

Wenn ich es mit Klammern umschließe 1, wird es einwandfrei kompiliert und ich erhalte die erwartete PDF-Ausgabe. Daher frage ich mich, warum \tagKlammern erforderlich sind, während \fracdies nicht der Fall ist. Gibt es einen Unterschied im „Typ“ des Objekts, z. B. dass \tages sich um eine vom Paket bereitgestellte Funktion handelt, während \fraces aus dem Sprachkern stammt ( \usepackagezumindest nicht erforderlich) oder so etwas in der Art?

Antwort1

Das Makro \fracist (robust) definiert als

\frac#1#2 -> \begingroup #1 \endgroup \@@over #2

wobei \@@over(eine Kopie) des TeX-Grundelements ist. In diesem Fall können Sie also tatsächlich schreiben \frac12und es wird dasselbe sein wie \frac{1}{2}. Viele Leute, mich eingeschlossen, werden Ihnen davon abraten. (Obwohl ich bei so kurzen Bruchteilen meinen eigenen Rat nicht immer befolge...)

Andererseits \tagsteht am Anfang von displaymath \letto \tag@in@display, dessen Definition lautet

\def\tag@in@display#1#{\relax\tag@in@display@a{#1}}

Der schwierige Teil ist der #vor der öffnenden Klammer des Ersetzungstextes. TeX sucht nach dem ersten Argument bis zu einer öffnenden Klammer (später wird geprüft, ob dieses erste Argument ein Stern ist *). Einzelheiten zur Funktionsweise dieses Mechanismus finden Sie in den FragenGreifen Sie auf #{ Makroargumente zu(insbesondereAntwort von Martin Scharrer) UndMakros mit # als letztem Parameter. Aber die kurze Antwort ist: TeX sucht nach einer öffnenden Klammer, um das Argument zu erfassen #1, und findet irgendwann die leere Zeile (die in einen neuen Absatz umgewandelt wird), was nicht zulässig ist, und daher der Paragraph endedFehler.

verwandte Informationen