最近,我在我的计算机上更新了 MikTeX(和 TeX Live!)(就在我休假后 :)),之后我无法编写我的书。这本书很大而且很复杂,\if \else \fi
在序言中使用了许多结构,使用了我自己的自定义宏和环境,其中一些已经无法正常工作。以下是迄今为止发现的问题之一。
以下最少文本未在 MkTeX 和 TeX Live 中由 XeTeX 编译。
\documentclass{article}
% Load fontspec and define a document font:
\usepackage{fontspec}
\setmainfont{TeX Gyre Pagella}
% Load unicode-math and define a math font:
\usepackage{unicode-math}
\setmathfont{texgyrepagella-math.otf}
\begin{document}
\providecommand{\tensor}[1]{\overleftrightarrow{{\mathbf{#1}}}}%
\begin{equation}
\tensor{\pi}
\end{equation}
\end{document}
发出以下消息后,编译中止,输出 0 页:
! Internal error: fad native font flag in `map_char_to_glyph'
我绝对确信三个月前上述示例一定会被成功编译。
现在出了什么问题?我应该更改上述\tensor
宏的定义吗?
这是\tensor
我自己包中宏的完整定义。
%\makeatletter
\@ifpackageloraded{unicode-math}{%
\providecommand{\tensor}[1]{\overleftrightarrow{{\mathbf{#1}}}}%
\PackageInfo{handy}{\string\tensor\space has been declared using ^^J\space\space \string\overleftrightarrow\space from unicode-math package}%
}{%
\@ifpackageloaded{accents}{%
\providecommand{\tensor}[1]{\accentset{\leftrightarrow}{{\mathbf{#1}}}}%
\PackageInfo{handy}{\string\tensor\space has been declared using ^^J\space\space \string\accentset\space from in accents package}%
}{%
\@ifpackageloaded{revsymb4-1}{%
\PackageWarningNoLine{handy2}{\string\tensor\space has been taken from revsymb4-1 package.^^J You are recommended to load `accents' package before me}%
}{
\@ifpackageloaded{revsymb}{%
\PackageWarningNoLine{handy2}{\string\tensor\space has been taken from revsymb package.^^J You are recommended to load `accents' package before me}%
}{%
\ifx\undefined\overset
\else
\providecommand{\tensor}[1]{\overset{\leftrightarrow}{\vec{#1}}}
\PackageWarningNoLine{handy2}{\string\tensor\space has been declared using ^^J\space\space \string\overset\space from amsmath package.^^J You are recommended to load `accents' package before me}%
\fi
}%
}%
}%
}%
%\makeatother
根据加载的包,它使用 4 种替代方案。最优先的替代方案首先执行,并且它假定该unicode-math
包可用。
答案1
已进行了一些更改unicode-math
,以修复使用命令时多字母标识符的一些问题\mathXY
。
\symbf
现在,应该用而不是 来构建单个粗体数学符号\mathbf
,后者保留用于多字母符号。
\documentclass{article}
% Load fontspec and define a document font:
\usepackage{fontspec}
\setmainfont{TeX Gyre Pagella}
% Load unicode-math and define a math font:
\usepackage{unicode-math}
\setmathfont{TeX Gyre Pagella Math}
\newcommand{\tensor}[1]{\overleftrightarrow{\symbf{#1}}}
\begin{document}
\begin{equation}
\tensor{\pi}
\end{equation}
\end{document}
对于较旧的文档,您可以使用包选项恢复旧的含义:
\documentclass{article}
% Load fontspec and define a document font:
\usepackage{fontspec}
\setmainfont{TeX Gyre Pagella}
% Load unicode-math and define a math font:
\usepackage[mathbf=sym]{unicode-math}
\setmathfont{TeX Gyre Pagella Math}
\newcommand{\tensor}[1]{\overleftrightarrow{\mathbf{#1}}}
\begin{document}
\begin{equation}
\tensor{\pi}
\end{equation}
\end{document}
但最好尽快切换到新命令。