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 .xdy
Datei 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 .xdy
Datei 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.xdy
neu war. Beginnend an dem Punkt in der Antwort, an dem xindy-make-rules-0.2
heruntergeladen und extrahiert wurde ...
Ich habe in dem xindy-make-rules-0.2/alphabets
Verzeichnis einen neuen Ordner mit dem Namen erstellt und ihn dann mit diesem Inhalt ipa
erstellt :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/Makefile
so bearbeitet, dass INSTDIR
(Zeile 7) den Speicherort meiner xindy
Installation widerspiegelte (in meinem Fall "D:\Program Files (x86)\MiKTeX 2.9\xindy\modules\lang"
).
Dann habe ich im xindy-make-rules-0.2/alphabets
Verzeichnis 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 XDYSUTF8
Liste 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-make
hat bei mir nicht funktioniert.)
Aus irgendeinem Grund erstellt das Skript eine Datei nicht, die ich für entscheidend hielt. Also xindy/modules/lang/ipa
musste 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: ipa
Im modules/lang
Ordner 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 xindy
Folgendes aufrufen:
xindy -L IPA -I latex -o example.ind -M ipa example.idx
ipa.xdy
ist 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 "}")