In the book class there's an internal macro \@chapter
that's adding the space by this line:
\addtocontents{lof}{\protect\addvspace{10\p@}}%
You could redefine this macro. Alternatively, you could disable \addvspace
in the list of figures, for instance by
\newcommand*{\noaddvspace}{\renewcommand*{\addvspace}[1]{}}
\addtocontents{lof}{\protect\noaddvspace}
The effect should end with the list of figures, but of course you could group it to limit the scope.
If you disabled it you could use an environment or a declaration of the setspace
package, to get more space between the lines of the list of figures. Or you just use \linespread
locally:
\addtocontents{lof}{\linespread{2}\selectfont}
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
You can redefine
\@idxitem
to have a vertical space preceding it, while\indexspace
does nothing. Also\subitem
needs to be redefined, otherwise it would add the vertical space as well.For separating the first entry from the heading, a
\vspace{12pt}
instruction is added to\theindex
, modify it to suit.The
arara
directives are what I used to ease compilation; the\loop
just fills in some more index entries so we arrive at the second column.If I change the code above into
then the space between different letters will be double of the space between entries starting with the same letter.