根据 \item 中出现的数量更改图片编号

根据 \item 中出现的数量更改图片编号

当我尝试使用 LaTeX 排版考卷时,我成为了我所在机构制定的数字编号标准不断变化的受害者。

旧方法要求对数字进行这样的编号:

\renewcommand{\thefigure}{\theenumi\ifnum\value{figure}>1/\Alph{figure}\fi}

也就是说,图 Q1、图 Q1/B、图 Q1/C 等(第一个图上的 A 被省略)。现在我们必须在第一个图上加上“/A”,但如果每个问题只有一个图,则将“/A”全部省略。问题位于顶层的枚举列表中;因此如上所述\theenumi

所以现在,如果 Q2 有一个图形,它就是图形 Q2。如果其后跟有两个图形的 Q3,它们就是图形 Q3/A 和图形 Q3/B。

答案1

以下是实现此目的的一种可能方法:

\def\@multiqprefix{@MultiFig}
\def\@multiq#1{\gdef\expandafter\noexpand\csname\@multiqprefix#1\endcsname{multifig}}
\def\@ifNotMultiQ#1{\expandafter\if#1\relax}
\def\@subfigpart#1#2{\@ifNotMultiQ{\csname\@multiqprefix\Roman{#1}\endcsname}\else{/\Alph{#2}}\fi}
\renewcommand{\thefigure}{\theenumi\@subfigpart{enumi}{figure}}
\AtEndEnvironment{figure}{
  \ifnum\value{figure}=2\immediate\write\@auxout{\@multiq{\Roman{enumi}}}\fi
}

它通过颠覆图形环境来工作。当为给定问题提供第二个图形时(在此上下文中,每个问题都使用图形计数器,因此我正在测试其值为 2),控制序列将以以下形式写入辅助文件中

\gdef @MultiFigI {multifig}

尾部的 I 对应于罗马数字形式的问题编号。阿拉伯数字使它变得更加困难,因为它们通常不允许出现在控制序列中,如果我这样做,毫无疑问会到处都是 \csnames。{multifig} 是一个占位符。它的值从未使用过,但有一天可能会派上用场。

\thefigure 被覆盖以测试当前问题是否实际上是一个多图形问题,如果是,则为问题中的所有图形提供尾随的 \A、\B 等。

我最大的困扰是无法正确使用 \@multiq。如果没有 \expandafter\noexpand,文件会先读取,但在第二遍读取时,您会在辅助文件中得到如下项目

\gdef multifig {multifig}

因为 \@MultiFig 在写入时会扩展。

该解决方案存在以下问题:

  • 它将 etoolbox 添加为必需包
  • 这意味着你需要对 latex 文件进行三次遍历才能获得正确的引用(但我用来构建文档的工具 Kile 会自动解决这个问题)

相关内容