Estou acostumado a usar \tag
sem colchetes, como \tag3
em \tag{3}
Markdown + MathJax, onde funciona tão bem quanto \frac12
no LaTeX normal. Mas quando tentei fazer isso em uma .tex
fonte real processada com pdflatex
, recebi alguns erros.
Aqui está o código:
\documentclass[]{article}
\usepackage{amsmath}
\begin{document}
\[f(x)=\frac32\tag1\]
\end{document}
E é isso que pdflatex
diz
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
Quando coloco 1
colchetes, ele compila perfeitamente e obtenho a saída PDF esperada. Então eu me pergunto: por que \tag
exige aparelho e \frac
não? Existe alguma diferença no "tipo" do objeto, como, por exemplo, \tag
ser um recurso fornecido por pacote enquanto \frac
pertence ao núcleo da linguagem (não precisa \usepackage
de pelo menos) ou algo parecido?
Responder1
A macro \frac
é definida (robustamente) como
\frac#1#2 -> \begingroup #1 \endgroup \@@over #2
onde \@@over
está (uma cópia) da primitiva TeX. Então, neste caso, você pode realmente escrever \frac12
e será igual a \frac{1}{2}
. Muitas pessoas, inclusive eu, dirão para você não fazer isso. (Embora para frações tão curtas eu nem sempre siga meu próprio conselho...)
Por outro lado, no início do displaymath \tag
está \let
to \tag@in@display
, cuja definição é
\def\tag@in@display#1#{\relax\tag@in@display@a{#1}}
A parte complicada é #
antes da chave de abertura do texto de substituição. O TeX procura o primeiro argumento até uma chave de abertura (mais tarde ele irá verificar se este primeiro argumento é uma estrela *
). Para obter detalhes sobre como esse mecanismo funciona, refiro-me às perguntasPegue #{argumentos de macro(em particularA resposta de Martin Scharrer) eMacros com # como último parâmetro. Mas a resposta curta é: o TeX está procurando uma chave de abertura para coletar o argumento #1
e em algum momento encontra a linha vazia (que é convertida em um novo parágrafo), o que não é permitido e, portanto, o Paragraph ended
erro.