\tensor 命令有什么问题?

\tensor 命令有什么问题?

最近,我在我的计算机上更新了 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}

但最好尽快切换到新命令。

相关内容