为什么目录没有在 ConTeXt 的标题中显示递增的计数器?

为什么目录没有在 ConTeXt 的标题中显示递增的计数器?

我设置了一个宏,可以非常简单地创建标题“拼图 1”、“拼图 2”等等。

\newcount\a\newcount\counter
\advance\a by 1

\define\puzzle{\chapter{Puzzle~\the\a}\advance\a by 1}

\starttext

    \completecontent
    \puzzle
    \puzzle
    \puzzle
    \puzzle
    \puzzle
    \puzzle

\stoptext

编号在文档中正确显示,但在目录中,它仅显示计数器的起始值。

如何才能使目录正确显示递增的数字?

另外,如果我需要添加其他类型的章节标题,例如“新词汇 1”、“新词汇 2”(也是在章节级别),该怎么办?我也尝试添加它,但是“谜题 1”和“新词汇 1”的代码产生了奇怪的效果,导致出现在文档不同部分的两个章节标题混杂在一起,重叠在一起。

答案1

忘记我以前的解决方案(如果您需要将其与编号头一起使用,它无论如何都行不通)。由于您需要一些不同的东西(最好从一开始就给出一个更清晰的例子来说明一个人需要什么;)),可以执行以下操作:

\definenumber[vocabularycounter][way=bytext,prefix=no]
\definenumber[puzzlecounter][way=bytext,prefix=no]
\setuphead[chapter][expansion=yes]
\setnumber[puzzlecounter][1]
\setnumber[vocabularycounter][1]
\defineexpandable\puzzle%
{\chapter{Puzzle \rawcountervalue[puzzlecounter]}\incrementnumber[puzzlecounter]}
\defineexpandable\vocabulary%
{\chapter{Vocabulary \rawcountervalue[vocabularycounter]}\incrementnumber[vocabularycounter]}
\starttext
\completecontent
\puzzle
\vocabulary
\puzzle
\vocabulary
\puzzle
\puzzle
\puzzle
\vocabulary
\puzzle
\stoptext

您将在目录中获得以下内容: 在此处输入图片描述

它能满足你的要求吗?

答案2

Jaira 提供了一个更优雅的替代解决方案,但让我解释一下你的解决方案出了什么问题以及如何修复它。如果你打开文件.tuc,你会看到

utilitydata.structures.lists.collected={
 {
  ...
  ["titledata"]={
   ["label"]="chapter",
   ["title"]="Puzzle~\\the \\a ",
  },
 },
 },
}

如您所见,ConTeXt 实际上是将其存储Puzzle~\\the\\a为章节的标题。因此,当您使用 放置目录时\completecontent,相同的标题会被复制到目录中。当目录排版时, 的值\a等于1,因此您可以Puzzle 1在目录中看到。

现在我们了解了发生了什么,修复就很容易了。只需添加

\setuphead[chapter][expansion=yes]

它指示 ConTeXt 在将标题内容存储到文件之前对其进行扩展.tuc。在本例中,.tuc文件包含:

utilitydata.structures.lists.collected={
 {
 ...
  ["titledata"]={
   ["label"]="chapter",
   ["title"]="Puzzle~1",
  },
 },
 ... 
  ["titledata"]={
   ["label"]="chapter",
   ["title"]="Puzzle~2",
  },
 },
}

我们得到了正确的目录!

相关内容