
Estou observando que adicionar um texto a uma lista de tabelas (ou figuras) através do \preto do etoolbox não funciona corretamente quando a tabela é colocada na próxima página se ela não couber na página onde está configurada.
Considere o seguinte código
\documentclass[twoside,a4paper]{memoir}
\usepackage{etoolbox, tocloft}
\preto\figure{%
\ifnum\value{figure}=0\addtocontents{lof}{{\bfseries Chapter \thechapter\vskip10pt}}\fi
}
\preto\table{%
\ifnum\value{table}=0\addtocontents{lot}{{\bfseries Chapter \thechapter\vskip10pt}}\fi
}
\begin{document}
\cleardoublepage
\tableofcontents
\cleardoublepage
\listoftables
\cleardoublepage
\chapter{Chapter}
blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah
\\
blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah
\\
blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah
\\
blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah
\\
%blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah
\begin{table}
\begin{center}
\caption{My table's caption}
\begin{tabular}{l c c}
\hline
column 1 & column 2 & column 3 \\
\hline
r1 & r2 & r3 \\
r1 & r2 & r3 \\
r1 & r2 & r3 \\
r1 & r2 & r3 \\
\hline
\end{tabular}
\end{center}
\end{table}
\end{document}
Se eu deixei o último comentário sobre "blá, blá, blá", a lista de tabelas será assim:
Lista de mesas
Capítulo 1
1.1 Legenda da minha tabela... 6
Se eu remover o caractere de comentário, a lista de tabelas ficará estranha e será semelhante a
Lista de mesas
1.1 Legenda da minha tabela... 6
Capítulo 1
Se eu forçar a tabela a ficar aqui ela será resolvida, porém prefiro ter tabelas no topo. Alguém pode apontar como resolver esse problema?
Obrigado!
Responder1
É melhor adicionar a anotação ao comando de criação de capítulo; com o livro de memórias há o gancho \mempostaddchaptertotochook
para esse propósito.
O código a seguir é adaptado para umresposta minha no fórum GuIT; como você pode ver, a anotação só é impressa se em um capítulo forem encontradas algumas tabelas (ou figuras).
\documentclass[twoside,a4paper]{memoir}
\renewcommand\mempostaddchaptertotochook{%
\addchaptertoloft{lof}%
\addchaptertoloft{lot}%
}
\def\addchaptertoloft#1{%
\addtocontents{#1}{%
\protect\xcontentsline{chapter}
{\chaptername\ \thechapter\protect\nopagebreak\protect\vspace{1ex}}{}}}
\makeatletter
\def\xcontentsline#1#2#3{\@ifnextchar\contentsline
{\contentsline{#1}{#2}{#3}}{}}
\makeatother
\newcommand{\blah}{%
blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah
blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah
blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah
blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah
blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah
blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah
blah blah blah blah\par}
\begin{document}
\tableofcontents*
\listoftables
\chapter{Chapter}
\blah\blah\blah\blah
\begin{table}
\centering
\caption{My table's caption}
\begin{tabular}{l c c}
\hline
column 1 & column 2 & column 3 \\
\hline
r1 & r2 & r3 \\
r1 & r2 & r3 \\
r1 & r2 & r3 \\
r1 & r2 & r3 \\
\hline
\end{tabular}
\end{table}
\chapter{Chapter}
\blah\blah\blah\blah
\chapter{Chapter}
\blah \blah \blah \blah
\begin{table}
\centering
\caption{My table's caption}
\begin{tabular}{l c c}
\hline
column 1 & column 2 & column 3 \\
\hline
r1 & r2 & r3 \\
r1 & r2 & r3 \\
r1 & r2 & r3 \\
r1 & r2 & r3 \\
\hline
\end{tabular}
\end{table}
\end{document}
Não use center
dentro figure
ou table
, mas \centering
. Além disso, não adicione \\
no final de um parágrafo.
Observe que quando hyperref
é usado, uma definição diferente de \xcontentsline
deveria ser usada. Altere o código acima com
\makeatletter
\def\xcontentsline#1#2#3{\@ifnextchar\contentsline
{\contentsline{#1}{#2}{#3}{}{}}{}} % two {} groups for hyperref
\makeatother
(todo o resto permanece o mesmo). A mudança também é compatível para quando hyperref
não for utilizada.