在下面的 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
glossaries
Ulrike 的答案确实解决了这个问题,但增加了在文件中打印波斯数字的复杂性.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}