使用参数命令作为参数(不带括号)

使用参数命令作为参数(不带括号)

如果这个问题之前有人问过,我不会感到惊讶,但我的搜索没有得到任何结果。如果不对 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}。我想知道是否有办法避免必须写 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}}}

相关内容