重新定义 \O 后 \o 出现问题

重新定义 \O 后 \o 出现问题

\O出于数学目的重新定义了该命令,但现在它似乎与\o我需要的用于人名的命令相冲突。到目前为止,问题似乎只发生在作者条目中。这是一个 MWE。

\documentclass{amsart}
\usepackage{amsmath,amssymb}
\makeatletter\let\OO\O\let\O\@undefined\makeatother
\newcommand{\O}{\mathcal O}
\begin{document}
\author{R{\o}n}
\title{Hi}
\maketitle
Hi R{\o}n, I like $\O_X$.
\end{document}

如果您从作者条目中删除{\o},它就可以正常编译。

答案1

执行 时,该类amsart适用\MakeUppercase于作者姓名\maketitle。由于\MakeUppercase宏变为\o\O因此会出现错误。

可以

\documentclass{amsart}
\usepackage{amsmath,amssymb}

\let\latexO\O
\let\O\relax
\DeclareRobustCommand{\O}{\ifmmode\mathcal{O}\else\latexO\fi}

\begin{document}

\author{R{\o}n}
\title{Hi}
\maketitle

Hi R{\o}n, I like $\O_X$.

\end{document}

但实际上却无法避免搬起石头砸自己脚的风险:在某些情况下,\O仍然可能会理解为错误的意思。

去做吧;用一个有意义的名字来\mathcal{O}代替。

相关内容