ConTeXt 中索引(寄存器)的自定义排序

ConTeXt 中索引(寄存器)的自定义排序

我需要有按照圣经中书籍出现的顺序(《创世纪》、《出埃及记》等)对圣经书籍进行排序的索引。

有没有办法在 conTeXt 中定义寄存器的自定义排序?


更新示例并添加更多解释

这是一个最小的例子和进一步的解释:

\defineregister[regname]
\setupregister[regname]
  [compress=no,
   indicator=no,
   pagestyle=\tf,
   n=1,
   before=\blank,
   ]

\starttext

This is a test.\regname{Psalm+81}
This is another sentene.\regname{Psalm+81+4}
One more.\regname{Matthew+4+5}
Yet again.\regname{Matthew+4+5-10}
Last one.\regname{Matthew+4+1-7}

\page

Another page.\regname{Romans+3}
Another sentence \regname{Genesis+12+5}
Last one.\regname{Exodus+3+12}
Nope. One more.\regname{Jude+1}

\page

\placeregname

\stoptext

我想定义一个自定义排序,允许它们按非字母顺序排列。在此示例中,排序如下:

创世记、出埃及记、诗篇、马太福音、罗马书和犹大书


更新以澄清问题

因此,似乎寄存器是在早期运行引擎上处理的,并保存在文件中的某种数据结构中.tuc。那么最好的方法是不是编写某种脚本,使用该数据进行排序,然后输出我的索引?如果是这样,是否有任何已知的示例,例如访问寄存器数据并对其进行操作以获得特定输出?

否则,看来我将不得不“模仿”这些语言,而这实际上并不是一种独立的语言,而是一种具有自己排序方式的不同类型的数据结构。

答案1

我认为您无法轻易替换字母排序器。您可以手动执行此操作,只需使用寄存器的排序参数并按字母顺序升序枚举书籍即可。

\defineregister[regname]
\setupregister
  [regname]
  [compress=no,
   indicator=no,
   pagestyle=\tf,
   n=1,
   before=\blank]

\starttext

This is a test.\regname[c]{Psalm+81}
This is another sentene.\regname[c]{Psalm+81+4}
One more.\regname[d]{Matthew+4+5}
Yet again.\regname[d]{Matthew+4+5-10}
Last one.\regname[d]{Matthew+4+1-7}

\page

Another page.\regname[e]{Romans+3}
Another sentence \regname[a]{Genesis+12+5}
Last one.\regname[b]{Exodus+3+12}
Nope. One more.\regname[f]{Jude+1}

\page

\placeregname

\stoptext

为了让你的生活至少更轻松一点,你可以将所有这些都包装在一些宏代码中。

\defineregister[regname]
\setupregister
  [regname]
  [compress=no,
   indicator=no,
   pagestyle=\tf,
   n=1,
   before=\blank]

\unexpanded\def\definebook#1%
  {\advance\scratchcounter by 1
   \expandafter\edef\csname book:#1\endcsname{\convertnumber{a}{\scratchcounter}}}

\unexpanded\def\definebooks[#1]
  {\scratchcounter=0
   \processcommalist[#1]\definebook}

\unexpanded\def\book#1#2%
  {\regname[\csname book:#1\endcsname]{#1#2}}

\definebooks[Genesis,Exodus,Psalm,Matthew,Romans,Jude]

\starttext

This is a test.\book{Psalm}{+81}
This is another sentene.\book{Psalm}{+81+4}
One more.\book{Matthew}{+4+5}
Yet again.\book{Matthew}{+4+5-10}
Last one.\book{Matthew}{+4+1-7}

\page

Another page.\book{Romans}{+3}
Another sentence \book{Genesis}{+12+5}
Last one.\book{Exodus}{+3+12}
Nope. One more.\book{Jude}{+1}

\page

\placeregname

\stoptext

相关内容