Lualatex 阿拉伯语个人 tcolorbox 的问题

Lualatex 阿拉伯语个人 tcolorbox 的问题

大家好,我正在使用 lualatex 用乳胶书写阿拉伯语,但是当我使用个性化的 tcolorbox 时,它会给我下图中的结果,如下所示:

\documentclass{book}
\usepackage[paper width=5cm,paper height=5cm]{geometry}
\usepackage[most]{tcolorbox}
\usepackage[bidi=basic,layout=graphics]{babel}
\babelprovide[import,main]{arabic}
\babelfont{rm}{Amiri}

\pagestyle{empty}
\newtcbtheorem{defi}{تعريف}%
{ % frame stuff
    enhanced,frame empty,interior empty,
    colframe=white,%green!25!blue,
    colback=white,
    borderline west={3pt}{0pt}{green!25!blue},breakable,
    left=0.2cm,
    right skip={-0.029\linewidth},
    % title stuff
    attach boxed title to top left={yshift=-2mm,xshift=-5mm},
    coltitle=black,
    fonttitle=\bfseries,
    colbacktitle=white,
    boxed title style={boxrule=1pt,rounded corners,colframe=green!25!blue}}{defi}

\begin{document}
Text text text text\par
Text text text text\par
Text text text text

\begin{tcolorbox}[breakable]
وشا ضرك
\end{tcolorbox}

\begin{defi} 
السلام عليكم لاباس
\end{defi}
\end{document}

在此处输入图片描述

答案1

问题是defienv 处于 RTL 上下文中,标题框的锚点发生了移动,您需要将其放置defi在 LTR 上下文中

\AddToHook{env/defi/begin}{\textdir TLT \bodydir TLT}

然后,框架标题和框架文本前面必须\textdir TRT \bodydir TRT \pardir TRT使用before titlebefore upper( before lower) 键

\documentclass{book}
\usepackage[paper width=5cm,paper height=5cm,centering]{geometry}
\usepackage[most]{tcolorbox}
\usepackage[bidi=basic,layout=graphics]{babel}
\babelprovide[import,main]{arabic}
\babelfont{rm}{Amiri}

\AddToHook{env/defi/begin}{\textdir TLT \bodydir TLT}%

\pagestyle{empty}
\newtcbtheorem{defi}{تعريف}%
{ % frame stuff
    before title=\textdir TRT \bodydir TRT \pardir TRT,
    before upper=\textdir TRT \bodydir TRT \pardir TRT,
    before lower=\textdir TRT \bodydir TRT \pardir TRT,
    enhanced,frame empty,interior empty,
    colframe=white,
    colback=white,
    borderline east={3pt}{0pt}{green!25!blue},
    left=0.2cm,
    right skip={-0.029\linewidth},
    % title stuff
    attach boxed title to top right={yshift=-2mm,xshift=5mm},breakable,
    coltitle=black,
    fonttitle=\bfseries,
    colbacktitle=white,
    boxed title style={boxrule=1pt,rounded corners,colframe=green!25!blue}}{defi}

\begin{document}

\begin{defi}{}{}
السلام عليكم لاباس
\end{defi}

\begin{defi}{}{}
السلام عليكم لاباس

السلام عليكم لاباس

السلام عليكم لاباس

السلام عليكم لاباس

السلام عليكم لاباس

السلام عليكم لاباس

السلام عليكم لاباس

السلام عليكم لاباس

السلام عليكم لاباس

السلام عليكم لاباس

السلام عليكم لاباس

السلام عليكم لاباس

السلام عليكم لاباس

السلام عليكم لاباس
\end{defi} 

السلام عليكم 

\end{document}

在此处输入图片描述

从皮肤库进行修补\tikzpicture@tcb@hooked也能得到正确的结果

\documentclass{book}
\usepackage[paper width=5cm,paper height=5cm,centering]{geometry}
\usepackage[most]{tcolorbox}
\usepackage[bidi=basic,layout=graphics]{babel}
\babelprovide[import,main]{arabic}
\babelfont{rm}{Amiri}

\makeatletter
\bbl@sreplace\tikzpicture@tcb@hooked{\noexpand\tikzpicture}%
          {\textdir TLT\noexpand\tikzpicture}%
\makeatother

\pagestyle{empty}
\newtcbtheorem{defi}{تعريف}%
{ % frame stuff
    enhanced,frame empty,interior empty,
    colframe=white,
    colback=white,
    borderline east={3pt}{0pt}{green!25!blue},
    left=0.2cm,
    right skip={-0.029\linewidth},
    % title stuff
    attach boxed title to top right={yshift=-2mm,xshift=5mm},breakable,
    coltitle=black,
    fonttitle=\bfseries,
    colbacktitle=white,
    boxed title style={boxrule=1pt,rounded corners,colframe=green!25!blue}}{defi}

\begin{document}

\begin{defi}{}{}
السلام عليكم لاباس
\end{defi}
    
السلام عليكم 

\end{document}

答案2

解决方案从这里开始:tcolorbox 包和 arabi 包存在问题:添加fontupper=\selectlanguage{arabic}到 tcolorbox 选项。

布局

另外,你必须分辨出babel哪个部分是哪个。(参见评论tcbraster 包含英语和阿拉伯语两个并列列表)。

我对布局做了一些小调整,

平均能量损失

\documentclass{book}
%\usepackage[paper width=5cm,paper height=5cm]{geometry}
\usepackage[most]{tcolorbox}
\usepackage[bidi=basic]{babel}
%\babelprovide[import,main]{arabic}
\babelprovide[import, onchar = ids fonts]{arabic}
\babelfont[arabic]{rm}[Renderer=HarfBuzz]{Amiri}

\pagestyle{empty}


\newtcbtheorem{defi}{تعريف}%
{ % frame stuff
    enhanced,
%    frame empty,interior empty,
    colframe=green!25!blue,
    colback=blue!10,
    borderline east={3pt}{0pt}{green!25!blue},breakable,
    left=0.2cm,
    right skip={-0.029\linewidth},
    fontupper=\selectlanguage{arabic},
%    fontlower=\selectlanguage{arabic},
    % title stuff
    attach boxed title to top right={yshift=-2mm,xshift=-5mm},
    coltitle=black,
    fonttitle=\bfseries\large,
    colbacktitle=green!5,
    boxed title style={boxrule=1pt,rounded corners,colframe=green!25!blue}}{defi}

\begin{document}
Text text text text\par
Text text text text\par
Text text text text



\begin{tcolorbox}\begin{otherlanguage}{arabic}
وشا ضرك 
\end{otherlanguage}
\end{tcolorbox}


\begin{defi}{}{}{\selectlanguage{arabic}}

السلام عليكم لاباس 

\end{defi}



\end{document}

相关内容