xelatex qrcode 失败,将阿拉伯语设置为默认语言

xelatex qrcode 失败,将阿拉伯语设置为默认语言

第一次发帖,如有错误,请见谅。我正在尝试使用二维码包和 xelatex。如果默认语言设置为阿拉伯语(下面的第 6 行和第 7 行)并且文档第一次运行,XeLatex 会失败。

\documentclass{article}
\usepackage{fontspec}
\usepackage{qrcode}
\usepackage{polyglossia}
\usepackage{bidi}
\setotherlanguage{english}\newfontfamily\englishfont{Computer Modern} % Problem Lines
\setdefaultlanguage{arabic}\newfontfamily\arabicfont[Script=Arabic,SizeFeatures={Size=10}]{Sakkal Majalla} % Problem Lines
\begin{document}
\qrset{height=1in}
\qrcode{abcd}
\end{document}

但是,如果注释掉这些行并运行文档,xelatex 会成功并生成二维码。现在取消注释行(6 和 7),会生成二维码(但会镜像,请注意下图中下方二维码标记在右侧而不是左侧)。

在此处输入图片描述

出现的错误信息是

<QR code requested for "abcd" in version 0-M.>
<Error-correction level increased from M to H at no cost.>
! Missing \endcsname inserted.
<to be read again>
                   \protect
l.10 \qrcode{abcd}

谢谢你的帮助。

答案1

正如评论中提到的,qrcode 使用 \arabic 作为数字,而阿拉伯语对此进行了重新定义。因此,您需要修补 qrcode 命令:

\documentclass{article}
\usepackage{fontspec}
\usepackage{qrcode}
\usepackage{etoolbox}
\makeatletter
\patchcmd\FX@getstringlength{\arabic{qr@i}}{\the\c@qr@i}{}{\fail}
\makeatother

\usepackage{polyglossia}
\setotherlanguage{english}%\newfontfamily\englishfont{Computer Modern} % Problem Lines
\setdefaultlanguage{arabic}
\newfontfamily\arabicfont[Script=Arabic,SizeFeatures={Size=10}]{Amiri} % Problem Lines
\begin{document}

\selectlanguage{english}
\qrset{height=1in}
\qrcode{abcd}
\end{document}

答案2

这是一个解决方法 \setdefaultlanguage[numerals=maghrib]{arabic}\newfontfamily\arabicfont[Script=Arabic]{Sakkal Majalla}

希望有人知道更好的方法。

相关内容