ロシア語の単語で索引を作成しようとしています。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-write18
pdfLaTeX にキーを渡す必要があります。または、-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 russian
multilingual.xdy
\makeindex [options = -L russian -C utf8 -M latin-alph.xdy]
imakeidx
コードをご希望の場合は
\makeindex [options = -C utf8 -M multilingual.xdy]
ちなみに、並び替えの順序は変更できます。 の言語指示を入れ替えるだけですrule-sets
。