俄語索引的製作和排序

俄語索引的製作和排序

嘗試用俄語單字建立索引,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]

結果將採用拉丁語優先的排序順序。 多語言結果.xdy

順便說一句,您可以更改排序順序。只需交換 中的語言指令即可rule-sets

相關內容