当语言管理器为 babel 时,希伯来语文档中的 TikZ 画中画会导致 lualatex 失败,但当语言管理器为 polyglossia 时则不会失败

当语言管理器为 babel 时,希伯来语文档中的 TikZ 画中画会导致 lualatex 失败,但当语言管理器为 polyglossia 时则不会失败

以下 LaTeX 代码保存在 中~/test.tex

\documentclass{article}

\iffalse
\usepackage{polyglossia}
\setmainlanguage{hebrew}
\setmainfont{FreeSans}
\fi

\iffalse
\usepackage[bidi=basic]{babel}
\babelprovide[main,import]{hebrew}
\babelfont{rm}{FreeSans}
\fi

\usepackage{tikz}
\newcommand{\squarecmd}{ \pic {square}; }
\tikzset{
   square/.pic={ \draw (0,0) rectangle (1,1); },
   picture/.pic={ \squarecmd; }
}
\begin{document}

\tikz \pic{picture};

\end{document}

然后在终端中执行以下命令:lualatex ~/test。因此,文件~/test.pdf已创建。在 PDF 查看器中打开时,文件显示如下。(页面底部的页码已从屏幕截图中剪掉。)

一个正方形

polyglossia然后通过注释掉包含\iffalse和的两行代码,激活了该代码块\fi,并lualatex ~/test重新运行。编译成功结束,并在 处创建了一个文件~/test.pdf,在 PDF 查看器中打开时显示如下。(页面底部的页码再次从屏幕截图中剪掉。)

同一个广场,以希伯来语为主要语言,通过多语制。

请注意,由于希伯来语是从右到左的语言,因此方块的改变位置是正确的。

我现在将polyglossia块恢复到其之前的休眠状态,并将其babel激活。当我现在执行时lualatex ~/test,编译失败,并~/test.log包含以下代码片段。

warning  (hpack filter): error: ...e/2022/texmf-dist/tex/generic/babel/babel-bid
i-basic.lua:345: attempt to index a nil value (field '?')

.
\tikz@subpicture@handle@ ...tpath \egroup \egroup 
                                                  \egroup \fi \pgfkeysgetval...
l.25 \tikz \pic{picture}
                      ;
? 
! Emergency stop.
\tikz@subpicture@handle@ ...tpath \egroup \egroup 
                                                  \egroup \fi \pgfkeysgetval...
l.25 \tikz \pic{picture}
                      ;
End of file on the terminal!

为什么包会产生错误?如何修复此问题以便编译成功,并且生成的 PDF 文件显示与包激活babel时相同?polyglossia

请注意,修复该问题的一种方法是用\squarecmd命令主体替换对命令的调用。但应避免使用这种修复方法。上述示例是我在实际文档中处理的情况的简化版本,并且在该文档中,命令带有参数,因此不能轻易用命令主体替换它。

相关内容