考虑以下(希望是最小的)非工作示例并使用luatex
(TeXlive 2016)进行编译:
\documentclass{article}
\usepackage{fontspec}
\setmainfont{texgyrebonum-regular.otf}
\usepackage{fancyvrb}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyfoot[C]{{\addfontfeature{Numbers = SlashedZero}0}}
\begin{document}
\begin{Verbatim}[frame = single]
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
Test
\end{Verbatim}
\end{document}
我们可以在首页的页脚中看到这一点:
显然有些地方出了问题。这是 bug 还是我做错了?
答案1
这是发行版中的 fontspec/lua 问题。文件 .../texmf-dist/tex/latex/fontspec/fontspec.lua 的第 29/30 行有以下代码
local function tempswatrue() tex.sprint([[\FontspecSetCheckBoolTrue ]]) end
local function tempswafalse() tex.sprint([[\FontspecSetCheckBoolFalse]]) end
但是,此代码使用的是当前的 catcode,而不是标准 LaTeX catcode。这两行应该替换为
local latex = luatexbase.registernumber("catcodetable@latex")
local function tempswatrue() tex.sprint(latex,[[\FontspecSetCheckBoolTrue ]]) end
local function tempswafalse() tex.sprint(latex,[[\FontspecSetCheckBoolFalse]]) end
它使用标准 LaTeX 代码。当然,这应该在官方发行版中更改。