Bei Klassen, bei denen die Abbildungen und Tabellen durchgehend nummeriert werden, ist das relativ einfach zu erreichen:
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\newcommand*{\allfigs}{0}
\newcommand*{\alltabs}{0}
\makeatletter
\BeforeClosingMainAux{%
\immediate\write\@mainaux{%
\string\gdef\string\allfigs{\arabic{figure}}^^J%
\string\gdef\string\alltabs{\arabic{table}}%
}%
}
\makeatother
\begin{document}
Hier sollte nun kein Tabellenverzeichnis erscheinen, da keine Tabelle vorhanden ist.
\ifnum\allfigs>0
\listoffigures
\fi
\ifnum\alltabs>0
\listoftables
\fi
\section{Test}
Mir ist bewusst, dass ich das manuell durch Auskommentieren von \verb|\listoftables| erreichen würde. Vielmehr interessiert mich, wie ein Automatismus in \LaTeX{} aussehen müsste.
\begin{figure}
\caption{Beispielbild}
\end{figure}
\end{document}
Der Trick dabei ist, die aktuelle Abbildungs- bzw. Tabellennummer am Ende des Dokuments in die `aux`-Datei zu schreiben und beim nächsten Lauf wieder darauf zuzugreifen.
Werden die Elemente jedoch beispielsweise kapitelsweise nummeriert, so würde dies nicht mehr so einfach funktionieren. Man müsste dann eine andere Methode finden, für den nächsten LaTeX-Lauf das Vorhandensein von Abbildungen oder Tabellen zu sichern. Beispielsweise könnte man dann über einen Patch der `figure`-, `table`- und entsprechender Umgebungen dafür sorgen, dass jede dieser Umgebungen einen Schalter auf `true` setzt, der dann am Ende des Laufs in die `aux`-Datei geschrieben wird. Das könnte beispielsweise so aussehen:
\documentclass{scrbook}
\usepackage[ngerman]{babel}
\newif\iflistoffigures\newif\iffiguresused
\newif\iflistoftables\newif\iftablesused
\usepackage{xpatch}
\makeatletter
\xpretocmd\@caption{\global\csname\@captype susedtrue\endcsname}{}{}
\BeforeClosingMainAux{%
\iffiguresused\immediate\write\@mainaux{\string\global\string\listoffigurestrue}\fi
\iftablesused\immediate\write\@mainaux{\string\global\string\listoftablesstrue}\fi
}
\makeatother
\begin{document}
Hier sollte nun kein Tabellenverzeichnis erscheinen, da keine Tabelle vorhanden ist.
\iflistoffigures\listoffigures\fi
\iflistoftables\listoftables\fi
\chapter{Test}
Mir ist bewusst, dass ich das manuell durch Auskommentieren von \verb|\listoftables| erreichen würde. Vielmehr interessiert mich, wie ein Automatismus in \LaTeX{} aussehen müsste.
\begin{figure}
\caption{Beispielbild}
\end{figure}
\chapter{Noch ein Test}
\end{document}
Die Anweisung `\BeforeClosingMainAux` stammt übrigens aus `scrlfile`, einem Paket, das von allen KOMA-Script-Klassen geladen wird, weshalb ich es oben nicht noch einmal explizit lade. Bei Verwendung einer Nicht-KOMA-Script-Klasse (und auch nicht davon abgeleiteten Klasse) müsste man das Paket ggf. selbst laden. Notfalls könnte man `\AtEndDocument` stattdessen verwenden. Das ist aber weniger sicher.sicher.
Beide Lösungen sind natürlich einfach auf weitere Verzeichnisse beispielsweise von Paketen wie `listings` erweiterbar.