我定义了几个简单的宏来让我的生活更轻松一些:
\newcommand{\curl}[1]{\ensuremath{\nabla\times #1}}
\renewcommand{\v}[1]{{\ensuremath{\vec{#1}}}}
这样,在文本模式下我就可以写\v{F}
或\curl{\v{F}}
,一切就好了。
但为了简单起见,至少在数学模式下,我希望能够只写\curl\v{F}
,并将其扩展为
\ensuremath{\nabla\times {\ensuremath\vec{F}}}
就像 一样\curl{\v{F}}
。由于我以一种非常简单的方式定义了\curl
,所以目前看起来是正确的。但是,我认为我实际上得到了一种奇怪的行为:如果我将 的定义更改为\curl
带有括号,例如{(\ensuremath{\nabla\times #1})}
,则向量符号会显示在右括号上方,就好像\v
(但不是它的参数)被捕获为 的参数一样\curl
。
但奇怪的是,仅仅输入\ensuremath{(\nabla\times {\ensuremath\vec})}
就会导致错误。
这是怎么回事? 有没有什么好办法可以做到这一点? 这是一个好主意吗?
(顺便说一句,我{}
在的定义中多了一个对的原因\v
是它允许我使用\int_\v{x}
而不是\int_{\v{x}}
。这似乎很有效,但我不太清楚为什么。)
答案1
您可以在正常数学模式下执行此操作,如果您定义
\newcommand{\curl}{\nabla\times}
\newcommand{\v}{\vec}
然后\curl\v{F}
就会完全按照您的需要进行操作,但不幸的是,不适用于下标。
实际上,可以使它适用于下标,但我认为不值得使用它(此外它是错误的,因为它在不用于下标时修复空格):
\makeatletter
\def\curl{\bgroup\@ifnextchar\v\@curlv\@curl}
\def\@curlv#1#2{\nabla\times\vec{#2}\egroup}
\def\@curl#1{\nabla\times #1\egroup}
\makeatother
现在$\int_\curl X$
或$\int_\curl\v{F}$
可以工作。但只有当\v
遵循时\curl
,而不是类似\curl\mathbf{X}
。因此这很容易出错,完全不值得推荐。
过度使用是错误的:用 代替\ensuremath
并不会提高打字速度。\curl\v{F}
$\curl\v{F}$
答案2
这里的简单答案是“你不能”。TeX 不是函数式语言,因此\curl\v{F}
不是“F 的 v 的 curl”。\curl
将吸收一个标记或“平衡文本”(括号组)作为参数。因此\curl\v{f}
最终会\curl
抓取\v
,然后各种事情都可能出错。