背景
索引中的页码通常使用连字符格式化,以引用连续的页面,例如:
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
。文档描述了实现此功能的两个“技巧”:
- 自动折叠页面范围:
[[Command/{{{1}}}|\{{{1}}}]]
。我不知道这是什么意思,也不知道如何使用——没有完整的示例。此外,其他文档表示不使用命令,而是选择pagecommand
或textcommand
。 - 使用
\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