我修复了“数学字体错误”,但不知道问题出在哪里

我修复了“数学字体错误”,但不知道问题出在哪里

我正在输入作业并收到此错误:

! 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.ltxTeX 发行版的文件中找到它们),而只能在“类”文件中定义,例如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 就无法使用它们。但是,可用性字体粗细和形状的特定组合是一个完全独立的问题。

相关内容