背景

背景

背景

索引中的页码通常使用连字符格式化,以引用连续的页面,例如:

1, 4-7, 10

代码

请考虑以下示例:

\defineregister[photographer][]

\setupregister[photographer][
  pagestyle=normal,
  indicator=no,
]

\starttext 
  First 
  \photographer{Yousuf Karsh} \page
  Second 
  \photographer{Yousuf Karsh} \page
  Third 
  \photographer{Yousuf Karsh} \page
  Fourth 
  \photographer{Yousuf Karsh} 

  \completephotographer
\stoptext 

问题

我想使用 ConTeXt 生成连字符页码的行为,但是示例代码生成:

页码

我认为它会产生1-4而不是1, 2, 3, 4文档描述了实现此功能的两个“技巧”:

  1. 自动折叠页面范围:[[Command/{{{1}}}|\{{{1}}}]]。我不知道这是什么意思,也不知道如何使用——没有完整的示例。此外,其他文档表示不使用命令,而是选择pagecommandtextcommand
  2. 使用\startregister[index][mymouse]{mouse} ... \stopregister[index][mymouse]。这不适用于我的情况,因为我不知道最后一个连续的引用何时会添加到文档中:文档是动态创建的。

问题

当您不知道在文档中第一个和最后一个引用插入到哪里时,如何折叠 ConTeXt 中的页面范围?

答案1

您需要的选项是compress=yes哪个压缩用连字符将连续的条目放入一个范围内。

附注:通常 a\definesomething采用与 相同的参数 \setupsomething,因此您可以缩短示例:

\defineregister
  [photographer]
  [compress=yes]

\starttext
  \dorecurse{4}{%%
    Foo
    \photographer{Yousuf Karsh} \page}

  \completephotographer
\stoptext

结果

相关内容