You can try this one; the important code is between \makeatletter
and \makeatother
\documentclass{book}
\makeatletter
\renewcommand\listoffigures{%
\chapter*{\listfigurename}%
\@mkboth{\MakeUppercase\listfigurename}%
{\MakeUppercase\listfigurename}%
\begingroup\let\addvspace\@gobble
\raggedbottom\offinterlineskip\def\l@figure{\xiao@figure}\parindent\z@
\hrule
\vrule\vrule width \z@ height 1.2\ht\strutbox depth 1.2\dp\strutbox
\makebox[\dimexpr3cm-0.8pt\relax][c]{\bfseries Number}\vrule
\parbox{\dimexpr\textwidth-6cm}{\normalbaselines\centering {\large\strut}\bfseries Caption{\large\strut}}\vrule
\makebox[\dimexpr3cm-0.8pt\relax][c]{\bfseries Page}\vrule
\hrule
\@starttoc{lof}%
\endgroup
}
\def\xiao@figure#1#2{\xiao@figurei#1{#2}}
\long\def\xiao@figurei\numberline#1#2#3{%
\vrule\vrule width \z@ height 1.2\ht\strutbox depth 1.2\dp\strutbox
\makebox[\dimexpr3cm-0.8pt\relax][c]{Fig.\ #1}\vrule
\parbox{\dimexpr\textwidth-6cm}{\normalbaselines\centering {\large\strut}#2{\large\strut}}\vrule
\makebox[\dimexpr3cm-0.8pt\relax][c]{#3}\vrule
\hrule
\hskip-.4pt
\hrule
\nobreak
}
\makeatother
\begin{document}
\frontmatter
\listoffigures
\mainmatter
\chapter{A}
\begin{figure}
\caption{Caption}
\end{figure}
\begin{figure}
\caption{Caption which is very
very very very very very very very very
very very very very very very very very
very very very very very very very very
long}
\end{figure}
\begin{figure}
\caption{Caption}
\end{figure}
\begin{figure}
\caption{Caption}
\end{figure}
\begin{figure}
\caption{Caption which is very
very very very very very very very very
very very very very very very very very
very very very very very very very very
long}
\end{figure}
\begin{figure}
\caption{Caption}
\end{figure}
\begin{figure}
\caption{Caption}
\end{figure}
\clearpage
\begin{figure}
\caption{Caption which is very
very very very very very very very very
very very very very very very very very
very very very very very very very very
long}
\end{figure}
\begin{figure}
\caption{Caption}
\end{figure}
\begin{figure}
\caption{Caption}
\end{figure}
\begin{figure}
\caption{Caption which is very
very very very very very very very very
very very very very very very very very
very very very very very very very very
long}
\end{figure}
\begin{figure}
\caption{Caption}
\end{figure}
\begin{figure}
\caption{Caption}
\end{figure}
\begin{figure}
\caption{Caption which is very
very very very very very very very very
very very very very very very very very
very very very very very very very very
long}
\end{figure}
\begin{figure}
\caption{Caption}
\end{figure}
\begin{figure}
\caption{Caption}
\end{figure}
\begin{figure}
\caption{Caption which is very
very very very very very very very very
very very very very very very very very
very very very very very very very very
long}
\end{figure}
\begin{figure}
\caption{Caption}
\end{figure}
\clearpage
\begin{figure}
\caption{Caption}
\end{figure}
\begin{figure}
\caption{Caption which is very
very very very very very very very very
very very very very very very very very
very very very very very very very very
long}
\end{figure}
\begin{figure}
\caption{Caption}
\end{figure}
\begin{figure}
\caption{Caption}
\end{figure}
\begin{figure}
\caption{Caption which is very
very very very very very very very very
very very very very very very very very
very very very very very very very very
long}
\end{figure}
\clearpage
\begin{figure}
\caption{Caption}
\end{figure}
\begin{figure}
\caption{Caption}
\end{figure}
\begin{figure}
\caption{Caption which is very
very very very very very very very very
very very very very very very very very
very very very very very very very very
long}
\end{figure}
\begin{figure}
\caption{Caption}
\end{figure}
\end{document}
The compiled example shows also a page break. Here I show only a small part.
Some comments about \xiao@figure
and \xiao@figurei
.
The entry in the .lof
file for the first figure is
\contentsline {figure}{\numberline {1.1}{\ignorespaces Caption}}{1}
and \contentsline{figure}
is first translated into \l@figure
, according to the definition of \contentsline
. Then, becauso of our redefinition of \listoffigures
, LaTeX transforms \l@figure
into \xiao@figure
, so the main input becomes
\xiao@figure{\numberline {1.1}{\ignorespaces Caption}}{1}
The first argument to \xiao@figure
is now
\numberline {1.1}{\ignorespaces Caption}
and the second one is 1
(after stripping braces around arguments). Thus the next replacement is
\xiao@figurei\numberline {1.1}{\ignorespaces Caption}{1}
and next the definition of \xiao@figurei
is looked at: it has to be followed by \numberline
(which is removed) and has three arguments
1.1
\ignorespaces Caption
1
and now the main part of the work can be done, because we have correctly identified the contents of the three table cells.
With hyperref
the \contentsline
macro has a different definition. Supporting links seems to be quite difficult, unfortunately.
In order to get a successful compilation (without links), you can do as follows:
\documentclass{book}
\let\latexcontentsline\contentsline
\usepackage{hyperref}
\makeatletter
\renewcommand\listoffigures{%
\chapter*{\listfigurename}%
\@mkboth{\MakeUppercase\listfigurename}%
{\MakeUppercase\listfigurename}%
\begingroup\let\addvspace\@gobble
\raggedbottom\offinterlineskip\def\l@figure{\xiao@figure}\parindent\z@
\let\contentsline\latexcontentsline
\hrule
\vrule\vrule width \z@ height 1.2\ht\strutbox depth 1.2\dp\strutbox
\makebox[\dimexpr3cm-0.8pt\relax][c]{\bfseries Number}\vrule
\parbox{\dimexpr\textwidth-6cm}{\normalbaselines\centering {\large\strut}\bfseries Caption{\large\strut}}\vrule
\makebox[\dimexpr3cm-0.8pt\relax][c]{\bfseries Page}\vrule
\hrule
\@starttoc{lof}%
\endgroup
}
\def\xiao@figure#1{\xiao@figurei#1}
\long\def\xiao@figurei\numberline#1#2#3#4{%
\vrule\vrule width \z@ height 1.2\ht\strutbox depth 1.2\dp\strutbox
\makebox[\dimexpr3cm-0.8pt\relax][c]{Fig.\ #1}\vrule
\parbox{\dimexpr\textwidth-6cm}{\normalbaselines\centering {\large\strut}#2{\large\strut}}\vrule
\makebox[\dimexpr3cm-0.8pt\relax][c]{#3}\vrule
\hrule
\hskip-.4pt
\hrule
\nobreak
}
\makeatother