ロシア語の索引の作成と整理

ロシア語の索引の作成と整理

ロシア語の単語で索引を作成しようとしています。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 が生成されますが、それらは間違った方法で並べ替えられています。file.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} などに従ってインデックスを作成することだとわかりました。utf8 エンコーディングと xindy を使用すれば、言語に関するすべての問題を解決できると思いました。私の場合、дерево、часть、елеkтрон を正しく並べ替えてロシア語のインデックスを作成するにはどうすればよいでしょうか?

答え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

わかりました。ありがとうございます。これでうまくいきました。ただし、索引の英語部分とロシア語部分には若干の違いがあります。つまり、ロシア語の各単語 (単語のグループ) は対応する最初の文字が太字で表示され、英語の単語は共通のリストに印刷されます。索引のすべての部分 (すべての言語) を同じように印刷できますか?

\makeindex私は、egreg の回答のコマンドを次のように変更することでこれを解決しました。

\makeindex [options = -L russian -C utf8 -M latin-alph.xdy]

このコマンドが機能するには、-enable-write18pdfLaTeX にキーを渡す必要があります。または、-M latin-alph.xdyキーを渡して texindy を手動で実行することもできます。

ここで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(つまり)。-L russianmultilingual.xdy

\makeindex [options = -L russian -C utf8 -M latin-alph.xdy]

imakeidxコードをご希望の場合は

\makeindex [options = -C utf8 -M multilingual.xdy]

結果はラテン語優先のソート順になります。 multilingual.xdyの結果

ちなみに、並び替えの順序は変更できます。 の言語指示を入れ替えるだけですrule-sets

関連情報