Je suis en train de travailler sur un index en utilisant xindy et indextools dans un fichier en langue arabe avec polyglossia.

Tout marche bien mais l'index est imprimé en mode LTR au lieu de RTL.

En plus, les lettres de l'alphabet arabe ne sont pas bien ordonnées.

Voici un exemple minimum, intitulé index-ex.tex :

Ouvrir dans l'éditeur Overleaf
\documentclass[12pt]{book}
\usepackage[xindy]{indextools}
\makeindex[title=\textarabic{فهرس اﻷسماء},program=xindy, columns=2]
\usepackage{polyglossia}
\setmainlanguage{french}
\setotherlanguage[locale = tunisia]{arabic}
\newfontfamily\arabicfont[Script = Arabic]{Amiri}
\newfontfamily\ayafont[Script = Arabic, Mapping = arabicdigits]{Amiri}

\begin{document}
\begin{Arabic}

خلافاَ للاعتقاد السائد فإن لوريم إيبسوم ليس نصاَ عشوائياً، بل إن له جذور في الأدب اللاتيني الكلاسيكي منذ العام 45 قبل الميلاد، مما يجعله أكثر من 2000 عام في القدم. قام البروفيسور "ريتشارد ماك لينتوك" (Richard McClintock) وهو  \index{أسيل}
\index{رجب}
\index{أولاد!جلال}
\index{مرشد}
\index{نجم}
\index{سراج}
\index{أولاد!احمد}
\index{علي}
\index{أولاد!حسن}
\index{زكريا}
\index{يحيى}

\index{بنات!نور}
\index{بنات!رغد}
\index{ياسمين}
\index{بنات!عائشة}
\index{فتيحة}
\index{ليلى}
\index{هاجر}

بروفيسور اللغة اللاتينية في جامعة هامبدن-سيدني في فيرجينيا بالبحث عن أصول كلمة لاتينية غامضة في نص لوريم إيبسوم وهي "consectetur"، وخلال تتبعه لهذه الكلمة في الأدب اللاتيني اكتشف المصدر الغير قابل للشك. فلقد اتضح أن كلمات نص لوريم إيبسوم تأتي من الأقسام 1.10.32 و 1.10.33 من كتاب "حول أقاصي الخير والشر''
\newpage
\index{فاطمة|seealso{علي}}
\index{علي}
 \index{أسيل}
\index{أمينة}
 (\textfrench{de Finibus Bonorum et Malorum}) للمفكر شيشيرون (\textfrench{Cicero}) والذي كتبه في عام 45 قبل الميلاد. هذا الكتاب هو بمثابة مقالة علمية مطولة في نظرية الأخلاق، وكان له شعبية كبيرة في عصر النهضة. السطر الأول من لوريم إيبسوم "\textfrench{Lorem ipsum dolor sit amet...}" يأتي من سطر في القسم 1.20.32 من هذا الكتاب.\index{آية}
 \index{بنات!نور}
\index{بنات!رغد}
\newpage
كذلك
\index{وائل}
\index{أسيل}
\index{أمينة}
\index{سمية}
\index{رجب|see{علي}}
\index{أولاد!احمد}

\printindex
\end{Arabic}
\end{document}

Voici la feuille de style test.xdy que j'évoque pour produire le fichier .ind :

Ouvrir dans l'éditeur Overleaf
(markup-index :open  "\begin{theindex}~n
 \providecommand*\lettergroupDefault[1]{}
 \providecommand*\lettergroup[1]{%
 \par}"
          :close "~n~n\end{theindex}~n"
          :tree)
(define-crossref-class "see also")
(define-location-class "arabic-page-numbers"
    ("arabic-numbers") :min-range-length 1)

(markup-locclass-list :open " : " :sep ", ")
;; delim_n <string>         ", "

(markup-locref-list   :sep "، ")

;; delim_r <string>         "--"

(markup-range :sep "-")

;; Local Variables:
;; mode: lisp
;; End:

Enfin, voici la commande xindy que j'utilise après une première compilation de XeLaTeX :

Ouvrir dans l'éditeur Overleaf
xindy -L persian-variant3 -C utf8 -M numeric-sort -M latex -M latex-loc-fmts -M texindy -M test index-ex.idx

Posée 15 Nov '19, 16:26

yadaddi's gravatar image

yadaddi
8115
Taux d'acceptation : 50%

Modifiée 15 Nov '19, 21:26

Pathe's gravatar image

Pathe ♦♦
7.5k38201251

1

Pour régler le problème de justification, il suffit d'ajouter

\usepackage{etoolbox} \AtBeginDocument{\patchcmd{\theindex}{\raggedright}{}{}{}}

Le problème des lettres non ordonnées est plus compliqué (peut-être pas, je ne sais pas pour sûr). En fait, c'est classique que les mots avec des lettres accentuées sont considérés comme des symboles, et donc ils se trouvent au début, avant tous les autres mots. Il me semble que xindy traite les mots commençant par Ya de la même manière. Une solution est d'intervenir manuellement lors de la version finale.

(16 Nov '19, 11:49) touhami touhami's gravatar image

Merci @touhami pour votre réponse. Ça a résolu le problème partiellement parce que les colonnes sont encore inversées.

Le problème est résolu avec l'ajout de la commande \usepackage{multicols} dans le préambule et en plaçant la commande \RTLmulticolcolumns avant la commande \printindex.

Voici donc l'ECM avec la solution :

Ouvrir dans l'éditeur Overleaf
\documentclass[12pt]{book}
\usepackage[xindy]{indextools}
\makeindex[title=\textarabic{فهرس اﻷسماء},program=xindy, columns=2]
\usepackage{polyglossia}
\setmainlanguage{french}
\setotherlanguage[locale = tunisia]{arabic}
\newfontfamily\arabicfont[Script = Arabic]{Amiri}
\newfontfamily\ayafont[Script = Arabic, Mapping = arabicdigits]{Amiri}      
\usepackage{multicols}     
\usepackage{etoolbox}
\AtBeginDocument{\patchcmd{\theindex}{\raggedright}{}{}{}}
\begin{document}
\begin{Arabic}

خلافاَ للاعتقاد السائد فإن لوريم إيبسوم ليس نصاَ عشوائياً، بل إن له جذور في الأدب اللاتيني الكلاسيكي منذ العام 45 قبل الميلاد، مما يجعله أكثر من 2000 عام في القدم. قام البروفيسور "ريتشارد ماك لينتوك" (Richard McClintock) وهو  \index{أسيل}
\index{رجب}
\index{أولاد!جلال}
\index{مرشد}
\index{نجم}
\index{سراج}
\index{أولاد!احمد}
\index{علي}
\index{أولاد!حسن}
\index{زكريا}
\index{يحيى}

\index{بنات!نور}
\index{بنات!رغد}
\index{ياسمين}
\index{بنات!عائشة}
\index{فتيحة}
\index{ليلى}
\index{هاجر}

بروفيسور اللغة اللاتينية في جامعة هامبدن-سيدني في فيرجينيا بالبحث عن أصول كلمة لاتينية غامضة في نص لوريم إيبسوم وهي "consectetur"، وخلال تتبعه لهذه الكلمة في الأدب اللاتيني اكتشف المصدر الغير قابل للشك. فلقد اتضح أن كلمات نص لوريم إيبسوم تأتي من الأقسام 1.10.32 و 1.10.33 من كتاب "حول أقاصي الخير والشر''
\newpage
\index{فاطمة|seealso{علي}}
\index{علي}
 \index{أسيل}
\index{أمينة}
 (\textfrench{de Finibus Bonorum et Malorum}) للمفكر شيشيرون (\textfrench{Cicero}) والذي كتبه في عام 45 قبل الميلاد. هذا الكتاب هو بمثابة مقالة علمية مطولة في نظرية الأخلاق، وكان له شعبية كبيرة في عصر النهضة. السطر الأول من لوريم إيبسوم "\textfrench{Lorem ipsum dolor sit amet...}" يأتي من سطر في القسم 1.20.32 من هذا الكتاب.\index{آية}
 \index{بنات!نور}
\index{بنات!رغد}
\newpage
كذلك
\index{وائل}
\index{أسيل}
\index{أمينة}
\index{سمية}
\index{رجب|see{علي}}
\index{أولاد!احمد}

\RTLmulticolcolumns
\printindex
\end{Arabic}
\end{document}

En utlisant le fichier style suivant, le problème de la place de la lettre ya', ainsi que le problème de l'inversement des pages quand il s'agit d'intervalle de pages, tous deux, sont résolus. Je suis sûr qu'il y a des solutions plus élégantes. Mais, pour le moment cela marche pour moi. Voici donc le fichier test.xdy. (markup-index :open "begin{theindex}~n providecommandlettergroupDefault[1]{} providecommandlettergroup[1]{% par}" :close "~n~nend{theindex}~n" :tree) ;;(define-crossref-class "see also") ;;(define-location-class "arabic-page-numbers" ;; ("arabic-numbers") :min-range-length 1)

Ouvrir dans l'éditeur Overleaf
;;(markup-letter-group-list :sep "~n\indexspace")
(markup-locclass-list :open " : " :sep "، ")
;; delim_n <string>         ", "

(markup-locref-list   :sep "، ")

;; delim_r <string>         "--"

(markup-range :sep"\hspace{-.2cm}\textfrench{--}")

;; no letter groups at the beginning of each new set of letters
(define-letter-groups (""))
;; location list separators

(markup-locref-list :sep "، ")
;;(markup-range :close "" "\range{" :sep "}{" :open "}")

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

;; Local Variables:
;; mode: lisp
;; End:
Lien permanent

Publiée 16 Nov '19, 19:57

yadaddi's gravatar image

yadaddi
8115
Taux d'acceptation : 50%

Modifiée 18 Nov '19, 16:34

Oui, bravo, j'ai oublié cette détail.

(16 Nov '19, 20:23) touhami touhami's gravatar image

@yadaddi : n'hésitez pas à poster un ECM illustrant la solution trouvée. Ce sera très utile pour de futurs lecteurs confrontés à un problème analogue.

(16 Nov '19, 21:07) Pathe ♦♦ Pathe's gravatar image

@yadaddi : merci pour l'exemple complet minimal. Votre souci d'autrui vous honore.

Pourriez-vous signaler que votre problème est résolu en cliquant sur l'icône « à cocher », en haut à gauche de votre réponse ?

(17 Nov '19, 02:03) Pathe ♦♦ Pathe's gravatar image
Votre réponse
(dés)activer l'aperçu

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.