Estoy preparando un índice con entradas que utilizan el Alfabeto Fonético Internacional (que consta en gran medida de letras latinas minúsculas, pero con adiciones. He especificado el orden de clasificación deseado en un .xdy
archivo. Cuando xindy prepara el índice, las agrupaciones aparecen en el orden especificado Por ejemplo, las entradas 'ʌ' aparecen antes de las entradas 'a', pero al ordenar las claves, se produce el orden de clasificación predeterminado: aparece aʌ.despuésaa en lugar deantes. (He duplicado el orden de clasificación que aparece en el código siguiente). ¿Necesito especificar alguna regla de clasificación adicional?
xelatex
xindy -I latex -o xindy-ipa-sorting.ind -M ipa-alphabet xindy-ipa-sorting.idx
xelatex
xindy-ipa-clasificación.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 (basado enesta respuesta):
;; 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 "}")
Respuesta1
Resulta que cambiar el orden de clasificación de las palabras clave implica definir un nuevo idioma. No basta con definir nuevos grupos de letras en un .xdy
archivo. (Sin embargo, una vez que defines el nuevo idioma, obtienes las agrupaciones de letras de forma gratuita, así que eso es algo).
Seguí el procedimiento descrito enesta respuesta, para vietnamita. Sin embargo, voy a incluir mi código aquí, ya que podría ser un poco más fácil de seguir que los signos diacríticos vietnamitas y el paso de agregar utf8-lang.xdy
era nuevo. A partir del punto de la respuesta donde xindy-make-rules-0.2
se descargó y extrajo...
En el xindy-make-rules-0.2/alphabets
directorio creé una nueva carpeta llamada ipa
y luego creé utf8.pl.in
con este contenido:
#!/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';
(Esto va más allá del alcance de mi MWE anterior, pero lo pienso de una manera comprensible).
Edité xindy-make-rules-0.2/alphabets/Makefile
para que INSTDIR
(línea 7) reflejara la ubicación de mi xindy
instalación (en mi caso "D:\Program Files (x86)\MiKTeX 2.9\xindy\modules\lang"
).
Luego en el xindy-make-rules-0.2/alphabets
directorio ejecuté estos comandos:
make utf8
make install
Nota: Aunque esto funcionó en ese momento, cuando probé los mismos comandos recientemente, no generó mi archivo hasta que lo incluí en myalphabet/utf8.xdy \
la XDYSUTF8
lista xindy-make-rules-0.2/alphabets/Makefile
(línea 66 de mi copia).
(Como soy usuario de Windows, ejecuté estos comandos usando msys
. Usar mingw32-make
no funcionó para mí).
Por alguna razón, el script no crea un archivo que considero crucial. Entonces, en el xindy/modules/lang/ipa
directorio, tuve que crear el archivo 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"))
Tenga en cuenta que este archivo requiere ipa.xdy
, que es el archivo proporcionado en la pregunta anterior.
Entonces, para resumir, ahora debería haber una subcarpeta llamada ipa
en la modules/lang
carpeta xindy (en mi caso "D:\Program Files (x86)\MiKTeX 2.9\xindy\modules\lang"
), y esa carpeta debería contener tres archivos: utf8.pl.in
, utf8.xdy
y utf8-lang.xdy
.
Una vez hecho esto, puedo invocar xindy
lo siguiente:
xindy -L IPA -I latex -o example.ind -M ipa example.idx
ipa.xdy
es una versión simplificada de mi MWE anterior. El archivo ahora solo proporciona las opciones básicas y los comandos de marcado. No hay nada específico del alfabeto 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 "}")