ConTeXt:在索引中将“ß”映射到“ss”

ConTeXt:在索引中将“ß”映射到“ss”

问题

在历史德语中,有些单词可以同时用“ß”和“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

相关内容