Как определить, что в файле есть таблицы?

Как определить, что в файле есть таблицы?

Я пишу шаблон LaTeX для наших университетских диссертаций. Проблема, с которой я сталкиваюсь, заключается в следующем:

Студент спросил меня, что его диссертация не включает никаких таблиц, и он видит пустой список таблиц. Я вставил \listoftablesфайл .clsи попросил его прокомментировать его. Однако мне интересно, как обнаружить существование таблиц и автоматически отключить/включить любые списки, такие как список рисунков, список таблиц, список алгоритмов и тому подобное.

Я искал некоторое время, но не смог найти никакого решения, кроме добавления параметров в класс документа, как показано ниже:

\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

решение1

Автоматическое определение наличия или отсутствия плавающих элементов может нарушиться, если пользователь имеет привычку компульсивно удалять файлы aux. (Вы удивитесь, насколько распространена эта одержимость...) Поэтому я хотел бы предложить вам другой подход: предоставить три параметра уровня documentclass: nofigures, notables, и noalgorithms, которые должен указать сам пользователь. Если эти параметры указаны, то не создается ни список рисунков, ни список таблиц, ни список алгоритмов соответственно.

Следующий код должен проиллюстрировать это предложение более подробно. Он настраивает как файл класса документа с именем myclass.cls(вы, очевидно, вольны выбрать более изобретательное имя!), который настраивает новые параметры и затем вызывает класс report, так и пример .texфайла пользователя, который использует myclassкласс документа.

Дополнение: По предложению @Werner я добавил код для трех макросов пользовательского уровня: \nofigures, \notablesи \noalgorithms. Они могут быть вставлены пользователем в преамбулу, как альтернатива предоставлению соответствующих опций на \documentclassэтапе

Сначала код для файла класса (который нужно сохранить как 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}
}

Во-вторых, образец пользовательского документа. Обратите внимание, что если указаны все три новых параметра documentclass -- nofigures, notables, и noalgorithms--, то не создаются списки рисунков, таблиц и алгоритмов.

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

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

\begin{document}
xxx
\end{document}

решение2

Вы можете использовать пакет totalcount. Но учтите, что для этого нужнотрикомпиляции для получения списка таблиц или рисунков.

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

Связанный контент