\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が展開されずに済んだ、というそういうことなんですかね

これから仮説の検証に入ります……



ぺりをだねぇ