自动建立新的 floattype

自动建立新的 floattype

我想在宏中建立一种新的浮点类型。在此过程中要设置的参数之一是 \ftype@TYPE,其中 TYPE 是浮点类型:图形、表格等等。我知道,\ftype@figure = 1 和 \ftype@table = 2 通常已在类(例如 report.cls)中设置,并且我知道,每个后续浮点类型都会获得一个数字,该数字是前一个浮点类型的两倍,因此下一个浮点类型将是 4,然后是 8,然后是 16,依此类推。

但我不知道的是:在宏内部如何找出已经在使用的最高浮点类型数字——以避免使用两次?

答案1

不幸的是 latex 并没有提供很好的解决方案。实际上,该float包提供了一个标准\newfloat分配器,但它必须猜测初始状态,如果你在除 和 之外的浮点数figure定义之后加载它table,那么它们将被 覆盖\newfloat


如果你不想强制float加载,那么我建议

a) 测试是否\newfloat已定义,如果是,则使用它。

b)如果未定义,则将值设置为 1,然后测试常见的嫌疑人,并在每次定义时将值加倍,以获得自由数字,因此也许测试\c@figure\c@table\c@listings\c@algorithm


listings包中有一个更简单的版本,它实现了同样的想法

\AtBeginDocument{%
\@ifundefined{c@float@type}%
    {\edef\ftype@lstlisting{\ifx\c@figure\@undefined 1\else 4\fi}}
    {\edef\ftype@lstlisting{\the\c@float@type}%
     \addtocounter{float@type}{\value{float@type}}}%
}

因此,如果\newfloat在序言中定义了,它将使用该分配中的下一个空闲数字,否则希望获得最好的结果并使用 1 或 4,具体取决于数字是否定义。

相关内容