以下代码运行良好
% arara: pdflatex
\documentclass[12pt]{book}
\usepackage{accents}
\usepackage[
cal = cm,
bb = ams,
frak = euler,
scr = euler
]{mathalfa}
\begin{document}
$\accentset{\circ}{\mathfrak{D}}$ % newton
\end{document}
但是当我把牛顿线放入另一个已amsfonts
加载的文件中,并添加我的所有工作时,我得到了
! Use of \reserved@a doesn't match its definition.
\reserved@b ->\relax
\ifmmode \else \non@alpherr \mathfrak \fi \use@mathgro...
l.50 \end{align}
?
! Emergency stop.
\reserved@b ->\relax
\ifmmode \else \non@alpherr \mathfrak \fi \use@mathgro...
l.50 \end{align}
我认为问题出在命令上\accentset
。
如何解决这个问题?
答案1
该包mathalfa
虽然可能方便设置不同的数学字母,但与amsfonts
定义\mathfrak
和相冲突\mathbb
。
但是amsfonts
这个定义是有条件的:
103 \@ifundefined{mathfrak}{%
104 \DeclareMathAlphabet{\mathfrak}{U}{euf}{m}{n}
105 \SetMathAlphabet{\mathfrak}{bold}{U}{euf}{b}{n}
106 }{}
107 \@ifundefined{mathbb}{%
108 \DeclareSymbolFontAlphabet{\mathbb}{AMSb}%
109 }{}
所以可以安全地加载它后 mathalfa
\mathfrak
。在这种情况下,如果您已经为和\mathbb
其他包声明了字体,它什么也不做,但如果您想要加载amssymb
(这取决于amsfonts
),它很重要。
所以正确的顺序是
\usepackage{amsmath}
\usepackage{accents}
\usepackage[
cal = cm,
bb = ams,
frak = euler,
scr = euler
]{mathalfa}
\usepackage{amssymb}
\text{$...$}
该错误是在环境中触发的align
,因为这是一个相当复杂的情况,数学在各个层次上嵌套在数学中,另外还存在材料双重传递的问题。
请注意,在数学模式下你不需要accents
响铃重音,因为 LaTeX 已经提供了\mathring
。
\documentclass[12pt]{book}
\usepackage{amsmath}
\usepackage{accents}
\usepackage[
cal = cm,
bb = ams,
frak = euler,
scr = euler
]{mathalfa}
\usepackage{amssymb}
\begin{document}
\begin{align}
\text{$S$}
\mathring{\mathfrak{D}}
\accentset{\circ}{\mathfrak{D}}
\end{align}
\end{document}
我发现渲染效果\mathring
好多了。
答案2
在做mwe的时候,我发现了错误的线路。
感谢大家的帮助。
% arara: pdflatex
\documentclass[12pt]{book}
\usepackage{amsmath}
\usepackage{amsfonts} % delete to remove error
\usepackage{accents}
\usepackage[
cal = cm,
bb = ams,
frak = euler,
scr = euler
]{mathalfa}
\begin{document}
\begin{align}
\text{ $S$ }
\accentset{\circ}{ \mathfrak{D} }
\end{align}
\end{document}