当我在下面创建 MWE 时,索引中的排序顺序完全是按字母顺序排列的。但是,当我处理使用babel
完全相同方式的非常大的文档时,索引中的顺序就被打乱了。我观察到按字母顺序正确排序的条目组,但它们中却散布着无序的条目。我无法发布整个文档,因为它的大小为兆字节,而且我不知道如何排除故障,因为它使用了数十个包。
\documentclass{memoir}
\usepackage[utf8]{inputenc}
\usepackage[T1,T2A]{fontenc}
\usepackage[main=russian]{babel}
\usepackage{lipsum}
\usepackage{makeidx}
\makeindex
\begin{document}
\lipsum[1]
\index{жзи}
\clearpage
\lipsum[2]
\index{где}
\clearpage
\lipsum[3]
\index{абв}
\printindex
\end{document}
编辑(取自下面的答案):
我刚刚通过添加更多条目重现了该问题。第二个条目的位置错误:
\documentclass{memoir}
\usepackage[utf8]{inputenc}
\usepackage[T1,T2A]{fontenc}
\usepackage[main=russian]{babel}
\usepackage{lipsum}
\usepackage{makeidx}
\makeindex
\begin{document}
\lipsum[1]
\index{жзи}
\clearpage
\lipsum[2]
\index{где}
\clearpage
\lipsum[3]
\index{абв}
\clearpage
\lipsum[4]
\index{эюя}
\clearpage
\lipsum[5]
\index{шщы}
\clearpage
\lipsum[6]
\index{клм}
\printindex
\end{document}
答案1
有几个问题需要解决。
MakeIndex 不了解俄语和西里尔文。
中的西里尔字符存在扩展问题
pdflatex
。
第一个问题使用 解决xindy
。第二个问题通过定义一个特别指定命令用于对西里尔字母进行索引。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1,T2A]{fontenc}
\usepackage[main=russian]{babel}
\usepackage{lipsum}
\usepackage{makeidx}
\makeindex
\newcommand{\rindex}[1]{\expandafter\index\expandafter{\detokenize{#1}}}
\begin{document}
\lipsum[1]
\rindex{жзи}
\clearpage
\lipsum[2]
\rindex{где}
\clearpage
\lipsum[3]
\rindex{абв}
\clearpage
\lipsum[4]
\rindex{эюя}
\clearpage
\lipsum[5]
\rindex{шщы}
\clearpage
\lipsum[6]
\rindex{клм}
\printindex
\end{document}
运行 LaTeX 后,运行
texindy -L russian -C utf8 <filename>.idx
然后再次运行 LaTeX(<filename>
用实际文件名替换)。