在 LuaLaTeX/XeLaTeX 中使用 unicode-math 时,pgfplots 无法显示希腊语前缀

在 LuaLaTeX/XeLaTeX 中使用 unicode-math 时,pgfplots 无法显示希腊语前缀

我在尝试使用 pgfplots 的“标签中的单位”功能时遇到了困难(v1.17 手册的第 525-528 页)。它在大多数情况下都能很好地工作,除非前缀是希腊字母“mu”并且使用了“unicode-math”包。在这种情况下,不显示任何前缀。我已经用各种数学字体(Libertinus Math、TeX Gyre xx Math、STIX Math 等)对其进行了测试,结果相同。

以下是具有 3 种情况的 MWE(仅考虑 X 轴):

  1. 第一个显示错误:虽然指定了“micro” SI 前缀,但使用 LuaLaTeX 时不会显示“μ”字符(使用 XeLaTeX 时会显示“豆腐”字符)。
  2. 第二张图显示了当使用“micro”以外的前缀时正确的行为。
  3. 第三个显示仍然可以使用“x 单位前缀”选项手动插入所需的前缀,但这不是一个理想的解决方案。
% !TeX TS-program = lualatex
\documentclass[tikz,border=5pt,convert={density=150x150}]{standalone}

\usepackage{fontspec}
\usepackage{unicode-math}
\setmainfont{Libertinus Serif}
\setmathfont{Libertinus Math}

\usepackage{siunitx}
\usepackage{pgfplots}
\usepgfplotslibrary{units}

\begin{document}
    % Example 1: Greek letter mu doesn't get displayed as a prefix
    \begin{tikzpicture}
    \begin{axis}[
        width=.5\textwidth,
        xlabel=$t$, x unit=s, change x base, x SI prefix=micro,
        ylabel=$v_g$, y unit=V,
        ]
        \addplot coordinates {(0,0) (100e-6,1) (200e-6,0.5) (300e-6,0.5)};
    \end{axis}
    \end{tikzpicture}
    % Example 2: No problem with "millis" or other non-greek prefix
    \begin{tikzpicture}
    \begin{axis}[
        width=.5\textwidth,
        xlabel=$t$, x unit=s, change x base, x SI prefix=milli,
        ylabel=$v_g$, y unit=V,
        ]
        \addplot coordinates {(0,0) (100e-6,1) (200e-6,0.5) (300e-6,0.5)};
    \end{axis}
    \end{tikzpicture}
    % Example 3: manually set prefix
    \begin{tikzpicture}
    \begin{axis}[
        width=.5\textwidth,
        xlabel=$t$, x unit=s, change x base, x SI prefix=micro,
        x unit prefix=μ, % $\mu$ doesn't work
        ylabel=$v_g$, y unit=V,
        ]
        \addplot coordinates {(0,0) (100e-6,1) (200e-6,0.5) (300e-6,0.5)};
    \end{axis}
    \end{tikzpicture}
\end{document}

错误:“micro”前缀未显示 “milli”前缀没有问题 手动插入前缀

最后,如果我注释掉“\usepackage{unicode-math}”和相应的“\setmathfont”一切都按预期进行(当然,数学字体是 Computer Modern):

注释掉 unicode-math 包

问题是:这是一个错误还是我做错了什么?

答案1

根据手册,“[b]y 默认单位排版为\mathrm{<unit prefix><unit>}”。在unicode-math此切换到您当前的文本字体,该字体通常不包含数学字符,例如\mu。您可以使用\symrm来获得直立字体,同时仍使用您选择的数学字体,方法是将 更改unit code为受影响的 的参数axis或一次使用\pgfplotsset

% !TeX TS-program = lualatex
\documentclass{article}
\usepackage{tikz}

\usepackage{fontspec}
\usepackage{unicode-math}
\setmainfont{Libertinus Serif}
\setmathfont{Libertinus Math}

\usepackage{siunitx}
\usepackage{pgfplots}
\usepgfplotslibrary{units}

\begin{document}
   % \pgfplotsset{unit code/.code 2 args={\symrm{#1#2}}} % This line could be added once to apply the change to all `axis` environments in the document.
    \begin{tikzpicture}
    \begin{axis}[
        width=.5\textwidth,
        xlabel=$t$, x unit=s, change x base, x SI prefix=micro,
        ylabel=$v_g$, y unit=V,
        unit code/.code 2 args={\symrm{#1#2}},% Alternatively this applies it only once
        ]
        \addplot coordinates {(0,0) (100e-6,1) (200e-6,0.5) (300e-6,0.5)};
    \end{axis}
    \end{tikzpicture}
\end{document}

答案2

使用x unit=s, change x base, x SI prefix=micro,x 标签将被排版为$\mathrm{\mu s}$。但是在 Libertinus 字体中没有\mu,因此你会发现,在日志中

Missing character: There is no 

相关内容