ConTeXt:大写 ß,自定义字形替换

ConTeXt:大写 ß,自定义字形替换

我一直试图在需要自动大写的情况下从 ConTeXt 中取出大写 ß,但结果很奇怪。我对 ConTeXt 还很陌生。另外,我不喜欢大写或小写的老派数字,需要自动切换到某种连线数字。

这是我的试验台:

\mainlanguage[de]
\language[de]

\uccode`ß="1E9E    % This gives the capital ß to \uppercase

\definefontfeature[fcalluna][default][] % I tried all the font features built 
                                                % into Calluna, to no avail.

\definefontfamily [myfamily] [serif][Calluna][features=fcalluna]
\definefontfamily [myfamily] [sans] [Linux Biolinum O][features=fcalluna]
\definefontfamily [myfamily] [mono] [TeX Gyre Cursor]

\setupbodyfont [myfamily]
\startTEXpage[offset=10pt]
    \starttabulate[|l|l|l|]
         \NC \it Command \NC \it Calluna \NC \it Linux Biolinum \NC\NR
        \NC\type{\WORD{Gruß134}}:       \NC\WORD{Gruß134}           \NC {\ss\WORD{Gruß134}}         \NC\NR
        \NC\type{\uppercase{Gruß134}}:  \NC\uppercase{Gruß12134}    \NC{\ss\uppercase{Gruß134}}     \NC\NR
        \NC\type{\sc{Gruß134}}:             \NC{\sc Gruß134}            \NC{\ss{\sc Gruß134}}           \NC\NR
        \NC\type{\Cap{Gruß134}:}        \NC\Cap{Gruß134}            \NC{\ss \Cap{Gruß134}}      \NC\NR
        \NC\type{\cap{Gruß134}:}        \NC\cap{Gruß134}            \NC{\ss \cap{Gruß134}}      \NC\NR
        \NC\type{{\sc\lowercase{Gruß134}}:}         \NC{\sc\lowercase{Gruß134}}             \NC{\ss\sc\lowercase{Gruß134}}  \NC\NR
    \stoptabulate
\stopTEXpage

这给了我:

enter image description here

好吧,我并没有期望将大写字母或小型大写字母 ß“开箱即用”,但我曾期望获得一定的一致性。\WORD只是用两个 S 字形代替了例如 SS 连字或大写字母 ß。\uppercase是受其影响的那个\uccode\sc并且\Cap两者都找不到 Calluna 的小型大写字母 ß,虽然它在字体中的位置可能很奇怪,但仍然存在。

显然,我的目标是当我让标题或其他东西执行类似\uppercase或 的操作时,看到大写字母和小型大写字母 ß \sc。我希望看到真正的小型大写字母;而不是一些缩小的大写字母。我希望自动切换到内衬数字。

答案1

您必须修复字体本身才能获得正确的映射。默认情况下,ßCalluna Regular 中的 不具有小型大写字母的替换。您必须添加 替换作为smcp目标uni1E9E.smcp字形(smcp后缀至关重要,否则您将获得大写版本)。

我使用 FontForge 编辑了字体。

enter image description here

之后,您的确切示例排版为

enter image description here


或者,你可以使用fonts.handlers。我问过这个问题如何调整LuaTeX 中的字体功能?关于它,在撰写本文时仍然缺乏规范的答案,但从给出的例子中,有时可以构建可行的解决方案。

\mainlanguage[de]
\language[de]

\startluacode
fonts.handlers.otf.addfeature {
    name = "smcp",
    type = "substitution",
    data = {
        ["germandbls"] = "uni1E9E.smcp",
    }
}
\stopluacode

\uccode`ß="1E9E    % This gives the capital ß to \uppercase

\definefontfamily [myfamily] [serif] [Calluna]          [features=default]
\definefontfamily [myfamily] [sans]  [Linux Biolinum O] [features=default]
\definefontfamily [myfamily] [mono]  [TeX Gyre Cursor]

\setupbodyfont [myfamily]

\startTEXpage[offset=10pt]
  \starttabulate[|l|l|l|]
    \NC \it Command \NC \it Calluna \NC \it Linux Biolinum \NC\NR
    \NC\type{\WORD{Gruß134}}:       \NC\WORD{Gruß134}           \NC {\ss\WORD{Gruß134}}         \NC\NR
    \NC\type{\uppercase{Gruß134}}:  \NC\uppercase{Gruß12134}    \NC{\ss\uppercase{Gruß134}}     \NC\NR
    \NC\type{\sc{Gruß134}}:             \NC{\sc Gruß134}            \NC{\ss{\sc Gruß134}}           \NC\NR
    \NC\type{\Cap{Gruß134}:}        \NC\Cap{Gruß134}            \NC{\ss \Cap{Gruß134}}      \NC\NR
    \NC\type{\cap{Gruß134}:}        \NC\cap{Gruß134}            \NC{\ss \cap{Gruß134}}      \NC\NR
    \NC\type{{\sc\lowercase{Gruß134}}:}         \NC{\sc\lowercase{Gruß134}}             \NC{\ss\sc\lowercase{Gruß134}}  \NC\NR
  \stoptabulate
\stopTEXpage

输出与上面相同。

相关内容