私は Markdown+MathJax での代わりに の\tag
ように中括弧なしで使用することに慣れています。これは通常の LaTeX と同じように機能します。しかし、で処理された実際のソースでこれを実行しようとすると、エラーが発生しました。\tag3
\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
require braces は必要なのに、 require braces\frac
は必要ないのか疑問に思います。オブジェクトの「タイプ」に、たとえば、\tag
パッケージ提供の機能であるのに対し、 は\frac
言語コアからのもの (\usepackage
少なくとも必要ありません) など、何か違いがあるのでしょうか。
答え1
マクロは\frac
(堅牢に)次のように定義される。
\frac#1#2 -> \begingroup #1 \endgroup \@@over #2
ここで、 は\@@over
TeX プリミティブ (のコピー) です。したがって、この場合、 と書くことができ\frac12
、 と同じになります\frac{1}{2}
。私を含め、多くの人が、これを行わないようにと言うでしょう。(ただし、このような短い分数の場合、私は自分のアドバイスに常に従えるわけではありません...)
一方、displaymathの冒頭にはがあり\tag
、その定義は次のようになる。\let
\tag@in@display
\def\tag@in@display#1#{\relax\tag@in@display@a{#1}}
難しいのは、#
置換テキストの開き括弧の前の部分です。TeXは開き括弧までの最初の引数を探します(後でこの最初の引数が星印かどうかをチェックします*
)。このメカニズムがどのように機能するかの詳細については、次の質問を参照してください。#{マクロ引数を取得する(特にマーティン・シャラーの回答) そして最後のパラメータとして # を使用するマクロしかし、簡単に答えると、TeX は引数を収集するために開き中括弧をスキャンしており#1
、ある時点で空行 (新しい段落に変換される) を見つけますが、これは許可されていないため、Paragraph ended
エラーが発生します。