I am trying to get Xindy work with Arabic. Everything works smoothly except for the final result where the index items are not aligned right to left and some letters are not in order. I couldn't solve the issue, and I appreciate your help. Here is an MWE:

\makeindex[title=\textarabic{فهرس اﻷسماء},program=xindy, columns=2]
\setotherlanguage[locale = tunisia]{arabic}
\newfontfamily\arabicfont[Script = Arabic]{Amiri}
\newfontfamily\ayafont[Script = Arabic, Mapping = arabicdigits]{Amiri}      
 \usepackage{multicols}     \usepackage{etoolbox}

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


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


The index style: test.xdy I applied to to the file is:

   (markup-index :open  "\begin{theindex}~n
          :close "~n~n\end{theindex}~n"
;;(define-crossref-class "see also")
;;(define-location-class "arabic-page-numbers"
;;   ("arabic-numbers") :min-range-length 1)

;;(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:

The command line after a first run of XeLaTex is:

xindy -L persian-variant3 -C utf8 -M numeric-sort -M latex -M latex-loc-fmts -M texindy -M test index-MWE.idx

I have received an answer to the 1st question from the French TeXnique.fr Thanks to @touhami. I updated the initial question to include the answer. The second question on the order of letters is solved by adding this line to the file text.xdy:

(define-letter-groups (""))

I am also replacing the line

(markup-range :sep"-")

by the line

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

Not sure if this is an elegant solution but it takes care the number shifts when you reference a page-range. I updated the test.xdy file.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.