siunitx v3 和 pgfplots 使用 lualatex 进行外部化:\micro 编码为“ţ”

siunitx v3 和 pgfplots 使用 lualatex 进行外部化:\micro 编码为“ţ”

从 TeXLive 2020 升级到 TeXLive 2021 会导致 siunitx 宏编码错误\micro,显示为“ţ”。此问题仅发生在pgfplots使用 lualatex 外部化图形时。虽然我的主文档由 处理pdflatex,但只有外部化图形由 处理,lualatex以避免内存问题。

我找到了两种解决方法siunitx 中的错误由最近的更新引入/揭示:\micro 产生 unicode 错误

  1. 将 siunitx 加载为\usepackage{siunitx}[=v2],这表明该问题是由 siunitx v3 引入的。
  2. 添加\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

相关内容