¿Por qué \tag requiere llaves mientras que \frac no?

¿Por qué \tag requiere llaves mientras que \frac no?

Estoy acostumbrado a usarlo \tagsin llaves como \tag3en lugar de \tag{3}Markdown+MathJax, donde funciona tan bien como \frac12en LaTeX normal. Pero cuando intenté hacer esto en una .texfuente real procesada con pdflatex, obtuve algunos errores.

Aquí está el código:

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

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

\end{document}

Y esto es lo que pdflatexdice

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 

Cuando lo rodeo 1con llaves, se compila bien y obtengo el resultado PDF esperado. Entonces me pregunto, ¿por qué se \tagrequieren aparatos ortopédicos y \fracno? ¿Existe alguna diferencia en el "tipo" del objeto, como, por ejemplo, \tagser una instalación proporcionada por un paquete mientras que \fraces del núcleo del lenguaje (al menos no lo necesita \usepackage) o algo así?

Respuesta1

La macro \fracse define (robustamente) como

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

¿Dónde \@@overestá (una copia de) la primitiva TeX? Entonces, en este caso, puedes escribir \frac12y será lo mismo que \frac{1}{2}. Mucha gente, incluido yo mismo, le dirá que no haga esto. (Aunque para fracciones tan cortas no siempre sigo mis propios consejos...)

Por otro lado, al comienzo de displaymath \tagestá \letto \tag@in@display, cuya definición dice

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

La parte complicada es la que está #antes de la llave de apertura del texto de reemplazo. TeX busca el primer argumento hasta una llave de apertura (luego comprobará si este primer argumento es una estrella *). Para obtener detalles sobre cómo funciona este mecanismo, me refiero a las preguntas.Acceda a #{ macro argumentos(En particularLa respuesta de Martín Scharrer) yMacros con # como último parámetro. Pero la respuesta corta es: TeX está buscando una llave de apertura para recopilar el argumento #1y en algún momento encuentra la línea vacía (que se convierte en un nuevo párrafo), que no está permitida, y de ahí el Paragraph endederror.

información relacionada