Estou preparando um índice com entradas que usam o Alfabeto Fonético Internacional (que consiste principalmente em letras latinas minúsculas, mas com acréscimos. Especifiquei a ordem de classificação desejada em um .xdy
arquivo. Quando o xindy prepara o índice, os agrupamentos aparecem na ordem especificada . Por exemplo, as entradas 'ʌ' aparecem antes das entradas 'a', mas ao classificar as chaves, a ordem de classificação padrão ocorre: aʌ aparece.depoisah em vez deantes. (Dupliquei a ordem de classificação que aparece no código abaixo.) Preciso especificar alguma regra de classificação adicional?
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 (com base emesta resposta):
;; 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 "}")
Responder1
Acontece que alterar a ordem de classificação das palavras-chave envolve a definição de um novo idioma. Não é suficiente definir novos grupos de letras em um .xdy
arquivo. (No entanto, depois de definir o novo idioma, você obtém os agrupamentos de letras gratuitamente, então isso é alguma coisa.)
Eu segui o procedimento descrito emesta resposta, para vietnamitas. Entretanto, vou incluir meu código aqui, pois pode ser um pouco mais fácil de seguir do que os diacríticos vietnamitas, e a etapa de adição utf8-lang.xdy
era nova. Começando do ponto da resposta onde xindy-make-rules-0.2
foi baixado e extraído ...
No xindy-make-rules-0.2/alphabets
diretório criei uma nova pasta chamada ipa
e depois criei utf8.pl.in
com este conteúdo:
#!/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';
(Isso vai além do escopo do meu MWE acima, mas penso de uma forma compreensível.)
Editei xindy-make-rules-0.2/alphabets/Makefile
para que INSTDIR
(linha 7) refletisse o local da minha xindy
instalação (no meu caso "D:\Program Files (x86)\MiKTeX 2.9\xindy\modules\lang"
).
Então, no xindy-make-rules-0.2/alphabets
diretório, executei estes comandos:
make utf8
make install
Nota: Embora isso tenha funcionado na época, quando tentei os mesmos comandos recentemente, meu arquivo não foi compilado até que eu o incluísse myalphabet/utf8.xdy \
na XDYSUTF8
lista xindy-make-rules-0.2/alphabets/Makefile
(linha 66 da minha cópia).
(Como sou usuário do Windows, executei esses comandos usando msys
. Usar mingw32-make
não funcionou para mim.)
Por alguma razão, o script não cria um arquivo que considero crucial. Então, no xindy/modules/lang/ipa
diretório, tive que criar o arquivo 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"))
Observe que este arquivo requer ipa.xdy
, que é o arquivo fornecido na pergunta acima.
Então, para recapitular, agora deve haver uma subpasta chamada ipa
na modules/lang
pasta xindy (no meu caso "D:\Program Files (x86)\MiKTeX 2.9\xindy\modules\lang"
), e essa pasta deve conter três arquivos: utf8.pl.in
,,, utf8.xdy
e utf8-lang.xdy
.
Feito isso, posso invocar xindy
da seguinte forma:
xindy -L IPA -I latex -o example.ind -M ipa example.idx
ipa.xdy
é uma versão simplificada do meu MWE acima. O arquivo agora fornece apenas as opções básicas e os comandos de marcação. Não há nada específico para o 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 "}")