
Ich bin mir bewusst, dassKombiniertes Abbildungs- und Tabellenverzeichnis?, aber der Fragesteller verlangteinsNummerierungsschema für Abbildungen und Tabellen, das ich nicht möchte. Leider scheint die Antwort von dieser Voraussetzung abzuhängen.
Meine Frage betrifft ein beabsichtigtes Ergebnis/Output wie:
Abbildungs- und Tabellenverzeichnis
Abbildung 1: Karte der Bäume in New Orleans .................................... 3
Abbildung 2: Anzahl der Blätter fallen Blätter pro Tag .................... 5
Tabelle 1: Baumarten ...................................................... 12
Abbildung 3: Luftqualitätsminderung pro 1000 gefallenen Blättern ...................................... ...
Damit dies funktioniert, ist das Umdefinieren von Abbildungen in Tabellen (oder umgekehrt), wie im obigen Link vorgeschlagen (also etwa wie \let\figure\table\let\endtable\endfigure
), nicht möglich, da dies natürlich dazu führt, dass alle Abbildungen ebenfalls „Tabelle x“ heißen …
Antwort1
Das funktioniert. Der Code ist gut kommentiert, daher denke ich, dass keine weiteren Kommentare nötig sind.
\documentclass{article}
% To make the page shorter
\pagestyle{empty}
\textheight3in
% CODE STARTS HERE
% Based on `tocloft` package
\usepackage[titles]{tocloft}
\newlistof{figtab}{loft}{List of Figures and Tables}
\makeatletter
% Change the file extension of both lot and lof
\def\ext@figure{loft}
\def\ext@table{loft}
% Store the original `\thefigure` and `\thetable`
\let\tohe@thefigure\thefigure
\let\tohe@thetable\thetable
% Redefine them to contain a "dummy" `\tohe@list...`
\def\thefigure{\tohe@listfig\tohe@thefigure}
\def\thetable{\tohe@listtab\tohe@thetable}
% Make the two dummy commands truly dummy
\let\tohe@listfig\relax
\let\tohe@listtab\relax
% Store the original `\listoffigtab`
\let\tohe@listoffigtab\listoffigtab
% Redefine it in such a way that the dummy commands insert "Fig." or "Tab." respectively
\def\listoffigtab{%
\begingroup
\def\tohe@listfig{Fig.~}
\def\tohe@listtab{Tab.~}
\tohe@listoffigtab
\endgroup
}
% Change \listoffigtab spacing
\setlength{\cftfignumwidth}{5em}
\setlength{\cfttabnumwidth}{5em}
\setlength{\cftfigindent}{0pt}
\setlength{\cfttabindent}{0pt}
\makeatother
% CODE ENDS HERE
\begin{document}
\listoffigtab
% !b just to make the floats appear on the bottom of the first page
\begin{figure}[!b]
\caption{First}
\end{figure}
\begin{table}[!b]
\caption{Little Table}
\end{table}
\begin{figure}[!b]
\caption{Second}
\end{figure}
\end{document}
Antwort2
Der entsprechende Befehl lautet wie immer: \addcontentsline
.
figure
und table
Untertitel werden in eine Datei geschrieben, deren Erweiterung in \ext@figure
oder gespeichert ist \ext@table
.
Im \@caption
(genauer gesagt internen Prozessormakro) finden wir:
\long\def\@caption#1[#2]#3{%
\par
\addcontentsline{\csname ext@#1\endcsname}{#1}%
{\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}%
\begingroup
\@parboxrestore
\if@minipage
\@setminipage
\fi
\normalsize
\@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
\endgroup}
Der erste Parameter \@caption
ist der Name des Floats, also figure
oder table
(normalerweise). Dies kann verwendet und gepatcht werden, indem die table
Beschriftungen erfasst und redirect
in die Datei mit der Erweiterung eingefügt werden \ext@figure
.
\documentclass{book}
\usepackage{caption}
\usepackage{xstring}
\usepackage{xpatch}
\makeatletter
\xpatchcmd{\@caption}{%
\addcontentsline{\csname ext@#1\endcsname}{#1}%
{\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}%
}{%
\IfStrEq{#1}{table}{% Filter `table` out
\addcontentsline{\csname ext@figure\endcsname}{table}%
{\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}%
}{%
\addcontentsline{\csname ext@#1\endcsname}{#1}%
{\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}%
}%
}{\typeout{Patch success}}{}
\makeatother
\renewcommand{\listfigurename}{List of Figures and Tables}
\begin{document}
\listoffigures
\begin{figure}
\caption{first figure}
\end{figure}
\begin{figure}
\caption{Another first figure}
\end{figure}
\begin{table}
\caption{first table}
\end{table}
\chapter{Another chapter}
\begin{table}
\caption{Yet another table}
\end{table}
\end{document}
Kleines Update nachdem yo'
richtig aufgefallen ist, dass unklar ist, ob es sich im LOFT um eine Tabelle oder Figur handelt:
\documentclass{book}
\usepackage{caption}
\usepackage{xstring}
\usepackage{tocloft}
\usepackage{xpatch}
\addtolength{\cftfignumwidth}{30pt}
\addtolength{\cfttabnumwidth}{30pt}
% Prepend the tab or fig number with a `\makebox` (for equal width) and put `Tab.` or `Fig.` in there. Change the names at will
\renewcommand{\cfttabpresnum}{\makebox[30pt][l]{Tab.}}
\renewcommand{\cftfigpresnum}{\makebox[30pt][l]{Fig.}}
\makeatletter
\xpatchcmd{\@caption}{%
\addcontentsline{\csname ext@#1\endcsname}{#1}%
{\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}%
}{%
\IfStrEq{#1}{table}{%
\addcontentsline{\csname ext@figure\endcsname}{table}%
{\protect\numberline{\csname the#1\endcsname\hfill\hspace{1em}}{\ignorespaces #2}}%
}{%
\IfStrEq{#1}{figure}{%
\addcontentsline{\csname ext@#1\endcsname}{#1}%
{\protect\numberline{\csname the#1\endcsname\hfill\hspace{1em}}{\ignorespaces #2}}%
}{%
\addcontentsline{\csname ext@#1\endcsname}{#1}%
{\protect\numberline{\csname the#1\endcsname}{ \ignorespaces #2}}%
}
}%
}{\typeout{Patch success}}{}
\makeatother
\renewcommand{\listfigurename}{List of Figures and Tables}
\begin{document}
\listoffigures
\begin{figure}
\caption{first figure}
\end{figure}
\begin{figure}
\caption{Another first figure}
\end{figure}
\begin{table}
\caption{first table}
\end{table}
\chapter{Another chapter}
\begin{table}
\caption{Yet another table}
\end{table}
\section{First section}
\subsection{First subsection}
\subsubsection{First subsubsection}
\begin{table}
\caption{Yet another another table}
\end{table}
\end{document}