Usando comando de argumento como argumento sem colchetes

Usando comando de argumento como argumento sem colchetes

Eu não ficaria surpreso se isso já tivesse sido perguntado antes, mas minhas pesquisas não produziram nenhum resultado. Também não me surpreenderia se isso não fosse possível sem fazer algum hacking realmente perigoso do kernel do TeX ou algo assim. Mas permita-me perguntar de qualquer maneira.

Eu uso o código a seguir como atalho para letras em negrito no modo matemático, conforme recomendadoaqui:

\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}

Isso é bom e útil na maioria dos contextos, mas às vezes fica entediante escrever \*vdentro do argumento de outros comandos. Por exemplo, posso querer escrever a derivada de \*vas \dot{\*v}. Eu me pergunto se existe uma maneira de evitar ter que escrever o {}s. Concretamente, o que eu quero é redefinir o comando \*para que

$\dot\*v$

ou mesmo

$\dot\*{longvector}$

pode ser analisado corretamente.

Responder1

Talvez isso seja suficiente para suas necessidades

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

Observe os colchetes extras ao redor do corpo da sua \*definição de macro: isso faz com que a expansão de \*pareça um único argumento para \olddot:

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

informação relacionada