![ConTeXt:大写 ß,自定义字形替换](https://linux22.com/image/331537/ConTeXt%EF%BC%9A%E5%A4%A7%E5%86%99%20%C3%9F%EF%BC%8C%E8%87%AA%E5%AE%9A%E4%B9%89%E5%AD%97%E5%BD%A2%E6%9B%BF%E6%8D%A2.png)
我一直试图在需要自动大写的情况下从 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
这给了我:
好吧,我并没有期望将大写字母或小型大写字母 ß“开箱即用”,但我曾期望获得一定的一致性。\WORD
只是用两个 S 字形代替了例如 SS 连字或大写字母 ß。\uppercase
是受其影响的那个\uccode
。\sc
并且\Cap
两者都找不到 Calluna 的小型大写字母 ß,虽然它在字体中的位置可能很奇怪,但仍然存在。
显然,我的目标是当我让标题或其他东西执行类似\uppercase
或 的操作时,看到大写字母和小型大写字母 ß \sc
。我希望看到真正的小型大写字母;而不是一些缩小的大写字母。我希望自动切换到内衬数字。
答案1
您必须修复字体本身才能获得正确的映射。默认情况下,ß
Calluna Regular 中的 不具有小型大写字母的替换。您必须添加 替换作为smcp
目标uni1E9E.smcp
字形(smcp
后缀至关重要,否则您将获得大写版本)。
我使用 FontForge 编辑了字体。
之后,您的确切示例排版为
或者,你可以使用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
输出与上面相同。