為什麼 \tag 需要大括號而 \frac 不需要?

為什麼 \tag 需要大括號而 \frac 不需要?

我習慣使用\tag不帶大括號的方式,就像\tag3在 Markdown+MathJax 中那樣,它的工作方式與普通 LaTeX 中\tag{3}一樣好。\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 尋找第一個參數直到左大括號(稍後它將檢查第一個參數是否為星號*)。有關此機制如何工作的詳細信息,我參考問題抓取#{巨集參數(尤其馬丁·沙勒的回答) 和最後一個參數為 # 的宏。但簡短的答案是:TeX 正在掃描左大括號來收集參數#1,並在某個時刻發現空白行(它被轉換為新段落),這是不允許的,因此會出現錯誤Paragraph ended

相關內容