我需要有按照圣经中书籍出现的顺序(《创世纪》、《出埃及记》等)对圣经书籍进行排序的索引。
有没有办法在 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