多语环境中的比迪语问题

多语环境中的比迪语问题

请问对于这个消息错误有什么帮助吗?

! Package Listings Error: direction textdirection unknown.

我正在使用 polyglossia,在更新到 texlive 2018 后出现此错误。

我设法在序言中限制了 tcolorbox 包中的错误。以下是导致错误的简单代码:

% !TeX TS-program = xelatex
\documentclass[12pt,a4paper]{article}

\usepackage{xcolor}
\colorlet{mygray}{gray!6!white}

\usepackage[most]{tcolorbox}

\newtcolorbox{myindex}{ %somthing wrong happens here
arc=2mm,
colback=white,
}

\usepackage{fontspec}
\setmainfont[Scale=1.15]{Amiri}

\usepackage{polyglossia}
\setmainlanguage[locale=morocco]{arabic}

\begin{document}
عربي
\end{document}

答案1

更新

2018 年 9 月 15 日发布的33.2 版bidi已解决该问题。请注意,listings必须使用 2018 年 9 月 2 日发布的 1.7 版(或更高版本),否则该问题会再次出现。


原始答案

错误出现在辅助文件中listings-xetex-bidi.def,其中起始代码为

\lst@Key{captiondirection}{textdirection}{%
    \lstKV@SwitchCases{#1}%
    {textdirection&\\%
     RTL&\chardef\bidi@lst@caption@direction\@ne\\%
     LTR&\chardef\bidi@lst@caption@direction\z@%
    }{\PackageError{Listings}{direction #1 unknown}\@ehc}}

\lst@Key{captionscript}{textscript}{%
    \lstKV@SwitchCases{#1}%
    {textscript&\\%
     latin&\chardef\bidi@lst@caption@script\@ne\\%
     nonlatin&\chardef\bidi@lst@caption@script\z@%
    }{\PackageError{Listings}{direction #1 unknown}\@ehc}}

这是错误的。\lstKV@SwitchCases宏需要与 不同的分隔符&;正确的代码应该是

\lst@Key{captiondirection}{textdirection}{%
    \lstKV@SwitchCases{#1}%
    {textdirection:\\%
     RTL:\chardef\bidi@lst@caption@direction\@ne\\%
     LTR:\chardef\bidi@lst@caption@direction\z@%
    }{\PackageError{Listings}{direction #1 unknown}\@ehc}}

\lst@Key{captionscript}{textscript}{%
    \lstKV@SwitchCases{#1}%
    {textscript:\\%
     latin:\chardef\bidi@lst@caption@script\@ne\\%
     nonlatin:\chardef\bidi@lst@caption@script\z@%
    }{\PackageError{Listings}{direction #1 unknown}\@ehc}}

请注意,:应该用 go 代替&

bidi作者而言,语法上的变化是最近才发生的(仅仅几天),在以前的版本中,listings分隔符是&。请参阅https://sourceforge.net/p/persian-tex-dist/tickets/9/

事实上,显示错误的一个最小例子是

\documentclass[12pt,a4paper]{article}

\usepackage{listings}
\usepackage{fontspec}
\usepackage{polyglossia}

\setmainlanguage[locale=morocco]{arabic}
\setmainfont[Scale=1.15]{Amiri}

\begin{document}
عربي
\end{document}

它出现在您的文档中是因为加载most选项。如果您不需要,只需避免加载它并发出tcolorboxlistingslistings

\usepackage[many]{tcolorbox}

手动加载可能缺少的库。

如果你listings除了复制listings-xetex-bidi.def到您的工作目录并将的六个外观更改为&如上所示之外,几乎不需要做太多事情:,至少直到在分发中修复错误的代码为止bidi

相关内容