Como detectar que existem tabelas no arquivo?

Como detectar que existem tabelas no arquivo?

Estou escrevendo um modelo LaTeX para nossas dissertações universitárias. Um problema que enfrento é o seguinte:

Um aluno me perguntou que sua dissertação não inclui nenhuma tabela e ele visualiza uma lista vazia de tabelas. Coloquei \listoftableso .clsarquivo e pedi para ele comentar. Porém, gostaria de saber como detectar a existência de tabelas e desabilitar/habilitar automaticamente quaisquer listagens como lista de figuras, lista de tabelas, lista de algoritmos e coisas semelhantes.

Pesquisei por um tempo, mas não consegui encontrar nenhuma solução além de adicionar opções à classe do documento como a seguir:

\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

Responder1

A detecção automática da presença ou ausência de carros flutuantes pode ser complicada se o usuário tiver o hábito de excluir os arquivos auxiliares compulsivamente. (Você ficaria surpreso com o quão comum é essa obsessão...) Portanto, gostaria de sugerir que você adotasse uma abordagem diferente: forneça três opções em nível de documentclass: nofigures, notables, e noalgorithms, a serem especificadas pelo próprio usuário. Se essas opções forem especificadas, nenhuma lista de figuras, nenhuma lista de tabelas e nenhuma lista de algoritmos, respectivamente, será gerada.

O código a seguir deve ilustrar esta sugestão com mais detalhes. Ele configura um arquivo de classe de documento chamado myclass.cls(obviamente você está livre para escolher um nome mais imaginativo!), que configura as novas opções e então invoca a reportclasse, bem como um .texarquivo de usuário de amostra que emprega a myclassclasse de documento.

Adendo: Por sugestão de @Werner, adicionei código para três macros de nível de usuário: \nofigures, \notablese \noalgorithms. Podem ser inseridas pelo usuário no preâmbulo, como alternativa à disponibilização das opções correspondentes na \documentclassfase

Primeiro, o código do arquivo de classe (a ser salvo 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}
}

Segundo, um exemplo de documento do usuário. Observe que se todas as três novas opções de documentclass -- nofigures, notablese noalgorithms-- forem especificadas, nenhuma lista de figuras, tabelas e algoritmos será criada.

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

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

\begin{document}
xxx
\end{document}

Responder2

Você pode usar o pacote totalcount. Mas esteja ciente de que é necessáriotrêscompilações para obter uma lista de tabelas ou 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}

informação relacionada