我正在输入作业并收到此错误:
! LaTeX Error: \mathfrak allowed only in math mode.
最近,我向宏文件添加了一些宏,这些宏在使用时会给出 mathfrak 文本,因此,我想我一定是在没有使用数学模式的情况下使用了该命令。我环顾四周,发现自从上次编译以来,我还没有使用过该命令,所以我开始注释掉一些东西,直到我的文档可以编译。总之,长话短说,当我的文档超过一页时,它似乎会输出错误而不是编译。我通过打开一个加载宏文件的新文档(我使用的模板)并输入一些内容来确认这一点,然后创建一个新页面,然后输入一些内容,根本没有数学运算,它会输出相同的错误。
我猜罪魁祸首是这个命令:
\renewcommand{\sl}{\mathfrak{sl}}
。我将其更改为\newcommand{\sla}{\mathfrak{sl}}
,现在我可以浏览页面而不会出现错误。
\sl
我想知道为什么它只在页面之后输出错误。此外,知道如何才能获得我定义的命令而不会出现这种不良行为也很酷。
编辑:这是一个例子
\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{amssymb}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\sl}{\mathfrak{sl}}
\begin{document}
P
\end{document}
由于某种原因,此示例不需要第二页。此外,错误似乎与有关fancy
。
答案1
感谢您发布 MWE,它可以生成您想要修复的问题行为。
问题——即有关\mathfrak
在数学模式之外使用的错误消息——似乎是因为您也在加载fancyhdr
包而出现的:注释掉指令\usepackage{fancyhdr}
和\pagestyle{fancy}
,并且不再产生错误消息。
果然,在文件中fancyhdr.sty
,发现了以下指令:
\if@twoside
\fancyhead[el,or]{\fancyplain{}{\sl\rightmark}}
\fancyhead[er,ol]{\fancyplain{}{\sl\leftmark}}
\else
\fancyhead[l]{\fancyplain{}{\sl\rightmark}}
\fancyhead[r]{\fancyplain{}{\sl\leftmark}}
\fi
鉴于\sl
在 LaTeX 文档中确实不应该再使用 ,最好的解决方案是修改包以使用\slshape
而不是上面显示的代码。下一个最佳解决方案——也是立即可用的解决方案——是让用户(您!)首先\sl
不要尝试重新定义。\sl
2020 年 3 月更新:自从我最初写下这个答案以来,这个fancyhdr
包曾是更新为使用,\slshape
而不是\sl
上面代码块中显示的所有四个实例。因此,以下段落主要(希望……)具有普遍意义;但是,它们不再描述包的当前属性fancyhdr
。
什么是否因为命令\sl
-- 以及相关的字体更改命令\rm
、\sf
、\tt
、\bf
、\it
和\sc
-- 导致它们在 LaTeX 中“弃用”?首先,这些命令不再在 LaTeX“内核”中定义(即,您不会在latex.ltx
TeX 发行版的文件中找到它们),而只能在“类”文件中定义,例如article.cls
。其次,就命令的定义而言\sl
,它通常设置如下:
\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
(宏\normalfont
和\slshape
,当然,是在 LaTeX 内核中定义。)
这个定义\sl
调用了\normalfont
前 \slshape
,是特意模仿原始 Plain-TeX\sl
宏的操作。由于存在\normalfont
执行四个指令\encodingdefault
、\familydefault
、\seriesdefault
和 的指令\shapedefault
--,因此无法“组合”多个旧式字体声明命令。因此,诸如这样的指令\bf\it
将不是创造加粗斜体输出;它只会创建斜体输出。(同样,\it\bf
只会创建大胆的输出。)
\bfseries\itshape
使用而不是 的众多优点之一\bf\it
恰恰是它允许您“结合”两个字体更改命令。(当然,如果使用的字体系列不提供粗斜体字形,TeX/LaTeX 就无法使用它们。但是,可用性字体粗细和形状的特定组合是一个完全独立的问题。