I've created index with makeidx
package. It works. What really need is to print the first letter above every group of keys (i.e. referring to the image I want to print the red letter, that I have manually inserted).
[Tex/LaTex] package makeidx: print first letter for each group of keys
indexing
Related Solutions
In order to use section numbers instead of page numbers it is necessary to redefine the way, the index entry is written to \jobname.idx
. That is basically easy, if the package imakeidx
is used.
In its manual, imakeidx
the author writes, that \imki@wrindexentry
should be redefined to apply for other styles. Looking into the package, there is a similar command used with \thepage
as argument, so redefined it, using \thesection
.
However, makeindex
as external processor complains about the new format if \thesection
writes its numbers as 1.1
etc., i.e. with dots. Using xindy
solves this problem, by applying a new alphabet or location-class, this is done in sectionindex_xindy.xdy
, as well as removing the ,
separator and inserting -----
instead.
Content of sectionindex_xindy.xdy
(markup-locclass-list :open " ----- " :sep "")
( define-location-class "numericsections"
("arabic-numbers" :sep "." "arabic-numbers"))
( define-location-class "numericchapteralphasections"
("arabic-numbers" :sep "." "ALPHA"))
\documentclass[paper=a4,12pt]{scrbook}
\usepackage{letltxmacro}
\usepackage[xindy]{imakeidx}
%\usepackage{hyperref}% Leads to linking to wrong positions%
\makeatletter
% Global redefinition of indexentry to section instead of page%
\renewcommand{\imki@wrindexentrysplit}[3]{%
\expandafter\protected@write\csname#1@idxfile\endcsname{}%
{\string\indexentry{#2}{\thesection}}%
}%
\LetLtxMacro{\LaTeXStandardFigure}{\figure}
\let\LaTeXStandardEndFigure\endfigure%
\renewenvironment{figure}[1][tpb]{%
%redefine the index write command to use figure number instead of section number
\renewcommand{\imki@wrindexentrysplit}[3]{%
\expandafter\protected@write\csname##1@idxfile\endcsname{}%
{\string\indexentry{##2}{\thefigure}}
}%
\LaTeXStandardFigure[#1]%
}{%
\LaTeXStandardEndFigure%
}%
\LetLtxMacro{\LaTeXStandardTable}{\table}
\let\LaTeXStandardEndTable\endtable%
\renewenvironment{table}[1][tpb]{%
%redefine the index write command to use table number instead of section number
\renewcommand{\imki@wrindexentrysplit}[3]{%
\expandafter\protected@write\csname##1@idxfile\endcsname{}%
{\string\indexentry{##2}{\thetable}}
}%
\LaTeXStandardTable[#1]%
}{%
\LaTeXStandardEndTable%
}%
\makeatother
\makeindex[options=-M sectionindex_xindy.xdy]
\renewcommand{\thefigure}{\arabic{chapter}.\arabic{figure}}%
\renewcommand{\thesection}{\arabic{chapter}.\Alph{section}}%
\renewcommand{\thetable}{\arabic{chapter}.\arabic{table}}%
\begin{document}
\listoffigures
\listoftables
\chapter{First}
\begin{figure}
\caption{A first figure with index entry, say Figure\index{Figure!First}}
\end{figure}
\section{First section of chapter~\arabic{chapter}}
Here is a table (well, the environment actually)
\begin{table}
\centering
\begin{tabular}{lll}
\hline
A & dummy & table \tabularnewline
\hline
\end{tabular}
\caption{A table with some index entry in it: \index{Table}{First}}
\end{table}
See also the keyword Index\index{Index}
\chapter{Two}
\section{First}
Index\index{Index} and its usage\index{usage}
\begin{figure}
\caption{A dummy figure with an index entry, say DummyFigure\index{Figure!DummyFigure}}
\end{figure}
\printindex
\end{document}
In order to make this work for figures/tables, I just redefined the command again within wrappers for figure
and table
environment. You have redefine \thefigure
and \thetable
explicitly, since it seems, that they introduce a trailing \relax
command just before the figure/table number.
Please note, that this does not work correctly with hyperlinks so far,regarding the figure/table index entries.
Enabling --shell-escape is mandatory.
Best Answer
According to How to create capital letter for index you would require the following in a file
test.ist
(ortest.mst
*):Then when you run
makeindex
, you need to use the-s
option to specify this style file (assuming your document is calledtest.tex
):The first flag set allows for the creation of the header (a letter). The second
prefix
and thirdsuffix
flag wraps the header contents to obtain the appropriate formatting ({\textsf{\color{red}...}
in this case).* According to
makeindex
man page, "If exactly one input file was given and no explicit style file was specified using-s
,makeindex
uses a file with the extension.mst
as default style file (when present)."