以下代码产生如下所示的预期输出。(我使用带有 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
会更好。