假设我在序言中定义\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}}}
之间没有空格。(参见2
rad
newcommand 与 DeclareMathOperator)
所以我的问题是:如何允许命令直接在上标或下标中使用,同时在命令出现在公式中间时保留正确的间距?
答案1
如果你只是使用\rad
指数而不是运算符,那么定义
\newcommand{\rad}{{\mathrm{rad}}}
会让你输入
f^\rad
请注意,这\DeclareMathOperator
不是获取的简写\mathrm
。
如果您\rad
在其他情况下需要作为运算符,那么不行,因为同样的原因这^\notin
会产生错误。
另一方面,是否真的有必要省去几个括号?任何好的 TeX 编辑器都会在你输入时立即提供括号^
。添加它们总是当出现问题时将免去您的头疼。
答案2
为什么你会对\rad
两个完全不同且不相关的操作(自由基和径向对称化)使用相同的宏,只是因为它们恰好都以字母“rad”开头?对语义不同的操作使用不同的宏。除了避免您描述的情况外,它还可以更轻松地在文档中搜索所有出现的径向对称化。您甚至可以对这些命令进行编程,使其在使用时自动将条目添加到索引中。
关于f^\radial
vs.的问题f^{\radial}
,请帮自己一个忙,始终用括号括住上下索引,除非您正在处理诸如、、等极其简单的情况。这样a_0
不太容易出错,而且坦率地说,看起来很奇怪,就像只是意外起作用的东西(实际上确实如此,正如您所演示的那样)x^2
。p_i
f^\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 之后的数学子公式的代码^
如下:
如您所见,允许的选项是(仅cur_cmd
考虑,因此隐式和显式字符标记均被接受)
catcode 字母或其他内容,或
\chardef
ed 内容:- 已
\mathcode
使用(对排版多个字符无用),或 - 如果数学代码是,
"8000
那么它将被递归扩展为活动字符。(减少到其他情况。支撑没有帮助,自己尝试一下:
\mathcode `c="8000 {\catcode`c\active\gdef c{ab}} $2^c$
此代码导致被排版)
2ab
- 已
\char ⟨number⟩
:没用,如上所述。\mathchar ⟨number⟩
:没用,如上所述。something
\mathchardef
ed:没用,如上所述。\delimiter ⟨number⟩
: 没有用。{ ... }
。
在最后一种情况下,标记必须是{
,并且我们记得在正常上下文中这将使其成为\mathord
(即{,}
与 相同\mathord,
)。
根据数学间距规则表:
通常2\rad
会使其成为行 0:ord 和列 1:op 的情况,总是插入“1:薄空间”(无论数学样式如何)并2{...}
使其成为行 0:ord 和列 0:ord = 无空间的情况。
我们可以手动插入一个\thinspace
,但这在其他情况下使用时显然是错误的,例如指数。即使检测当前的数学风格(使用\mathchoice
)也无济于事。
出于学术目的,如果您创建一种字体,使得某个单个字形具有 3 个字符,然后继续将其定义为其中的一个,那么这可能也是可能的(无需重新定义$
或^
如上所述) 。rad
\rad
\mathchardef