我在尝试使用 pgfplots 的“标签中的单位”功能时遇到了困难(v1.17 手册的第 525-528 页)。它在大多数情况下都能很好地工作,除非前缀是希腊字母“mu”并且使用了“unicode-math”包。在这种情况下,不显示任何前缀。我已经用各种数学字体(Libertinus Math、TeX Gyre xx Math、STIX Math 等)对其进行了测试,结果相同。
以下是具有 3 种情况的 MWE(仅考虑 X 轴):
- 第一个显示错误:虽然指定了“micro” SI 前缀,但使用 LuaLaTeX 时不会显示“μ”字符(使用 XeLaTeX 时会显示“豆腐”字符)。
- 第二张图显示了当使用“micro”以外的前缀时正确的行为。
- 第三个显示仍然可以使用“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}
最后,如果我注释掉“\usepackage{unicode-math}”和相应的“\setmathfont”一切都按预期进行(当然,数学字体是 Computer Modern):
问题是:这是一个错误还是我做错了什么?
答案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