ステファンのTUGboat記事における\expandafterに関する質問

ステファンのTUGboat記事における\expandafterに関する質問

ステファン・ベクトルシャインのタグボートの記事について\expandafter、彼は の実行の規則について説明しました\expandafter

開始中括弧はトークン1ではなくトークンeであるべきなので、ケース iii はここにリストされるべきではないと思います。つまり、著者は iii を最も外側のステップ 1 に置くべきでした。私の考えは正しいでしょうか? ここに画像の説明を入力してください

答え1

残念ながら、チュートリアルはあまり正確ではありません。実際、ポイント 2.iii は完全に間違っています。⟨token 1 ⟩ が の場合{、文字トークンは展開できないため、単純に展開されません。

しかし、項目2は多くの点で一般的に間違っています。、だけでなく\expandafter、他のプリミティブも拡張可能です。たとえば、\csname\the条件文\else、、\fiなどを含む拡張\or可能な機能です。この機能により、

⟨primitive if⟩⟨condition⟩
  \expandafter\@firstoftwo
\else
  \expandafter\@secondoftwo
\fi
{⟨first⟩}{⟨second⟩}%

これは非常に便利なコードですが、Bechtolsheim は無視しているようです (私の記憶では、彼の TeX に関する 4 巻の本にも記載されていません)。また、\number別のプリミティブとして、拡張可能です。

それはもっと簡単です。TeXがトークンを展開しているとき(つまり、マクロ定義で置換テキストを で読み取るときなど、展開が抑制されていない限り常に\def)、 を見つけて\expandafter、次のトークンを飛び越えます。これを ⟨token と呼びます。e⟩ の次のトークンを展開しようとする。トークンが展開可能な場合は、その展開によって置き換えられる(引数の参照が行われる場合もある)。の展開は\expandafter無効であり、プロセスは ⟨token から再開される。e⟩ は展開されるか(展開可能な場合)、実行されます。

⟨トークンの場合、全く違いはありませんe⟩ は{他のすべてのトークンに関してです。

また、例8は少し誤解を招くかもしれません。なぜなら、トークンレジスタへの代入において、(オプション)の後に⟨filler⟩を続けることができるという基本的な特徴を無視しているからです。つまり、TeXは、 が見つかるまで=スペースとトークンを無視してトークンを展開します。これにより、\relax{

\tb=\expandafter{\the\ta}

おそらく細部私の意見としては、上記のルールが言及されているか、またはケースは例としてではなく、それ自体の機能として扱われるべきであるということです。

関連情報