下面的例子:
\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 的默认转义字符。andglossaries
包glossaries-extra
会尝试在 sort 和 actual 值中搜索此字符的实例以将其转义,否则 makeindex 会对其进行误解。Ulrike 的回答已经解释了语言设置"
会激活该字符german
,这会破坏此机制。
在这种情况下,最简单的解决方案是选择不同的字符(应该是非活动字符)。基础glossaries
包提供了\GlsSetQuote
与接口一起使用的 makeindex 转义字符glossaries
。glossaries-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}