当波斯语为默认语言时,会出现词汇表/多语错误

当波斯语为默认语言时,会出现词汇表/多语错误

在下面的 MWE 中,\glsaddall当文档的默认语言为波斯语时会出现错误,但当文档的默认语言为英语时则不会出现错误。

\documentclass{book}
\usepackage{polyglossia}
\usepackage[xindy]{glossaries}

\setdefaultlanguage[numerals=eastern]{farsi}
\setotherlanguage[variant=american]{english}

% the error goes away with this
%\setdefaultlanguage[variant=american]{english}
%\setotherlanguage[numerals=eastern]{farsi}

\setmainfont{Adobe Arabic}
\newfontfamily\englishfont{Charis SIL}
\newfontfamily\farsifont{Adobe Arabic}
\makeglossaries
\begin{document}
\newglossaryentry{entry}{name={some entry},description={some description}}
\glsaddall % error occurs here
% \glsadd{entry} % this triggers the same error
\printglossary
\end{document}

以下是日志的一部分。

! Extra \else.
<argument> \else 
l.20 \printglossary
I'm ignoring this; it doesn't match any \if.

有什么办法可以解决这个问题吗?我尝试切换包的顺序,但没有什么效果。

答案1

词汇表在本地重新定义了 \number(可能不是一个好主意),这会破坏波斯数字。您可以像这样绕过它(但我不知道这是否会在词汇表中给出正确的输出)。但恕我直言,您应该为词汇表制作一个错误报告,相当多的语言试图更改数字格式并依赖于 \number 原语。

\documentclass{book}
\usepackage{polyglossia}
\usepackage[xindy]{glossaries}

\setdefaultlanguage[numerals=eastern]{farsi}
\setotherlanguage[variant=american]{english}

% the error goes away with this
%\setdefaultlanguage[variant=american]{english}
%\setotherlanguage[numerals=eastern]{farsi}

\setmainfont{Arial Unicode MS}
\newfontfamily\englishfont{Charis SIL}
\newfontfamily\farsifont{Arial Unicode MS}

\makeglossaries

\makeatletter
\let\farsiorgnumber\number %save number
\def\farsinumber#1{%
  \if@western@numerals
    \number#1%
  \else
    \ifnum\XeTeXcharglyph"06F0 > 0%
      \farsidigits{\farsiorgnumber#1}%changed
      %%{\protect\addfontfeature{Mapping=farsidigits}\number#1}%
    \else%
      \arabicdigits{\farsiorgnumber#1}%changed
      %%{\protect\addfontfeature{Mapping=arabicdigits}\number#1}%
    \fi
  \fi}
\makeatletter

\begin{document}


\newglossaryentry{entry}{name={some entry},description={some description}}

 \glsaddall % error occurs here
 \glsadd{entry} % this triggers the same error


\printglossary
\end{document}

答案2

glossariesUlrike 的答案确实解决了这个问题,但增加了在文件中打印波斯数字的复杂性.glo(1234567890 而不是 1234567890),这让人感到困惑xindy。(我搜索过,但找不到教授xindy非西方数字的方法。)如果改用xepersian,这个问题就会消失。

(当然,对于其他语言,Ulrike 的解决方案可能更好。我们恰好有非常好的软件包可用于排版波斯语文本。)

\documentclass{book}
\usepackage[xindy]{glossaries}
\usepackage{xepersian}
\settextfont[Script=arab,Scale=1.4,Ligatures={NoCommon}]{Adobe Arabic}
\setlatintextfont[Mapping=tex-text,Renderer=ICU,ItalicFont=Charis SIL Italic,BoldFont=Charis SIL Bold]{Charis SIL}
\makeglossaries
\begin{document}
\newglossaryentry{entry}{name={some entry},description={some description}}
\glsaddall
\printglossary
\end{document}

相关内容