- 462 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/02/13(木) 21:07:48.15 ]
- >>461
別に,\edef の仕様どおりの挙動. まず,「展開」と「実行」は違うことに注意. また,\edef\fuga{\hoge{HAGE}} の際には 「\hoge{HAGE} を完全に展開したもの」が必要になる. そして,最初の(エラーになったほうの)例では \hoge{HAGE} を展開すると \def\hage{#1} になる.(ここで「実行」ではなく「展開」だけしていることに注意しつつ) これをさらに展開すると,\def(これは展開できない primitive)はそのまま残り, (\def が実行されたわけではないので)その次の \hage を展開しようとする. しかし,\hage の前の \def は実行されてなどいないので \hage は未定義のままでエラーが生じる. なお,その次のエラーにならないほうの例では,\def\hage{} と \hage の定義を与えたことで \hoge{HAGE}→ \def\hage{HAGE} → \def{HAGE} と展開され,結局 \huga は \def\huga{ \def{HAGE} } と定義されたのと同じになる (ので,\huga を使ったときに妙なことになる).
|

|