ConTeXt:如何将两个连续的页码折叠为索引(寄存器)中的“f”。

ConTeXt:如何将两个连续的页码折叠为索引(寄存器)中的“f”。

背景

对于索引/寄存器中的折叠或扩展页码,您可以使用 \defineregister[name][compress=yes|no],例如

\defineregister
  [photographer]
  [compress=yes]

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

 \completephotographer   
\stoptext

这将导致索引将页面引用纳入“1-4”。

(示例取自http://wiki.contextgarden.net/Command/defineregister


问题

压缩参数工作正常,但当我们有两个连续的页码时它也会崩溃,例如“1-2”

不幸的是,这在德语中并不常见。当条目指代两个连续的页面时,你应该写“1f.”而不是“1-2”。


问题

是否可以将包含两个连续页面的页面引用归入例如“1f.”,同时将引用两个以上页面的引用合并到例如“1-3”?如果可以,您将如何操作?

答案1

您可以侵入 ConTeXt 中页面范围的显示。

\defineregister
  [photographer]
  [compress=yes]

\unprotect

\unexpanded\def\registerpagerange#1#2#3#4#5#6#7%
  {\registerpageseparator
   \global\setconstant\c_strc_registers_page_state\plusone
   \dostarttagged\t!registerpagerange\empty
   \dostarttagged\t!registerfrompage\empty
   \withregisterpagecommand{#1}{#2}{#3}{#4}%
   \dostoptagged
   \ifnum\the\numexpr#6-#3\relax=1
     f.%
   \else
     \registeronepagerangeseparator
     \dostarttagged\t!registertopage\empty
     \withregisterpagecommand{#1}{#5}{#6}{#7}%
     \dostoptagged
   \fi
   \dostoptagged}

\protect

\starttext
\dorecurse{1}{Foo\photographer{Foo Bar} \page}
\dorecurse{2}{Foo\photographer{John Doe} \page}
\dorecurse{4}{Foo\photographer{Yousuf Karsh} \page}

\completephotographer   
\stoptext

在此处输入图片描述

相关内容