嘗試用俄語單字建立索引,MWE:
\documentclass{book}
\usepackage[T1, T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english, russian]{babel}
\usepackage[xindy]{imakeidx}
\makeindex
\begin{document}
\chapter{Первая}
\index{notepad}
\index{apple}
\index{часть}
\index{дерево}
\index{электрон}
\printindex
\end{document}
我使用 MiKTeX(完整和更新),運行:latexmk.exe -pdf file.tex
這為我提供了索引中包含俄語單字的 file.pdf,但它們的排序方式錯誤。文件.idx 是:
\indexentry{notepad}{1}
\indexentry{apple}{1}
\indexentry{\IeC {\cyrch }\IeC {\cyra }\IeC {\cyrs }\IeC {\cyrt }\IeC {\cyrsftsn }}{1}
\indexentry{\IeC {\cyrd }\IeC {\cyre }\IeC {\cyrr }\IeC {\cyre }\IeC {\cyrv }\IeC {\cyro }}{1}
\indexentry{\IeC {\cyrerev }\IeC {\cyrl }\IeC {\cyre }\IeC {\cyrk }\IeC {\cyrt }\IeC {\cyrr }\IeC {\cyro }\IeC {\cyrn }}{1}
我發現問題是LaTeX根據這些{\cyrch},{\cyre}等創建索引。如何以正確的排序創建俄語索引:在我的例子中是дерево、часть、электрон?
答案1
由於一些限制,該\index
命令不能很好地處理 UTF-8 字元(恐怕只有全新版本才能解決這個問題。)
你可以透過這樣做來解決這個問題
\documentclass{book}
\usepackage[T1, T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english, russian]{babel}
\usepackage[xindy]{imakeidx}
\makeindex
\makeatletter
\newcommand{\rindex}[2][\imki@jobname]{%
\index[#1]{\detokenize{#2}}%
}
\makeatother
\begin{document}
\chapter{Первая}
\rindex{notepad}
\rindex{apple}
\rindex{часть}
\rindex{дерево}
\rindex{электрон}
\printindex
\end{document}
呼喚
texindy -L russian -C utf8 <filename>.idx
按預期產生索引:
答案2
好的,謝謝,現在可以了!但是,索引的英文和俄文部分存在一些差異。我的意思是每個俄語單字(單字組)之前都有對應的粗體首字母,而英文單字則印在公共列表中。索引的所有部分(所有語言)可以以類似的方式列印嗎?
我透過將egreg的答案中的命令更改\makeindex
為:
\makeindex [options = -L russian -C utf8 -M latin-alph.xdy]
在這裡,為了使該命令有效,您應該將-enable-write18
金鑰傳遞給 pdfLaTeX。或者,您可以手動運行texindy並將-M latin-alph.xdy
密鑰傳遞給它。
這裡的latin-alph.xdy
文件應該是這樣的:
(define-letter-groups
("a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m"
"n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"))
(require
"rules/latin-tolower.xdy")
(use-rule-set
:run 0
:rule-set ("latin-tolower"))
(markup-letter-group
:open-head "~n~n \textbf {\Large "
:close-head "}~n \nopagebreak"
:capitalize)
結果是:
答案3
好的,謝謝,現在可以了!但是,索引的英文和俄文部分存在一些差異。我的意思是每個俄語單字(單字組)之前都有對應的粗體首字母,而英文單字則印在公共列表中。索引的所有部分(所有語言)可以以類似的方式列印嗎?
只是還有一項改進。您可以使用這個簡單的解決方案。
(require "lang/english/utf8.xdy")
(require "lang/russian/utf8.xdy")
(define-sort-rule-orientations (forward backward forward forward))
(use-rule-set
:run 0
:rule-set (
"en-alphabetize"
"ru-alphabetize"
"en-ignore-special"
"ru-ignore-special"
)
)
(use-rule-set
:run 1
:rule-set (
"en-resolve-diacritics"
"ru-resolve-diacritics"
"en-ignore-special"
"ru-ignore-special"
)
)
(use-rule-set
:run 2
:rule-set (
"en-resolve-case"
"ru-resolve-case"
"en-ignore-special"
"ru-ignore-special"
)
)
(use-rule-set
:run 3
:rule-set (
"en-resolve-special"
"ru-resolve-special"
)
)
將此代碼儲存到multilingual.xdy
.並運行:
texindy -C utf8 -M multilingual.xdy -o you-paper.ind you-paper.idx
注意:您不應該將語言傳遞給texindy
(ie -L russian
.),因為multilingual.xdy
包含兩種語言的描述。
\makeindex [options = -L russian -C utf8 -M latin-alph.xdy]
如果您願意,imakeidx
請使用程式碼
\makeindex [options = -C utf8 -M multilingual.xdy]
順便說一句,您可以更改排序順序。只需交換 中的語言指令即可rule-sets
。