Xindy sortiert Schlüsselwörter nicht richtig

Xindy sortiert Schlüsselwörter nicht richtig

Ich bereite einen Index mit Einträgen vor, die das Internationale Phonetische Alphabet verwenden (das größtenteils aus lateinischen Kleinbuchstaben besteht, aber mit Zusätzen). Ich habe meine gewünschte Sortierreihenfolge in einer .xdyDatei angegeben. Wenn xindy den Index vorbereitet, erscheinen die Gruppierungen in der von mir angegebenen Reihenfolge. Beispielsweise erscheinen die 'ʌ'-Einträge vor den 'a'-Einträgen. Aber beim Sortieren von Schlüsseln tritt die Standardsortierreihenfolge auf: aʌ erscheintnachaa stattVor. (Ich habe die Sortierreihenfolge dupliziert, die im Code unten angezeigt wird.) Muss ich weitere Sortierregeln angeben?

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

xindy-ipa-sortierung.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 (basierend aufdiese Antwort):

;; 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 "}")

Antwort1

Es stellt sich heraus, dass das Ändern der Sortierreihenfolge der Schlüsselwörter das Definieren einer neuen Sprache erfordert. Es reicht nicht aus, neue Buchstabengruppen in einer .xdyDatei zu definieren. (Sobald Sie die neue Sprache definieren, erhalten Sie die Buchstabengruppen jedoch kostenlos, das ist also schon mal etwas.)

Ich habe das Verfahren befolgt, das indiese Antwort, für Vietnamesisch. Ich werde meinen Code jedoch hier einfügen, da er möglicherweise etwas einfacher zu verstehen ist als die vietnamesischen diakritischen Zeichen und der Schritt des Hinzufügens utf8-lang.xdyneu war. Beginnend an dem Punkt in der Antwort, an dem xindy-make-rules-0.2heruntergeladen und extrahiert wurde ...

Ich habe in dem xindy-make-rules-0.2/alphabetsVerzeichnis einen neuen Ordner mit dem Namen erstellt und ihn dann mit diesem Inhalt ipaerstellt :utf8.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';

(Dies geht über den Rahmen meines obigen MWE hinaus, ist aber, wie ich denke, verständlich.)

Ich habe es xindy-make-rules-0.2/alphabets/Makefileso bearbeitet, dass INSTDIR(Zeile 7) den Speicherort meiner xindyInstallation widerspiegelte (in meinem Fall "D:\Program Files (x86)\MiKTeX 2.9\xindy\modules\lang").

Dann habe ich im xindy-make-rules-0.2/alphabetsVerzeichnis diese Befehle ausgeführt:

make utf8
make install

Hinweis: Obwohl dies damals funktionierte, wurde meine Datei nicht erstellt, als ich vor Kurzem dieselben Befehle ausprobierte, bis ich sie in (Zeile 66 meiner Kopie) myalphabet/utf8.xdy \unter der XDYSUTF8Liste einfügte.xindy-make-rules-0.2/alphabets/Makefile

(Da ich ein Windows-Benutzer bin, habe ich diese Befehle mit ausgeführt msys. Die Verwendung von mingw32-makehat bei mir nicht funktioniert.)

Aus irgendeinem Grund erstellt das Skript eine Datei nicht, die ich für entscheidend hielt. Also xindy/modules/lang/ipamusste ich im Verzeichnis die Datei erstellen 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"))

Beachten Sie, dass diese Datei erfordert ipa.xdy. Dabei handelt es sich um die Datei, die in der obigen Frage bereitgestellt wurde.

Um es noch einmal zusammenzufassen: ipaIm modules/langOrdner xindy sollte jetzt ein Unterordner mit dem Namen (in meinem Fall "D:\Program Files (x86)\MiKTeX 2.9\xindy\modules\lang") vorhanden sein, und dieser Ordner sollte drei Dateien enthalten: utf8.pl.in, utf8.xdy, und utf8-lang.xdy.

Wenn das erledigt ist, kann ich xindyFolgendes aufrufen:

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

ipa.xdyist eine abgespeckte Version meines MWE oben. Die Datei enthält jetzt wirklich nur die grundlegenden Optionen und die Markup-Befehle. Es gibt nichts Spezifisches für das IPA-Alphabet.

;; 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 "}")

verwandte Informationen