如何将 unicode-math 与 beamer 和 lualatex 一起使用?

如何将 unicode-math 与 beamer 和 lualatex 一起使用?

根据《Die TeXnische Komödie》最近的一篇文章,这应该是让拉丁现代数学与 lualatex 和最新的 TeXLive 2011 协同工作的方法:

\documentclass[professionalfonts]{beamer}
\usepackage[english]{babel}
\usepackage{iftex}
\ifPDFTeX
  \usepackage[utf8]{inputenc}
  \usepackage[T1]{fontenc}
  \usepackage{lmodern}
\else
  \ifLuaTeX
    \usepackage{luatextra}
    \defaultfontfeatures{Ligatures=TeX,Numbers=OldStyle}
    \usepackage{unicode-math} 
    \setmathfont{Latin Modern Math}
  \fi
\fi
\newcommand{\ip}[2]{(#1, #2)}
\begin{document}
\begin{frame}{Speaker's Name}{About Our Next Speaker}
\LaTeX\ is good at typesetting mathematical formulas
like
       \( x-3y + z = 7 \) 
or
       \( a_{1} > x^{2n} + y^{2n} > x' \)
or  
       \( \ip{A}{B} = \sum_{i} a_{i} b_{i} \).
\end{frame}
\end{document}

它可以工作(至少根据pdffonts),但是unicode-math抱怨:

* unicode-math warning: "disable-beamer"
* 
* Disabling beamer's math setup.
* Please load beamer with the [professionalfonts] class option.

这条信息被重复了十几次:

* fontspec warning: "icu-feature-not-exist-in-font"
* 
* OpenType feature 'Numbers=OldStyle' (+onum) not available
* for font 'LatinModernMath',
* with script 'Math', and language 'Default'.

我的设置有什么问题?

编辑:Numbers=OldStyle如果从 中 删除 ,fontspec 警告就会消失\defaultfontfeatures

编辑2: 我删除了该ifxetex包并将\ifluatex其更改为\ifLuaTeX

答案1

关于第一条消息,有一个 beamer 类选项professionalfont,它设置了一个\if,专门用于\ifbeamer@suppressreplacements决定 beamer 是否会处理一些特殊的字体内容,或者是否有其他包可以代替它。 unicode-math检查是否\if已将其设置为 true,如果没有,它会发出警告,然后将其设置为 true。因此,加载unicode-math可确保将其\if设置为 true,但可能不会像设置类选项那样早完成。

但是,如果你设置类选项,然后你会收到警告:

“professionalfont” 已过时。请改用字体主题“professionalfonts”

这里有两点需要注意。首先是 class 选项不是 professionalfonts(正如unicode-math声称的那样)但是professionalfont。其次,它已经过时了。相反,你应该发出以下命令:

\usefonttheme{professionalfonts}

在你的序言中。什么做的是:

\mode<presentation>{\beamer@suppressreplacementstrue}

所以它设置相同\if,但是仅有的presentation模式。因此它在article模式中被忽略。由于unicode-math测试仅检查类是否为 beamer,而不检查包beamerarticle,因此这是一致的。因此正确的前言是:

\documentclass{beamer}
\usefonttheme{professionalfonts}
\usepackage{unicode-math}

最后,应该如果中间那行被遗漏了,也不会有什么实际问题,因为它所做的就是unicode-math检查类时所做的beamer。因此中间那行的实际效果是抑制包的警告unicode-math

安德鲁现在要离开并改变他的演讲的序言,因为他已经收到了professionalfonts课程选项的警告,并且不明白为什么他会收到这个警告。

答案2

\documentclass[professionalfont]{beamer}
\usepackage[english]{babel}
\usepackage{iftex,ifxetex}
\ifPDFTeX
  \usepackage[utf8]{inputenc}
  \usepackage[T1]{fontenc}
  \usepackage{lmodern}
\else
  \ifluatex
    \usepackage{unicode-math} 
    \defaultfontfeatures{Ligatures=TeX,Numbers=OldStyle}
    \setmathfont{Latin Modern Math}
    \setsansfont{Linux Biolinum O}
  \fi
\fi
\newcommand{\ip}[2]{(#1, #2)}
\begin{document}
\begin{frame}{Speaker's Name}{About Our Next Speaker}
\LaTeX\ is good at typesetting mathematical formulas
like
       \( x-3y + z = 7 \) 
or
       \( a_{1} > x^{2n} + y^{2n} > x' \)
or  
       \( \ip{A}{B} = \sum_{i} a_{i} b_{i} \).

012345 $012345$ ff ffl ffi

\end{frame}
\end{document}

相关内容