glossary-extra 的自动索引和多语

glossary-extra 的自动索引和多语

下面的例子:

\documentclass{memoir}
\usepackage{polyglossia}
\setdefaultlanguage{english}
\setotherlanguage{german}

\usepackage{glossaries-extra}

\makeglossaries
\makeindex

\glssetcategoryattribute{abbreviation}{dualindex}{true}
\newabbreviation{html}{html}{hypertext markup language}

\begin{document}
\gls{html}
\printglossaries
\printindex
\end{document}

给了我这个错误信息:

Runaway argument?
html\@empty "\@nnil "\@empty \@glsxtr@endescspch \let \@glo@sort \@gls@checkedm
kidx \ETC.
! File ended while scanning use of \@glsxtr@autoindex@escquote.

如果我注释掉设置的三行polyglossia或添加缩写的双索引的行,它可以很好地编译。

答案1

双引号字符"是 makeindex 的默认转义字符。andglossariesglossaries-extra会尝试在 sort 和 actual 值中搜索此字符的实例以将其转义,否则 makeindex 会对其进行误解。Ulrike 的回答已经解释了语言设置"会激活该字符german,这会破坏此机制。

在这种情况下,最简单的解决方案是选择不同的字符(应该是非活动字符)。基础glossaries包提供了\GlsSetQuote与接口一起使用的 makeindex 转义字符glossariesglossaries-extra包提供\GlsXtrSetEscChar了设置dualindex。最好将它们都设置为相同的字符:

\documentclass{memoir}
\usepackage{polyglossia}
\setdefaultlanguage{english}
\setotherlanguage{german}

\usepackage{glossaries-extra}

\GlsSetQuote{+}
\GlsXtrSetEscChar{+}

\makeglossaries
\makeindex

\glssetcategoryattribute{abbreviation}{dualindex}{true}
\newabbreviation{html}{html}{hypertext markup language}

\begin{document}
\gls{html}
\printglossaries
\printindex
\end{document}

如果您使用makeglossaries脚本(或makeglossaries-lite),这将自动调用makeindex开关-g,处理词汇表文件。

正常索引需要有一个设置引号字符的自定义样式:

\documentclass{memoir}
\usepackage{polyglossia}
\setdefaultlanguage{english}
\setotherlanguage{german}

\usepackage{glossaries-extra}

\begin{filecontents*}{dualindex.ist}
quote '+'
\end{filecontents*}

\GlsSetQuote{+}
\GlsXtrSetEscChar{+}

\makeglossaries
\makeindex

\glssetcategoryattribute{abbreviation}{dualindex}{true}
\newabbreviation{html}{html}{hypertext markup language}

\begin{document}
\gls{html}
\printglossaries
\printindex
\end{document}

如果文件名为test.tex,则文档构建为:

xelatex test
makeglossaries test
makeindex -s dualindex.ist test
xelatex test

如果您使用xindy而不是makeindex进行正常索引,则索引仍使用 来执行,\index指示@实际值、|指示封装(格式)并!指示级别。这意味着,如果需要将这些字符的文字用法从默认字符更改为非活动字符,\GlsXtrSetEscChar则仍然需要将用于转义这些字符的字符更改为:"

\documentclass{memoir}
\usepackage{polyglossia}
\setdefaultlanguage{english}
\setotherlanguage{german}

\usepackage[xindy]{glossaries-extra}

\GlsXtrSetEscChar{+}

\makeglossaries
\makeindex

\glssetcategoryattribute{abbreviation}{dualindex}{true}
\newabbreviation{html}{html}{hypertext markup language}

\begin{document}
\gls{html}
\printglossaries
\printindex
\end{document}

根据texindy手册(man texindy),makeindex 仿真并不完全兼容:

MakeIndex 兼容性定义仅支持默认的原始索引语法和标记定义。无法配置原始索引解析或使用 MakeIndex 样式文件来描述输出标记。

因此,可能无法指示texindy转义字符已经改变,但如果这些特殊字符都没有在内容中出现\index,那么希望这应该无关紧要。

答案2

Polyglossia(或者更准确地说是 gloss-german)"直接使 活跃。然后这会破坏使用 的以下包"。将 移动\setotherlanguage{german}\begin{document}

\documentclass{memoir}
\usepackage{polyglossia}
\setdefaultlanguage{english}

\usepackage{glossaries-extra}

\makeglossaries
\makeindex

\glssetcategoryattribute{abbreviation}{dualindex}{true}
\newabbreviation{html}{html}{hypertext markup language}

\setotherlanguage{german}
\begin{document}
\gls{html}
\printglossaries
\printindex
\end{document}

或者使用没有这个问题的 babel,并且它也可以与 xelatex 和 lualatex 配合良好:

\documentclass{memoir}
\usepackage[ngerman,english]{babel}
\usepackage{glossaries-extra}

\makeglossaries
\makeindex

\glssetcategoryattribute{abbreviation}{dualindex}{true}
\newabbreviation{html}{html}{hypertext markup language}


\begin{document}
\gls{html}
\printglossaries
\printindex
\end{document}

相关内容