LaTeX 错误:\mathbb 仅允许在数学模式下使用。

LaTeX 错误:\mathbb 仅允许在数学模式下使用。

我正在编写一个包,其中除其他外,还提供缩写\mathbb,如下所示:

\newcommand{\A}{\mathbb A}
\def\B{\mathbb B}
\def\C{\mathbb C}
\newcommand{\D}{\mathbb D}
\newcommand{\E}{\mathbb E}
\newcommand{\F}{\mathbb F}
\def\G{\mathbb G}
\def\H{\mathbb H}
\newcommand{\I}{\mathbb I}
\newcommand{\J}{\mathbb J}
\newcommand{\K}{\mathbb K}
\def\L{\mathbb L}
\def\M{\mathbb M}
\newcommand{\N}{\mathbb N}
\def\O{\mathbb O}
\def\P{\mathbb P}
\newcommand{\Q}{\mathbb Q}
\newcommand{\R}{\mathbb R}
\def\S{\mathbb S}
\def\T{\mathbb T}
\def\U{\mathbb U}
\newcommand{\V}{\mathbb V}
\newcommand{\W}{\mathbb W}
\newcommand{\X}{\mathbb X}
\newcommand{\Y}{\mathbb Y}
\newcommand{\Z}{\mathbb Z}
\DeclareSymbolFont{bbold}{U}{bbold}{m}{n}
\DeclareSymbolFontAlphabet{\bb}{bbold}

\def-振荡的原因\newcommand是,我看到其中一些命令并不总是定义的,因此选择\newcommand在某些情况下会出现问题,而\renewcommand在其他情况下会出现问题,而 while 则\def通过不检查命令是否定义来绕过这个问题。这个问题的奇怪之处在于,从 s 中删除括号\def(例如,\def\B{\mathbb B}删除 周围的括号\mathbb B,以及从所有其他\def命令中删除括号)似乎会导致问题。例如,删除除 和 之外的所有括号\B\C导致:

./mworks.sty:844: LaTeX Error: \mathbb allowed only in math mode.

See LaTeX manual or LaTeX Companion for explanation.
Type G <return> for immediate help.
 ...

1.844 \newcommand{\I}{\mathbb
                               I}
?

为什么会发生这种情况?

答案1

您可能已经发现了为什么强烈不建议使用 重新定义内核命令\def

例如,\H被定义为给出“匈牙利变音符号”重音;因此,如果您在文档中谈论 Erdős,您将得到一个令人费解的错误,即使您似乎没有使用\H。实际上,当\usepackage[utf8]{inputenc}生效时,LaTeX 会将其转换ErdősErd\H{o}s。您能看出问题所在吗?

不要重新定义内核命令除非你确切地知道你在做什么。如果\newcommand不能使用,你必须检查命令的含义,如果它是排版重音或类似命令,重新定义它。

将这些命令添加到包中也是特别糟糕的,即使它是供个人使用的。如果你把它传给你的朋友,他们会开始使用它,甚至可能把它包含在他们提交到其他地方的东西中。正如 Barbara Beeton 在评论中观察到的那样,

如果将这样的文件包与手稿一起提交给出版商,则修改的成本可能会非常高,并且可能会导致手稿被拒绝。

我应该补充一点,她是一位伟大的专家(我是 AMS 期刊和书籍文字编辑方面的专家。

你可以尝试说

\def\box#1{\fbox{#1}}

看看会发生什么。

当然,语法

\def{\A}{\mathbb A}

是无效的:虽然\newcommand{\A}{...}是好的,无支架可以遵循\def。无可挽回的错误也是

\def\B \mathbb B

这确实毫无意义。顺便说一句,首选语法是\mathbb{B}使用括号来明确界定\mathbb应用的内容。

答案2

由于发布的代码不会生成显示的错误,因此我将对其进行修改。

完全的文档演示了该错误。

\RequirePackage{amsfonts}
\newcommand{\A}{\mathbb A}
\def\B{\mathbb B}
\def\C{\mathbb C}
\newcommand{\D}{\mathbb D}
\newcommand{\E}{\mathbb E}
\newcommand{\F}{\mathbb F}
\def\G{\mathbb G}
\def\H \mathbb H
\newcommand{\I}{\mathbb I}

\stop

它产生

$ pdflatex er11
This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013)
 restricted \write18 enabled.
entering extended mode
(./er11.tex
LaTeX2e <2011/06/27>
Babel <3.9j> and hyphenation patterns for 54 languages loaded.
(/usr/local/texlive/2013/texmf-dist/tex/latex/amsfonts/amsfonts.sty)

! LaTeX Error: \mathbb allowed only in math mode.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.10 \newcommand{\I}{\mathbb
                             I}
? 

立即的解决方法是使其像问题中发布的代码一样,或者正如 egreg 指出的那样,最好不要使用单字母命令并覆盖 LaTeX 内部结构。

相关内容