我想通过\DeclareMathOperator{\S}{\mathsf{S}}
new 运算符进行定义,但它说\S
已经定义。我该如何重新定义它?
答案1
(更新后的答案纳入了 egreg 的意见和建议)
假设您希望保留的文本模式含义\S
,我建议您按照下面的代码所示进行操作。
\S
如果您碰巧加载了任何使用 的包\S
,那么保留 的文本模式含义尤其有用(实际上是必不可少的)。
\documentclass{article}
\usepackage{letltxmacro} % for '\LetLtxMacro' macro
\usepackage{amsmath} % for '\operatorname' macro
\LetLtxMacro\origS\S % preserve original def. of "\S"
\renewcommand{\S}{\ifmmode\operatorname{\mathsf{S}}\else\origS\fi}
\begin{document}
\S1, $\mathsf{a}\S \mathsf{a}$, $\mathsf{a}\S(\mathsf{a})$
\end{document}
答案2
我不认为以这种方式重载命令是一种好的做法。事实上,我非常确信事实恰恰相反。
定义\opS
之后你就可以上路了。
无论如何,如果你真的想要它,请查看的\S
定义latex.ltx
:
% latex.ltx, line 2119:
\DeclareRobustCommand{\S}{\ifmmode\mathsection\else\textsection\fi}
因此,您会发现\S
数学模式已经做了一些不同的事情(它将§打印为数学符号)。您只需重新定义\mathsection
:
\documentclass{article}
\usepackage{amsmath}
\renewcommand\mathsection{\operatorname{\mathsf{S}}}
\begin{document}
Text: \S
Math: $\S(a)$
\end{document}