Удалить список [newfloat] из TOC

Удалить список [newfloat] из TOC

Я использую пакет newfloat и добавил новую фигуру:

\DeclareFloatingEnvironment{dirfigure}

Теперь, когда я использую \listofdirfigures- список добавляется в Оглавление.

С обычными цифрами я могу использовать \listoffigures**), чтобы не указывать их в оглавлении, однако \listofdirfigures*это не работает.

Как не указывать список цифр в оглавлении?

Минимальный пример:

\documentclass[a4paper,twoside]{memoir}
\usepackage{newfloat}
\DeclareFloatingEnvironment{dirfigure}

\begin{document}
\tableofcontents*
\listoffigures*
\listofdirfigures

\chapter{bah}
\begin{dirfigure}
bah
\caption{bah}
\end{dirfigure}
\begin{figure}
bah
\caption{bah}
\end{figure}
\end{document}

Спасибо

решение1

Для справки, memoirединственный способ:

\documentclass[a4paper,twoside]{memoir}
\newfloat[chapter]{dirfigure}{dirf}{Dirfigure}
\newlistof{listofdirfigures}{dirf}{List of Dirfigures}
\newlistentry[chapter]{dirfigure}{dirf}{0}
\cftsetindents{dirfigure}{0em}{2.3em}

\begin{document}
\tableofcontents*
\listoffigures*
\listofdirfigures*

\chapter{bah}
\begin{dirfigure}
bah
\caption{bah}
\end{dirfigure}
\begin{figure}
bah
\caption{bah}
\end{figure}
\end{document}

решение2

Если вы хотите сделать это с помощью \newfloat, вот способ получить ту же функциональность, что и макросы печати списка memoir:

\documentclass[a4paper,twoside]{memoir}
\usepackage{etoolbox}
\usepackage{newfloat}

\makeatletter
%% we define a helper macro for adjusting lists of new floats to
%% accept a * behind them for not being shown in the TOC, like
%% the other list printing commands in memoir
\newcommand{\AdjustForMemoir}[1]{%
  \csletcs{kept@listof#1}{listof#1}%
  \csdef{listof#1}{%
    \@ifstar
     {\csappto{newfloat@listof#1@hook}{\append@star}%
      \csuse{kept@listof#1}}%
     {\csuse{kept@listof#1}}%
  }
}
\def\append@star#1{#1*}
\makeatother

\DeclareFloatingEnvironment{dirfigure}
\AdjustForMemoir{dirfigure} % prepare `\listofdirfigures` so it accepts a *


\begin{document}
\tableofcontents*
\listoffigures*
\listofdirfigures*

\chapter{bah}
\begin{dirfigure}
bah
\caption{bah}
\end{dirfigure}
\begin{figure}
bah
\caption{bah}
\end{figure}
\end{document}

Если вы используете \listofdirfiguresбез *, список будет добавлен в оглавление.

Это работает, используя тот факт, что последние команды, выполненные при \listofdirfiguresвызове, находятся (в группе)

\newfloat@listofdirfigure@hook\listoffigures

но newfloatпакет заботится о том, чтобы переопределить вещи так, чтобы они \listoffiguresделали правильно. Хук обычно пуст, но это не имеет значения. Я переопределяю \listofdirfigures(или лучше, альтернативную версию, которая называется \listofdirfigure) для поиска следующего *; в этом случае я добавляю \append@starк хуку, так что TeX в конечном итоге увидит

\append@star\listoffigures

в случае \listofdirfigures*вызова; это станет \listoffigures*желаемым. В случае *появления no ничего не меняется.

Я предоставил \AdjustForMemoirмакрос, чтобы каждая новая команда создания списка с плавающей точкой могла быть изменена таким образом.

решение3

Исправлено с помощью коммитаhttps://gitlab.com/axelsommerfeldt/caption/commit/5584091f13a4d63c5245b4d8b0e9ac0171c85436

Сегодня я выложу новую версию «пакета субтитров» на CTAN; а пока, пожалуйста, используйтеhttps://gitlab.com/axelsommerfeldt/caption/raw/master/tex/newfloat.styкак замена старому newfloat.sty.

Кстати: Пожалуйста, сообщайте мне о таких проблемах/коде, чтобы у меня была возможность исправить их вовремя. (Мне потребовалось 5 лет, чтобы случайно обнаружить эту проблему.)

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