当文档的语言为希伯来语时,TikZ 节点与其标签不对齐

当文档的语言为希伯来语时,TikZ 节点与其标签不对齐

以下代码产生如下所示的预期输出。(我使用带有 2022 LuaLaTeX 引擎的 Overleaf。)

\documentclass{article}
%\usepackage[bidi=basic,provide=*,english,hebrew,layout=graphics]{babel}
%\babelfont{rm}[Renderer=HarfBuzz]{FreeSerif}
\usepackage{adjustbox}
\usepackage{tabularray}
\usepackage{tikz}
\usetikzlibrary{calc}
\NewDocumentCommand{\points}{}{%
\draw (0,0) node [circle,fill=red,label={[label distance=.5cm]-90:$r$}] (r1) {}
      (1,0) node [circle,fill=red,label={[label distance=.5cm]-90:$r'$}] (r2) {}
      (2,0) node [circle,fill=blue,label={[label distance=.5cm]-90:$b'$}] (b1) {}
      (3,0) node [circle,fill=blue,label={[label distance=.5cm]-90:$b$}] (b2) {};
}
\NewDocumentCommand{\colsinnersep}{}{2cm}
\begin{document}
\begin{adjustbox}{center}
\begin{tblr}{cells={halign=c,valign=m},row{1}={belowsep={.5cm}},column{1}={rightsep={\colsinnersep}},column{2}={leftsep={\colsinnersep}}}
Before
&
After
\\
\begin{tikzpicture}[baseline=0]
\points;
\draw[very thick] (r1) |- ($(b1)+(0,.5)$) -- (b1);
\draw[very thick] (r2) |- ($(b2)+(0,-.5)$) -- (b2);
\end{tikzpicture}
&
\begin{tikzpicture}[baseline=0]
\points;
\draw[very thick] (r1) |- ($(b2)+(0,.5)$) -- (b2);
\draw[very thick] (r2) |- ($(b1)+(0,-.5)$) -- (b1);
\end{tikzpicture}
\end{tblr}
\end{adjustbox}
\end{document}

文档默认语言为英语

然而,当取消注释这两行注释,从而使文档的主要语言变成希伯来语时,就会产生以下不正确的输出。

该文件的主要语言是希伯来语

请注意,问题不在于表格原来的左列和右列已经调换位置。这是正确的行为,因为希伯来语是一种从右到左的语言。问题在于图片不再位于列的中央,并且彩色节点与其标签不对齐。另一个问题是节点的标签是从右到左书写的。

为什么会发生这种情况?如何解决?

答案1

Babel 有一个与“内联”图片相关的 bug tikz。请参阅这一页Tikz 用希伯来语扫描节点内的文本位置

添加下面这行\usepackage{tikz}应该可以解决这个问题(感谢 Salim Bou):

\makeatletter
\AddToHook{env/tikzpicture/begin}{\bbl@pictsetdir\tw@}
        \bbl@add\tikz@atbegin@node{\bbl@pictresetdir}
        \bbl@sreplace\tikz{\begingroup}{\begingroup\bbl@pictsetdir\tw@}
\makeatother

但使用最新版本babel会更好。

答案2

你可以\selectlanguage{english}在命令之前添加每个 TikZ 图片的单元格begin{tikzpicture}。结果是:

在每个 TikZ 图片单元格中选择英语作为语言

相关内容