>>543
> \expandafter{\@tmpa} の部分が気になるんだけど, こいつは何のため?
> \@tmpa に変えても動くし.
確かに,引数が必ず1文字だという前提があるならばそれでもいいですね.
無意識に2文字以上の場合を想定していました.

> 更に進めて \fooA \barB とかを量産できるようなマクロを作ろうとしたけど上手くいかない...
まず \@for の前の \expandafter がいらないのと,
#3 を展開しないと,\hogeA とかの定義に \@tmpa が残っちゃいますね
(\show\hogeA とかやるとすぐわかります).
あと,\let の位置に気をつけないと2回 \generateabbrevdef を使ったときに \@defabbr が
上書きされちゃいます.

直してみたけれども汚い…….改行多すぎると言われたので分けます.