Я не удивлюсь, если этот вопрос уже задавался, но мои поиски не дали никаких результатов. Я также не удивлюсь, если это невозможно без действительно опасного взлома ядра 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
as \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}}}