![ConTeXt:在索引中将“ß”映射到“ss”](https://linux22.com/image/372203/ConTeXt%EF%BC%9A%E5%9C%A8%E7%B4%A2%E5%BC%95%E4%B8%AD%E5%B0%86%E2%80%9C%C3%9F%E2%80%9D%E6%98%A0%E5%B0%84%E5%88%B0%E2%80%9Css%E2%80%9D.png)
问题
在历史德语中,有些单词可以同时用“ß”和“s”书写,例如“Erkenntniß”和“Erkenntnis”。
因为我想在索引中描述这些不同的变体,所以我同时使用了\index{Erkenntnis}
和\index{Erkenntniß}
:
\mainlanguage[de]
\language[de]
\defineregister[custom]
\setupregister[custom]
[compress=yes,
indicator=no,
pagestyle=\tf,
n=1]
\starttext
In historischer Schreibung sind \custom{Erkenntniß}Erkenntniß
und \custom{Erkenntnis}Erkenntnis identisch.
\page
In historischer Schreibung sind \custom{Erkenntnis}Erkenntnis
und \custom{Erkenntniß}Erkenntniß identisch.
\page
\placecustom
\stoptext
但是由于 'ß' 被映射到 's' 而不是 'ss'(更常见),因此“Erkenntniß”和“Erkenntnis”在索引中混淆了:
问题
我该怎么做才能为这些术语创建两个单独的条目,即将“ß”映射到“ss”?我已经尝试配置sort-lan.lua,但没有产生任何结果,排序仍然相同。
我还注意到 lang-ini.lua 中 'ß' 到 'ss' 的映射以某种方式被抑制,但由于我对 Lua 还很陌生,所以我不知道是否或如何应该更改此功能。
答案1
这绝对不好。下面的代码依赖于sort-lan.lua
。
definitions['de'] = {
parent = 'default',
replacements = {
{ "ä", 'ae' }, { "Ä", 'Ae' },
{ "ö", 'oe' }, { "Ö", 'Oe' },
{ "ü", 'ue' }, { "Ü", 'Ue' },
{ "ß", 's' },
},
}
大家可以数一下,我们要替换的字符是第七个子表中的第二个字符,即sorters.definitions["de"].replacements[7][2] = "ss"
。
\mainlanguage[de]
\language[de]
\defineregister[custom]
\setupregister[custom]
[compress=yes,
indicator=no,
pagestyle=\tf,
n=1]
\startluacode
sorters.definitions["de"].replacements[7][2] = "ss"
\stopluacode
\starttext
In historischer Schreibung sind \custom{Erkenntniß}Erkenntniß
und \custom{Erkenntnis}Erkenntnis identisch.
\page
In historischer Schreibung sind \custom{Erkenntnis}Erkenntnis
und \custom{Erkenntniß}Erkenntniß identisch.
\page
\placecustom
\stoptext
如果你不想依赖 ß/s 替换位于第七个位置的事实,你也可以使用以下方法明确搜索它
for _,v in pairs(sorters.definitions["de"].replacements) do
local char = unpack(v)
if char == "ß" then
v[2] = "ss"
end
end