Falsche Platzierung für \preto bei Verwendung von etoolbox

Falsche Platzierung für \preto bei Verwendung von etoolbox

Mir fällt auf, dass das Hinzufügen eines Textes zu einer Liste von Tabellen (oder Abbildungen) über \preto von etoolbox nicht richtig funktioniert, wenn die Tabelle auf der nächsten Seite platziert wird, falls sie nicht auf die Seite passt, auf der sie eingefügt ist.

Betrachten Sie den folgenden Code

\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}

Wenn ich den letzten Kommentar mit "bla bla bla" hinterlassen hätte, dann sieht die Tabellenliste etwa so aus:

Liste der Tabellen

Kapitel 1

1.1 Die Überschrift meiner Tabelle ... 6

Wenn ich das Kommentarzeichen entferne, wird die Tabellenliste komisch und liest sich wie folgt

Liste der Tabellen

1.1 Die Überschrift meiner Tabelle ... 6

Kapitel 1

Wenn ich die Tabelle zwinge, [hier] zu sein, ist das Problem gelöst, ich bevorzuge jedoch Tabellen oben. Kann jemand sagen, wie man dieses Problem löst?

Danke schön!

Antwort1

Besser ist es, die Anmerkung dem Befehl zum Erstellen der Kapitel hinzuzufügen; bei Memoir gibt es \mempostaddchaptertotochookdafür einen Hook.

Der folgende Code ist angepasst an eineAntwort von mir im GuIT-Forum; wie Sie sehen, wird die Anmerkung nur gedruckt, wenn in einem Kapitel Tabellen (oder Abbildungen) gefunden werden.

\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}

Bildbeschreibung hier eingeben

Verwenden Sie weder center„innerhalb“ figurenoch table„aber“ \centering. Fügen Sie es auch nicht \\am Ende eines Absatzes hinzu.


Beachten Sie, dass bei hyperrefVerwendung von eine andere Definition von \xcontentslineverwendet werden sollte. Ändern Sie den obigen Code mit

\makeatletter
\def\xcontentsline#1#2#3{\@ifnextchar\contentsline 
  {\contentsline{#1}{#2}{#3}{}{}}{}} % two {} groups for hyperref
\makeatother

(alles andere bleibt gleich). Die Änderung ist auch kompatibel, wenn hyperrefnicht verwendet wird.

verwandte Informationen