以下 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
命令主体替换对命令的调用。但应避免使用这种修复方法。上述示例是我在实际文档中处理的情况的简化版本,并且在该文档中,命令带有参数,因此不能轻易用命令主体替换它。