러시아어 단어 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
이것은 Index에 러시아어 단어가 포함된 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를 사용하면 언어의 모든 문제를 해결할 수 있다고 생각했습니다. 올바른 정렬로 러시아어 색인을 만드는 방법: 내 경우에는 дерево, часть, электрон?
답변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
네, 감사합니다. 이제 작동합니다! 단, Index의 영어 부분과 러시아어 부분은 약간의 차이가 있습니다. 즉, 각 러시아어 단어(단어 그룹)에는 앞에 굵은 글씨로 표시된 첫 글자가 있고, 영어 단어는 공통 목록에 인쇄되어 있습니다. 색인의 모든 부분(모든 언어)을 비슷한 방식으로 인쇄할 수 있습니까?
\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
네, 감사합니다. 이제 작동합니다! 단, Index의 영어 부분과 러시아어 부분은 약간의 차이가 있습니다. 즉, 각 러시아어 단어(단어 그룹)에는 앞에 굵은 글씨로 표시된 첫 글자가 있고, 영어 단어는 공통 목록에 인쇄되어 있습니다. 색인의 모든 부분(모든 언어)을 비슷한 방식으로 인쇄할 수 있습니까?
한 가지만 더 개선하면 됩니다. 이 간단한 솔루션을 사용할 수 있습니다.
(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
.