括弧なしの引数として引数コマンドを使用する

括弧なしの引数として引数コマンドを使用する

以前にこの質問があったとしても驚きませんが、私の検索では結果は得られませんでした。また、TeX カーネルの非常に危険なハッキングなどを行わない限りこれが不可能であっても驚きません。しかし、とにかく質問させてください。

推奨されているように、数式モードで太字のショートカットとして次のコードを使用します。ここ:

\documentclass{memoir}
\usepackage{amsmath,bm,amsfonts}

\def\*#1{\bm{\mathrm{#1}}}

\begin{document}
Let $\*v$ be a vector in $\mathbb R^n$ with $A\*v = \*v$.
\end{document}

これはほとんどの状況で便利で良いのですが、\*v他のコマンドの引数の中に書くのは面倒な場合があります。例えば、 の導関数を と書きたいとします\*v\dot{\*v}を書かなくても済む方法はないでしょうか{}。具体的には、コマンドを再定義して\*

$\dot\*v$

あるいは

$\dot\*{longvector}$

正しく解析できます。

答え1

おそらくこれで十分でしょう

\def\*#1{{\bm{\mathrm{#1}}}}
\let\olddot\dot
\def\dot{\expandafter\olddot}

マクロ定義の本体を囲む余分な括弧に注意してください\*。これは、 の展開が\*への単一の引数のように見えるようにするためです\olddot

\dot\*v -> \expandafter\olddot\*v -> \olddot{\bm{\mathrm{v}}}

関連情報