\noexpand何もわからん
マクロ設定
\def\A#1#2{#1 is #2} \def\B{\BB\BB} \def\BB{foo} \def\C{bar}
noexpandの挙動実験
\edef\hoge{\noexpand\B\C} % -> \def\hoge{\Bbar} \expandafter\A\hoge % -> \A\Bbar -> \B is bar -> \BB\BB is bar -> foofoo is bar
出力:foofoo is bar
\edef\hoge{\noexpand\B\noexpand\B\C} % -> \def\hoge{\B\B bar} \expandafter\A\hoge % -> \A\B\Bbar -> \B is \B bar -> \BB\BB is \BB\BB bar -> foofoo is foofoobar
出力:foofoo is foofoobar
\edef\hoge{\noexpand{\B\B}\C} % -> \def\hoge{\B\B bar}のつもりで書いたが…… \expandafter\A\hoge
出力:foofoofoofoo is bar
これが上の例と違うのヤバくないですか?
\edef\hoge{\noexpand{\B\B}\C} の展開結果が\B\B barではなく{\B\B}bar になることなんて許されるのか????
ググっても\noexpandの直後の1制御綴に対して適用するものばかりですし。
\noexpandは一つの引数を取る通常のマクロではなく、\noexpandの直後のトークンの展開を制御する制御綴で、上は{の展開を制御した結果として中の\B\Bが展開されずに済んだ、というそういうことなんですかね
これから仮説の検証に入ります……
ぺりをだねぇ