¿Cómo detectar que hay tablas en el archivo?

¿Cómo detectar que hay tablas en el archivo?

Estoy escribiendo una plantilla LaTeX para nuestras disertaciones universitarias. Un problema al que me enfrento es el siguiente:

Un estudiante me preguntó que su tesis no incluye ninguna tabla y ve una lista vacía de tablas. Le puse \listoftablesel .clsarchivo y le dije que lo comentara. Sin embargo, me pregunto cómo detectar la existencia de tablas y habilitar/deshabilitar automáticamente cualquier listado, como lista de figuras, lista de tablas, lista de algoritmos y cosas similares.

Busqué por un tiempo, pero no pude encontrar ninguna solución más que agregar opciones a la clase de documento como las siguientes:

\newif\if@alg\@algfalse
\DeclareOption{alg}{
  \@algtrue
}
\ProcessOptions\relax
\if@alg
    \RequirePackage{algorithmicx}
    \RequirePackage{algorithm}
    \RequirePackage{algpseudocode}
    \renewcommand{\thealgorithm}{\arabic{chapter}.\arabic{algorithm}} 
\fi

\if@alg
    \listofalgorithms
    \cleardoublepage
    \newpage
\fi

Respuesta1

La detección automática de la presencia o ausencia de flotantes puede resultar complicada si el usuario tiene la costumbre de eliminar los archivos auxiliares de forma compulsiva. (Te sorprendería lo común que es esta obsesión...) Por lo tanto, me gustaría sugerirte que adoptes un enfoque diferente: proporciona tres opciones a nivel de clase de documento: nofigures, notablesy noalgorithms, que serán especificadas por el propio usuario. Si se especifican estas opciones, no se genera ninguna lista de figuras, ninguna lista de tablas ni ninguna lista de algoritmos, respectivamente.

El siguiente código debería ilustrar esta sugerencia con más detalle. Configura un archivo de clase de documento llamado myclass.cls(¡obviamente eres libre de elegir un nombre más imaginativo!), que configura las nuevas opciones y luego invoca la reportclase, así como un .texarchivo de usuario de muestra que emplea la myclassclase de documento.

Anexo: por sugerencia de @Werner, agregué código para tres macros de nivel de usuario: \nofigures, \notablesy \noalgorithms. Podrán ser insertados por el usuario en el preámbulo, como alternativa a proporcionar las opciones correspondientes en la \documentclassetapa

Primero, el código para el archivo de clase (que se guardará como myclass.cls):

\NeedsTeXFormat{LaTeX2e}[2015/01/01]
\ProvidesClass{myclass}[2018/02/21]

% define three new documentclass-level options
\newif\ifnofigures\nofiguresfalse
\newif\ifnotables\notablesfalse
\newif\ifnoalgorithms\noalgorithmsfalse
\DeclareOption{nofigures}{\nofigurestrue}
\DeclareOption{notables}{\notablestrue}
\DeclareOption{noalgorithms}{\noalgorithmstrue}

\ProcessOptions\relax
\LoadClass[]{report}

% provide three user commands: \nofigures, \notables, \noalgorithms
% (to be used as an alternative to setting documentclass-level options)
\newcommand\nofigures{\let\ifnofigures\iftrue}
\newcommand\notables{\let\ifnotables\iftrue}
\newcommand\noalgorithms{\let\ifnoalgorithms\iftrue}

\usepackage{algorithmicx,algorithm,algpseudocode}
% load any and all other default packages

\AtBeginDocument{%
   \pagenumbering{roman}
   \maketitle % or, likely, something far more elaborate
   \ifnofigures\else\listoffigures\fi
   \ifnotables\else\listoftables\fi
   \ifnoalgorithms\else\listofalgorithms\fi
   \clearpage
   \pagenumbering{arabic}
}

En segundo lugar, un documento de usuario de muestra. Tenga en cuenta que si se especifican las tres nuevas opciones de clase de documento: nofigures, notablesy noalgorithms--, no se crean listas de figuras, tablas y algoritmos.

\documentclass[nofigures,notables,noalgorithms]{myclass}

\title{Thoughts}
\author{A. Person}
\date{\today}

\begin{document}
xxx
\end{document}

Respuesta2

Puede utilizar el paquete totalcount. Pero tenga en cuenta que necesitatrescompilaciones para obtener una lista de tablas o figuras.

\documentclass{book}
\RequirePackage[figure,table]{totalcount}
\begin{document}
\iftotaltables
   \listoftables %no list of tables
\fi
\iftotalfigures
   \listoffigures
\fi

\chapter{A}
\begin{figure}
\caption{a figure}
\end{figure} 
\chapter{B}
blblb 
\end{document}

información relacionada