从 TeXLive 2020 升级到 TeXLive 2021 会导致 siunitx 宏编码错误\micro
,显示为“ţ”。此问题仅发生在pgfplots
使用 lualatex 外部化图形时。虽然我的主文档由 处理pdflatex
,但只有外部化图形由 处理,lualatex
以避免内存问题。
我找到了两种解决方法siunitx 中的错误由最近的更新引入/揭示:\micro 产生 unicode 错误:
- 将 siunitx 加载为
\usepackage{siunitx}[=v2]
,这表明该问题是由 siunitx v3 引入的。 - 添加
\DeclareSIPrefix\micro{\text{\textmu}}{-3}
到标题栏。
产生错误编码的 MWE 是:
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[per-mode = symbol]{siunitx}%[=v2]
% \DeclareSIPrefix\micro{\text{\textmu}}{-3}
\usepackage{pgfplots}
\usepgfplotslibrary{external}
\tikzexternalize
\tikzexternalenable
\tikzset{external/system call={lualatex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"}}
\begin{document}
\tikzset{external/remake next}
\begin{tikzpicture}
\begin{axis}[
xlabel={$c$ in $\si{\milli\meter\per\micro\second}$},
ylabel={$v$ in \si{\milli\meter\per\micro\second}},
]
\addplot[domain=0:360] {sin(x)};
\end{axis}
\end{tikzpicture}
\end{document}
鉴于 siunitx v2 没有出现此问题,我认为这可能是 v3 引入的一个错误。最好的解决方案是什么?一般来说,我该如何避免此类问题,以确保我的文档在任何未来版本的 TeXLive 中都能产生完全相同的输出?
答案1
在 v3 中,我对“表现良好”的字体设置的期望比 v2 中更严格。在 LuaTeX 中,这意味着使用 Unicode 设置:要么没有字体包(LaTeX 内核 TU 默认),要么fontspec
。你得到的是\usepackage[T1]{fontenc}
,这在这里是“错误的”。
如果你使用 LuaTeX 来绘图,但使用 pdfTeX 作为主引擎,你需要一个选择性设置
\ifdefined\directlua\else
\usepackage[T1]{fontenc}
\fi
更普遍的是,对软件包进行更新是为了修复问题,这可能会导致输出被更改。解决这个问题的唯一可靠方法是不要更改 TeX 系统。但是,LaTeX 内核中有一个回滚机制,并且受到一系列软件包的支持,包括siunitx
。