[LaTeX] LaTeX で command を incremental に再定義
LaTeX を使ってると、「この command に渡す引数には自動的にこういう prefix やらをつけたい」というときがちょくちょくある。例えば今頭を悩ませているのが Beamer の frametitle の先頭に \insertframenumber を挿入したい、ということ。標準的には footer に \setbeamertemplate{footline}[frame number] とかするんだけど、これだと下端にちんまり表示されるだけで、イマイチ意味が無い (この番号がある程度目立って欲しいのだ)。そこで \frametitle{} command を直接再定義して \frametitle{foo} が \frametitle{\insertframenumber foo} と展開させるのが一番自然な気がする。
しかし単に
\renewcommand{\frametitle}[1]{\frametitle{\insertframenumber #1}}
とかすると無限再帰してしまう。(以降、面倒なので \frametitle を \foo に変更)そこで
\newcommand{\baz}{\foo} \renewcommand{\foo}{\baz modified}
としても再帰が消えない。最終的に
\let\baz\foo \renewcommand{\foo}(ry
とすると再帰が回避できることがわかったが、\baz の名前がいつまでも有効なので毎回新しい名前をつけなくちゃならないから嫌。かと言って
\let\baz\foo{ \renewcommand{\foo}{} }
とかすると外から新しい \foo が見えんし。\renewcommand の中に \let 引きずり込むと \foo の古い定義が新定義の中から見えなくて \let の意味なくなるし。
どうしたらええのこれ?