Использование аргумента command в качестве аргумента без скобок

Использование аргумента command в качестве аргумента без скобок

Я не удивлюсь, если этот вопрос уже задавался, но мои поиски не дали никаких результатов. Я также не удивлюсь, если это невозможно без действительно опасного взлома ядра 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внутри аргумента других команд. Например, я могу захотеть написать производную от \*vas \dot{\*v}. Интересно, есть ли способ избежать необходимости писать s {}. Конкретно, я хочу переопределить команду \*так, чтобы

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

Связанный контент