I am trying to customise my index, based on this initial question. As i later found out, hyperref and xindy do not play nice if cross references are involved. Which is why I tried to follow this question which disables hyperref for indexin, and builds the links itself from the style file.
While I have some issues with the stylefile and links not working that is another question.
I am interested in why my formatting breaks: I would like pagenumbers to be right aligned, which they are except for the last entry of every lettergroup where the line extends slighlty more to the right.
Why is that/how do I fix this? (I assume i might do things incorrectly in the markup-letter-group at the bottom of the xindy file, as that is the homebrew part)
%pdflatex %xindy index.idx -M indexStyle -L english -C utf8 %pdflatex \documentclass{article} \usepackage{filecontents} \begin{filecontents*}{indexStyle.xdy} (define-location-class "arabic-page-numbers" ("arabic-numbers") :min-range-length 2) (define-attributes (("definition" "usage" "default" "hyperpage"))) (define-crossref-class "see") (markup-crossref-list :class "see" :open "\seelinkk{" :sep "; " :close "}{}") (define-crossref-class "seealso") (markup-crossref-layer-list :sep ", ") (markup-crossref-list :class "seealso" :open "\seealsolinkk{" :sep "; " :close "}{}") (define-crossref-class "hyperindexformat") (markup-crossref-list :class "hyperindexformat" :open "\hyperindexformat{" :sep "; " :close "}{}") (define-location-class-order ( "arabic-page-numbers" "see" "seealso")) (markup-index :open "~n\begin{theindex} \providecommand*\lettergroupDefault[1]{} \providecommand*\lettergroup[1]{% \par\textbf{#1}\par \nopagebreak } \def\tedIDXlvlZero{} \def\tedIDXlvlOne{} \def\tedIDXlvlTwo{} \newcommand{\tedSetter}[1]{ \if\tedLevel0 \def\tedIDXlvlZero{#1} \else{ \if\tedLevel1 \def\tedIDXlvlOne{#1} \else \def\tedIDXlvlTwo{#1} \fi }\fi } \def\tedLevel{0} \newcommand{\buildlinktargett}[1]{% \if\tedLevel0% index:#1% \else{% \if\tedLevel1% index:\tedIDXlvlZero, #1% \else% % \ifx\tedLevel\tedIDXlvlTwo %implicit% index:\tedIDXlvlZero, \tedIDXlvlOne, #1% \fi% }\fi% } \newcommand{\targetindexentryy}[1]{\tedSetter{#1}\hypertarget{\buildlinktargett{#1}}{#1}} \newcommand{\seelinkk}[1]{\see{\hyperlink{index:#1}{#1}}} \newcommand{\seealsolinkk}[1]{\seealso{\hyperlink{index:#1}{#1}}} ~n" :close "~n~n\end{theindex}~n" :tree) (markup-indexentry :open "~n \def\tedLevel{0} \item " :depth 0) (markup-indexentry :open "~n \def\tedLevel{1} \subitem " :depth 1) (markup-indexentry :open "~n \def\tedLevel{2} \subsubitem " :depth 2) (markup-locref-list :sep ", ") (markup-locclass-list :open "\dotfill " :close "" ) ;; :sep ", " (markup-locref :open "\hyperpage{" :close "}") (markup-locref :open "\hyperpage{" :close "}" :attr "hyperpage") (markup-keyword-list :open "\targetindexentryy{" :close "}" ) ;;;(require "lang/english/utf8.xdy") (markup-letter-group :open-head "~n~n \vspace{1cm} {\hfill\bf " :close-head "\hfill}" :capitalize) \end{filecontents*} \usepackage[xindy, nonewpage]{imakeidx} %nonewpage needed for index entries after \printindex \makeindex[program=truexindy, intoc, options={-M indexStyle -L english -C utf8}] \usepackage[hyperindex=false]{hyperref} \begin{document} Hello some useless text.\clearpage \index{foo} \index{foo!bar} \index{bar} \index{cat} \index{carbon} \index{combobreaker} \index{join} \index{join!hash} \index{hash join|see{join, hash}} \printindex \end{document} 