LuaLaTeX 与 siunitx、luainputenc 和 T1 fontenc 产生错误

LuaLaTeX 与 siunitx、luainputenc 和 T1 fontenc 产生错误

错误

使用 LuaLaTeX 编译下面的 MWE 时出现以下错误:

ERROR: TeX capacity exceeded, sorry [input stack size=10000].

--- TeX said ---
\curr@fontshape ->\f@encoding 
                              /\f@family /\f@series /\f@shape 
l.6780 ... \__siunitx_unit_non_latin:n { "00B0 } C }

问题出现在文件中的siunitx.sty以下行:

\siunitx_declare_unit:Nx \degreeCelsius { \__siunitx_unit_non_latin:n { "00B0 } C }

平均能量损失

\documentclass{standalone}

\usepackage[utf8]{luainputenc}
\usepackage{MinionPro}
\usepackage[T1]{fontenc}
\usepackage{siunitx}%[=v2]

\begin{document}

«\SI{40}{\celsius}»

\end{document}

背景信息

正如 siuntix 文档中所写,siunitxTU在使用 LuaLaTeX 进行编译时会假定字体编码。但这对我来说不是一个选择,因为我依赖于MinionPro包(需要T1),并且我希望能够使用 pdfLaTeX 和 LuaLaTeX 编译我的文档。我需要 LuaLaTeX 是因为graphdrawing.treesTikZ 库。

当我使用兼容性标志时,\usepackage{siunitx}[=v2]它不会给我任何错误。但我想使用当前版本的 siunitx。

问题

这个错误可以解决吗或者有解决方法吗?

答案1

不使用 luainputenc 也可以工作。但是你需要定义非 ASCII 字符:

\documentclass[border=5pt]{standalone}
%\usepackage{MinionPro}
\usepackage[T1]{fontenc}
\usepackage{siunitx}%[=v2]
\usepackage{newunicodechar}
\newunicodechar{«}{\guillemetleft}
\newunicodechar{»}{\guillemetright}
\begin{document}

«\SI{40}{\celsius}» 

\end{document}

在此处输入图片描述

答案2

对于 Unicode 引擎,siunitx迄今为止尚未预期任何用作符号的字符是活动字符。由于这里的一些假设是在加载例程期间进行的,因此“简单”补丁实际上不可行。

我将很快发布 v3.1.7 siunitx:这为 Unicode 引擎中 UTF-8 字符活跃的情况添加了额外的防御代码。

相关内容