很长一段时间以来,我都\newcommand{\C}{\mathbb{C}}
在用 pdflatex 编译的文档的序言中使用 来缩短创建复数符号所需的命令。现在我有一个文档,我必须使用 Opentype 字体。为此,我已将引擎切换为 xelatex,并将其替换\usepackage[T1]{fontenc}
为\usepackage[OT1]{fontspec}
以使其工作。(我不太了解情况,无法真正说出是否或为什么需要这样做。)使用 OTF 字体效果很好,但现在我收到错误消息“命令 \C 已定义。”对于该行,\newcommand
以及“命令 \C 在数学模式下不可用”每次使用它时。所以显然我所做的更改中的某些内容导致了\C
一个预定义命令,该命令不能在数学模式下使用。但是当我\C
在正常模式下使用它时,它不会产生任何可见的符号。它有什么用?它在哪里定义?用 覆盖它安全吗\renewcommand
?
编辑:在处理 MWE 时,我发现 documentclass beamer 存在问题,但 documentclass article 不存在问题。因此,这是我的 MWE:
\documentclass{beamer}
%\usepackage{fontspec}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{amssymb}
\newcommand{\C}{\mathbb{C}}
\begin{document}
This $\C$ is the set of complex numbers.
\end{document}
使用 pdflatex 编译时有效,而
\documentclass{beamer}
\usepackage{fontspec}
%\usepackage[T1]{fontenc}
%\usepackage[utf8]{inputenc}
\usepackage{amssymb}
\newcommand{\C}{\mathbb{C}}
\begin{document}
This $\C$ is the set of complex numbers.
\end{document}
使用 xelatex 编译时产生上述错误。
答案1
该定义来自 hyperref 的旧副本(texlive 2019 或早期的 texlive 2020),在更新的 texlive 2020 或 texlive 2021 或 texlive 2022 中您不会遇到任何错误。
该变化是技术内部清理,与实际情况并不相关,如果覆盖定义,不会发生任何糟糕的事情,除了标准建议不要使用字母重音名称,因为它们可能会在参考书目等中使用。
采用西里尔文 T2A 编码\DeclareTextAccent{\C}
如果您可以使用 XeLaTeX 和 fontspec,那么您也可以使用 unicode-math,它将 ℂ 定义为\BbbC
。否则,\DeclareRobustCommand\C{\mathbb{C}}
将覆盖 的任何先前定义。\C
这可能会起作用,但可能会破坏某些软件包。