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}