从目录中删除 [newfloat] 列表

从目录中删除 [newfloat] 列表

我正在使用 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*想要的样子。如果未*出现,则不会发生任何变化。

我提供了一个\AdjustForMemoir宏,以便每个新的浮点列表制作命令都可以通过这种方式进行修改。

答案3

已提交修复https://gitlab.com/axelsommerfeldt/caption/commit/5584091f13a4d63c5245b4d8b0e9ac0171c85436

我将于今天向 CTAN 推送新版本的“字幕包”;在此期间,请使用https://gitlab.com/axelsommerfeldt/caption/raw/master/tex/newfloat.sty替代旧的 newfloat.sty。

顺便说一句:请向我报告此类问题/代码,以便我有机会及时修复。(我花了 5 年时间才偶然发现这个问题。)

相关内容