Xindy가 키워드를 제대로 정렬하지 않습니다.

Xindy가 키워드를 제대로 정렬하지 않습니다.

국제 음성 알파벳(대부분 라틴 소문자로 구성되어 있지만 추가 항목이 있음)을 사용하는 항목으로 색인을 준비 중입니다. 원하는 정렬 순서를.xdy . xindy가 색인을 준비하면 그룹화가 지정된 순서로 나타납니다. 예를 들어 'ʌ' 항목은 'a' 항목 앞에 표시됩니다. 그러나 키를 정렬할 때는 기본 정렬 순서가 적용됩니다.~ 후에대신에 아아~ 전에. (아래 코드에 나타나는 정렬 순서를 복제했습니다.) 추가 정렬 규칙을 지정해야 합니까?

xelatex
xindy -I latex -o xindy-ipa-sorting.ind -M ipa-alphabet xindy-ipa-sorting.idx
xelatex

xindy-ipa-sorting.tex:

\documentclass{book}
\usepackage{polyglossia}
\setmainfont{Times New Roman}
\usepackage{makeidx,lipsum}
\makeindex
\begin{document}
\lipsum[1]

\index{ʌa}
\index{ʌʌ}

\index{aa}
\index{aʌ}

\printindex
\end{document}

ipa.xdy(기본이 답변):

;; xindy style file for an index with extended alphabet

(define-attributes (("default" "textbf" "textit" "hyperpage")))

;; "see" and "see also"

(define-crossref-class "see")
(markup-crossref-list :class "see" :open "\see{" :sep "; " :close "}{}")
(define-crossref-class "seealso")
(markup-crossref-list :class "seealso" :open "\seealso{" :sep "; " :close "}{}")

(markup-crossref-layer-list :sep ", ")

(require "base/numeric-sort.xdy")

(define-location-class "arabic-page-numbers" ("arabic-numbers"))
(define-location-class "roman-page-numbers"  ("roman-numbers-lowercase"))
(define-location-class "Roman-page-numbers"  ("roman-numbers-uppercase"))
(define-location-class "alpha-page-numbers"  ("alpha"))
(define-location-class "Alpha-page-numbers"  ("ALPHA"))

(define-location-class-order ("roman-page-numbers"
                  "Roman-page-numbers"
                  "arabic-page-numbers"
                  "alpha-page-numbers"
                  "Alpha-page-numbers"
                  "see"
                  "seealso"))

(require "lang/english/utf8.xdy")

(define-alphabet "latin-ipa"
("ʌ" "a" "b" "d" "dʒ" "e" "ɛ" "f" "ɡ" "ɣ" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "ʃ" "t" "tʃ" "u" "ʊ" "w" "x" "z" "ʒ" "ʔ"))
(define-letter-groups
("ʌ" "a" "b" "d" "dʒ" "e" "ɛ" "f" "ɡ" "ɣ" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "ʃ" "t" "tʃ" "u" "ʊ" "w" "x" "z" "ʒ" "ʔ"))

(define-letter-group "ʌ" :before "a")
(define-letter-group "dʒ" :after "d" :before "e")
(define-letter-group "ɛ" :after "e" :before "f")
(define-letter-group "ɣ" :after "ɡ" :before "h")
(define-letter-group "ʃ" :after "s" :before "t")
(define-letter-group "tʃ" :after "t" :before "u")
(define-letter-group "ʊ" :after "u" :before "w")
(define-letter-group "ʒ" :after "z" :before "ʔ")
(define-letter-group "ʔ" :after "ʒ" )

;; =======================
;; merge rules
;; =======================

;; LaTeX and TeX conventions

(merge-rule "\\LaTeXe *" "LaTeX2e" :eregexp :again)
(merge-rule "\\BibTeX *" "BibTeX" :eregexp :again)
(merge-rule "\\AmSTeX *" "AmSTeX" :eregexp :again)
(merge-rule "\\AmSLaTeX *" "AmSLaTeX" :eregexp :again)
(merge-rule "\\XeT *" "XeT" :eregexp :again)

(require "base/tex.xdy")

(markup-locref :open "\textbf{" :close "}" :attr "textbf")
(markup-locref :open "\textit{" :close "}" :attr "textit")
(markup-locref :open "\hyperpage{" :close "}" :attr "hyperpage")

;; =======================
;; sort rules
;; =======================

;; list pali capitals under pali lowercase

(sort-rule "g" "ɡ")

;;(sort-rule "Ā" "ā")
;;(sort-rule "Ṃ" "ṃ")
;;(sort-rule "Ī" "ī")
;;(sort-rule "Ñ" "ñ")

;; list latin capitals under latin lowercase

;;(sort-rule "A" "a")
;;(sort-rule "B" "b")
;;(sort-rule "C" "c")
;;(sort-rule "D" "d")
;;(sort-rule "E" "e")
;;(sort-rule "F" "f")
;;(sort-rule "G" "g")
;;(sort-rule "H" "h")
;;(sort-rule "I" "i")
;;(sort-rule "J" "j")
;;(sort-rule "K" "k")
;;(sort-rule "L" "l")
;;(sort-rule "M" "m")
;;(sort-rule "N" "n")
;;(sort-rule "O" "o")
;;(sort-rule "P" "p")
;;(sort-rule "Q" "q")
;;(sort-rule "R" "r")
;;(sort-rule "S" "s")
;;(sort-rule "T" "t")
;;(sort-rule "U" "u")
;;(sort-rule "V" "v")
;;(sort-rule "W" "w")
;;(sort-rule "X" "x")
;;(sort-rule "Y" "y")
;;(sort-rule "Z" "z")

;; ======================
;; markup rules
;; ======================

(require "base/page-ranges.xdy")

(markup-index :open
"\begin{theindex}
  \providecommand*\lettergroupDefault[1]{}
  \providecommand*\lettergroup[1]{%
      \par\textbf{#1}\par
      \nopagebreak
  }
"
          :close "~n~n\end{theindex}~n"
          :tree)

(markup-indexentry :open "~n  \item "           :depth 0)
(markup-indexentry :open "~n    \subitem "      :depth 1)
(markup-indexentry :open "~n      \subsubitem " :depth 2)

(markup-locclass-list :open ", " :sep ", ")
(markup-locref-list   :sep ", ")

;; letter group markup

(markup-letter-group-list :sep "~n~n  \indexspace~n")

(markup-letter-group :open-head "~n  \lettergroupDefault{" :close-head "}" :group "default")
(markup-letter-group :open-head "~n  \lettergroup{" :close-head "}")

답변1

키워드 정렬 순서를 변경하려면 새로운 언어를 정의해야 한다는 사실이 밝혀졌습니다. 파일에 새로운 문자 그룹을 정의하는 것만으로는 충분하지 않습니다 .xdy. (그러나 일단 새 언어를 정의하면 문자 그룹화가 무료로 제공되므로 그게 중요합니다.)

나는 에 설명된 절차를 따랐다.이 답변, 베트남어의 경우. 하지만 여기에 내 코드를 포함할 예정입니다. 베트남 발음 구별 부호보다 따르기가 조금 더 쉬울 수 있고 추가 단계가 utf8-lang.xdy새로운 것이기 때문입니다. 답변 xindy-make-rules-0.2을 다운로드하여 추출한 지점부터 시작하여 ...

디렉터리 에 다음과 같은 내용으로 xindy-make-rules-0.2/alphabets라는 새 폴더를 만들었습니다 .ipautf8.pl.in

#!/usr/bin/perl

$language = "IPA";
$prefix = "ipa";
$script = "latin";

$alphabet = [
['ʌ',  ['ʌ']],
['a',  ['a']],
['b',  ['b']],
['d',  ['d']],
['dʒ',  ['dʒ']],
['e',  ['e']],
['ɛ',  ['ɛ']],
['f',  ['f']],
['ɡ',  ['ɡ', 'g']],
['ɣ',  ['ɣ']],
['h',  ['h']],
['i',  ['i']],
['j',  ['j']],
['k',  ['k']],
['l',  ['l']],
['m',  ['m']],
['n',  ['n']],
['o',  ['o']],
['p',  ['p']],
['q',  ['q']],
['r',  ['r']],
['s',  ['s']],
['ʃ',  ['ʃ']],
['t',  ['t']],
['tʃ',  ['tʃ']],
['u',  ['u']],
['ʊ',  ['ʊ']],
['w',  ['w']],
['x',  ['x']],
['z',  ['z']],
['ʒ',  ['ʒ']],
['ʔ',  ['ʔ']],
];

$sortcase = 'Aa';
#$sortcase = 'aA';

@special = ('?', '!', '.', 'letters', '-', '\'', '{', '}');

do 'make-rules.pl';

(이것은 위의 MWE 범위를 벗어나지만 이해 가능한 방식으로 생각합니다.)

나는 (7번째 줄) 내 설치 위치를 반영 xindy-make-rules-0.2/alphabets/Makefile하도록 편집했습니다 (내 경우에는 ).INSTDIRxindy"D:\Program Files (x86)\MiKTeX 2.9\xindy\modules\lang"

그런 다음 디렉토리에서 xindy-make-rules-0.2/alphabets다음 명령을 실행했습니다.

make utf8
make install

참고: 당시에는 이것이 효과가 있었지만 최근에 동일한 명령을 시도했을 때 목록 (내 복사본의 66번째 줄) myalphabet/utf8.xdy \에 포함될 때까지 파일이 빌드되지 않았습니다.XDYSUTF8xindy-make-rules-0.2/alphabets/Makefile

(저는 Windows 사용자이기 때문에 를 사용하여 이러한 명령을 실행했습니다 msys. 을 사용하면 mingw32-make작동하지 않았습니다.)

어떤 이유로든 스크립트는 내가 중요하다고 생각하는 파일을 생성하지 않습니다. 그래서 xindy/modules/lang/ipa디렉토리에 다음과 같은 파일을 생성해야 했습니다 utf8-lang.xdy.

(require "lang/ipa/utf8.xdy")
(define-sort-rule-orientations (forward backward forward forward))
(use-rule-set :run 0
          :rule-set ("ipa-alphabetize" "ipa-ignore-special"))
(use-rule-set :run 1
          :rule-set ("ipa-resolve-diacritics" "ipa-ignore-special"))
(use-rule-set :run 2
          :rule-set ("ipa-resolve-case" "ipa-ignore-special"))
(use-rule-set :run 3
          :rule-set ("ipa-resolve-special"))

이 파일에는 ipa.xdy위의 질문에 제공된 파일인 가 필요합니다.

ipa요약하면 이제 xindy modules/lang폴더(내 경우에는 )에 하위 폴더가 있어야 하며 해당 폴더에는 , 및 "D:\Program Files (x86)\MiKTeX 2.9\xindy\modules\lang"3개의 파일이 포함되어야 합니다 .utf8.pl.inutf8.xdyutf8-lang.xdy

완료되면 xindy다음과 같이 호출할 수 있습니다.

xindy -L IPA -I latex -o example.ind -M ipa example.idx

ipa.xdy위의 MWE에서 제거된 버전입니다. 이제 파일은 기본 옵션과 마크업 명령만 제공합니다. IPA 알파벳에는 특별한 것이 없습니다.

;; xindy style file for an index with extended alphabet

(define-attributes (("default" "textbf" "textit" "hyperpage")))

;; "see" and "see also"

(define-crossref-class "see")
(markup-crossref-list :class "see" :open "\see{" :sep "; " :close "}{}")
(define-crossref-class "seealso")
(markup-crossref-list :class "seealso" :open "\seealso{" :sep "; " :close "}{}")

(markup-crossref-layer-list :sep ", ")

(require "base/numeric-sort.xdy")

(define-location-class "arabic-page-numbers" ("arabic-numbers"))
(define-location-class "roman-page-numbers"  ("roman-numbers-lowercase"))
(define-location-class "Roman-page-numbers"  ("roman-numbers-uppercase"))
(define-location-class "alpha-page-numbers"  ("alpha"))
(define-location-class "Alpha-page-numbers"  ("ALPHA"))

(define-location-class-order ("roman-page-numbers"
                  "Roman-page-numbers"
                  "arabic-page-numbers"
                  "alpha-page-numbers"
                  "Alpha-page-numbers"
                  "see"
                  "seealso"))

;; =======================
;; merge rules
;; =======================

;; LaTeX and TeX conventions

(merge-rule "\\LaTeXe *" "LaTeX2e" :eregexp :again)
(merge-rule "\\BibTeX *" "BibTeX" :eregexp :again)
(merge-rule "\\AmSTeX *" "AmSTeX" :eregexp :again)
(merge-rule "\\AmSLaTeX *" "AmSLaTeX" :eregexp :again)
(merge-rule "\\XeT *" "XeT" :eregexp :again)

(require "base/tex.xdy")

(markup-locref :open "\textbf{" :close "}" :attr "textbf")
(markup-locref :open "\textit{" :close "}" :attr "textit")
(markup-locref :open "\hyperpage{" :close "}" :attr "hyperpage")

;; ======================
;; markup rules
;; ======================

(require "base/page-ranges.xdy")

(markup-index :open
"\begin{theindex}
  \providecommand*\lettergroupDefault[1]{}
  \providecommand*\lettergroup[1]{%
      \par\textbf{#1}\par
      \nopagebreak
  }
"
          :close "~n~n\end{theindex}~n"
          :tree)

(markup-indexentry :open "~n  \item "           :depth 0)
(markup-indexentry :open "~n    \subitem "      :depth 1)
(markup-indexentry :open "~n      \subsubitem " :depth 2)

(markup-locclass-list :open ", " :sep ", ")
(markup-locref-list   :sep ", ")

;; letter group markup

(markup-letter-group-list :sep "~n~n  \indexspace~n")

(markup-letter-group :open-head "~n  \lettergroupDefault{" :close-head "}" :group "default")
(markup-letter-group :open-head "~n  \lettergroup{" :close-head "}")

관련 정보