错误
使用 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.trees
TikZ 库。
当我使用兼容性标志时,\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 字符活跃的情况添加了额外的防御代码。