러시아어 색인 만들기 및 정렬

러시아어 색인 만들기 및 정렬

러시아어 단어 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-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

네, 감사합니다. 이제 작동합니다! 단, 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]

결과는 라틴어 우선 정렬 순서입니다. multilingual.xdy의 결과

그런데 정렬 순서를 변경할 수 있습니다. 에서 언어 지침을 바꾸십시오 rule-sets.

관련 정보