unicode-math 干扰 siunitx 并忽略复杂单位的设置

unicode-math 干扰 siunitx 并忽略复杂单位的设置

我只是想\sisetup根据output-complex-root=\ensuremath{\imath}表 16进行扩展希尼奇\imath包。但编译后的输出文件中缺少该符号路拉泰克斯. 查看我的 MNWE:

\documentclass{scrbook}
  \usepackage{amsmath}
  \usepackage{unicode-math} 
  % \usepackage{lualatex-math}
  \usepackage{siunitx}
    \sisetup{
        math-micro=\text{µ},text-micro=µ,
        input-complex-roots = i,
        output-complex-root=\ensuremath{\imath}
    }

\begin{document}
  \num{1+2i} or \(\num{1+2i}\) test: \(\imath\)
  output
  \SI{10}{\micro\m}
  \SI[mode=text]{10}{\micro\m} % just for reference 

\end{document}

虽然包lualatex-数学可以正常工作。我发现了一个类似的问题(这里),但不幸的是它没有帮助。

答案1

加载直立数学字母表

使用unicode-math,您可以定义一个直立数学符号字母表,它与数学模式中的文本符号不同。下面是一个示例,它以 ISO 样式设置了虚数单位 i,来自直立斜体字体,但保留了主文本字体中的 µ 符号。

在数学模式中使用\text符号是我以前犯过的一个错误——但这样粗体或斜体格式就会从周围的文本中渗透出来!在这里,你想使用\mathrm,但另一种选择是\text{\normalfont µ}

\documentclass{scrbook}
  \usepackage{amsmath}
  \usepackage[math-style=ISO]{unicode-math} 

  \setmathfont{Latin Modern Math}
  \setmathfont[range=up]{Latin Modern Roman Unslanted}

  \usepackage{siunitx}
    \sisetup{
        math-micro=\mathrm{µ},text-micro=µ,
        input-complex-roots = i,
        output-complex-root=\ensuremath{\symup{i}}
    }

\begin{document}
  \num{1+2i} or \(\num{1+2i}\) test: \(\imath\)
  output
  \SI{10}{\micro\m}
  \SI[mode=text]{10}{\micro\m} % just for reference 

\end{document}

字体示例

请注意\mathrm,、\mathup\operatorname使用默认文本字体,而\symup使用花哨的直立数学符号字体​​。

我常用的例子是欧拉恒等式,它由 Hermann Zapf 的《新欧拉》中的常数组成,其余文本则包含在他的 Palatino 中(克隆):

\documentclass[varwidth, preview]{standalone}

\usepackage{mathtools}
\usepackage[math-style=ISO]{unicode-math}

\setmainfont{TeX Gyre Pagella}
\defaultfontfeatures{Scale=MatchLowercase}

\setmathfont{Asana Math}
\setmathfont[range={up/{Latin,latin,Greek,greek}, 
                    bfup/{Latin,latin,Greek,greek}},
             script-features={}, sscript-features={}
            ]{Neo Euler}

\newcommand\upe{\symup{e}}
\newcommand\upi{\symup{i}}

\begin{document}
\begin{align*}
  \upe^{\upi x} &= \cos{x} + \upi \sin{x} \\
  \upe^{\upi \uppi} + 1 &= 0
\end{align*}
\end{document}

Neo Euler/Palatino 样本

使用无点ı

但这并没有回答你问的字面问题,即如何使用无点 ı。由于问题是将siunitx字体切换为\mathrm,只需将其改回即可。以下方法有效:

output-complex-root=\ensuremath{\mathnormal\imath}

如果您使用上述技术加载带有直立无点 ı 的数学字体,\symup\imath同样可以正常工作。

更改 \mathrm

Ulrike Fischer 的答案很有效,但如果您采用这种方法,我建议您\setmathrm这样做\setmathfontface\mathrm

答案2

siunitx 用于\mathrm数字的排版,由于这通常是文本字体,因此它没有数学符号。您可以映射\mathrm到数学字体:

\documentclass{scrbook}
  \usepackage{amsmath}
  \usepackage{unicode-math}
  \setmathfontface\mathrm{Latin Modern Math}
  \usepackage{siunitx}
    \sisetup{
        math-micro=\text{µ},text-micro=µ,
        output-complex-root=\ensuremath{\imath},
    }

\begin{document}
  \num{1+2i} or \(\num{1+2i}\) test: $\imath$
  \SI{10}{\micro\m}
  \SI[mode=text]{10}{\micro\m} % just for reference
\end{document}

在此处输入图片描述

相关内容