在下标或上标中放置 \DeclareMathOperator 命令时如何避免使用花括号,同时保留间距?

在下标或上标中放置 \DeclareMathOperator 命令时如何避免使用花括号,同时保留间距?

假设我在序言中定义\DeclareMathOperator\rad{rad}并有文字

Let $f$ be a smooth function and $f^{\rad}$ its radial symmetrization.

必须用\rad花括号括起来很不方便。我可以解决这个问题,将其定义为\newcommand\rad{{\operatorname{rad}}}。但在文档的另一个地方,我写道

Let $n$ be a positive integer and $2 \rad(n)$ be twice its radical.

如果我使用,和\newcommand\rad{{\operatorname{rad}}}之间没有空格。(参见2radnewcommand 与 DeclareMathOperator

所以我的问题是:如何允许命令直接在上标或下标中使用,同时在命令出现在公式中间时保留正确的间距?


有关的:\newcommand 出现双下标错误?

答案1

如果你只是使用\rad指数而不是运算符,那么定义

\newcommand{\rad}{{\mathrm{rad}}}

会让你输入

f^\rad

请注意,这\DeclareMathOperator不是获取的简写\mathrm

如果您\rad在其他情况下需要作为运算符,那么不行,因为同样的原因这^\notin会产生错误。

另一方面,是否真的有必要省去几个括号?任何好的 TeX 编辑器都会在你输入时立即提供括号^。添加它们总是当出现问题时将免去您的头疼。

答案2

为什么你会对\rad两个完全不同且不相关的操作(自由基和径向对称化)使用相同的宏,只是因为它们恰好都以字母“rad”开头?对语义不同的操作使用不同的宏。除了避免您描述的情况外,它还可以更轻松地在文档中搜索所有出现的径向对称化。您甚至可以对这些命令进行编程,使其在使用时自动将条目添加到索引中。

关于f^\radialvs.的问题f^{\radial},请帮自己一个忙,始终用括号括住上下索引,除非您正在处理诸如、、等极其简单的情况。这样a_0不太容易出错,而且坦率地说,看起来很奇怪,就像只是意外起作用的东西(实际上确实如此,正如您所演示的那样)x^2p_if^\radial

\documentclass{article}

\usepackage{amsmath}

\DeclareMathOperator\rad{rad}
    % I would have used "\radical",
    % but this is already defined.

\newcommand\radial{{\mathrm{rad}}}

\begin{document}

\( \rad(n) = f^{\radial} \)

\end{document}

答案3

\rad这是对为什么“仅仅”是一个宏就是不可能的分析。

(当然可以重新定义美元或者重新定义^_成为一个活跃的角色等等,这种情况下并不太难,但这里就不介绍了)


首先,如果你研究源代码并充分扩展的正常定义\operatorname{rad},它相当于

\mathop{
    \newmcodes@
    \kern\z@
    \operator@font
    rad
} \nolimits@

然后,用于扫描 a 之后的数学子公式的代码^如下:

TeX 中的 scan_math 程序

如您所见,允许的选项是(仅cur_cmd考虑,因此隐式和显式字符标记均被接受)

  • catcode 字母或其他内容,或\chardefed 内容:

    • \mathcode使用(对排版多个字符无用),或
    • 如果数学代码是,"8000那么它将被递归扩展为活动字符。(减少到其他情况。支撑没有帮助,自己尝试一下:
    \mathcode `c="8000
    {\catcode`c\active\gdef c{ab}}
    $2^c$
    

    此代码导致被排版)2ab

  • \char ⟨number⟩:没用,如上所述。

  • \mathchar ⟨number⟩:没用,如上所述。

  • something \mathchardefed:没用,如上所述。

  • \delimiter ⟨number⟩: 没有用。

  • { ... }

在最后一种情况下,标记必须是{,并且我们记得在正常上下文中这将使其成为\mathord (即{,}与 相同\mathord,)。

根据数学间距规则表:

TeX 按主题,数学间距规则表

通常2\rad会使其成为行 0:ord 和列 1:op 的情况,总是插入“1:薄空间”(无论数学样式如何)并2{...}使其成为行 0:ord 和列 0:ord = 无空间的情况。

我们可以手动插入一个\thinspace,但这在其他情况下使用时显然是错误的,例如指数。即使检测当前的数学风格(使用\mathchoice)也无济于事。


出于学术目的,如果您创建一种字体,使得某个单个字形具有 3 个字符,然后继续将其定义为其中的一个,那么这可能也是可能的(无需重新定义$^如上所述) 。rad\rad\mathchardef

相关内容