为什么 \tag 需要括号而 \frac 不需要?

为什么 \tag 需要括号而 \frac 不需要?

我习惯在 Markdown+MathJax 中使用\tag不带括号的 like\tag3代替\tag{3},它的效果与普通 LaTeX 一样好\frac12。但是当我尝试在.tex用 处理的真实源中执行此操作时pdflatex,出现了一些错误。

代码如下:

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

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

\end{document}

pdflatex就是说

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 

当我用1括号括起来时,它可以正常编译,并且我得到了预期的 PDF 输出。所以我想知道,为什么\tag需要括号而不\frac需要?对象的“类型”是否有一些差异,例如,\tag它是包提供的工具,而\frac它来自语言核心(至少不需要\usepackage)或类似的东西?

答案1

该宏被\frac(稳健地)定义为

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

其中\@@over是 TeX 原语的副本。因此,在这种情况下,您确实可以这样写\frac12,它与 相同\frac{1}{2}。很多人(包括我自己)会告诉您不要这样做。(虽然对于如此短的分数,我并不总是遵循自己的建议……)

另一方面,displaymath的开头\tag\letto \tag@in@display,其定义如下

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

棘手的部分是#替换文本的左括号之前。TeX 会查找第一个参数直到左括号(稍后它会检查这个第一个参数是否是星号*)。有关此机制如何工作的详细信息,请参阅问题抓取 #{ 宏参数(尤其Martin Scharrer 的回答) 和以 # 作为最后一个参数的宏。但简短的回答是:TeX 正在扫描左括号来收集参数#1,并在某个时候发现空行(转换为新段落),这是不允许的,因此出现错误Paragraph ended

相关内容