我想覆盖字体的粗细或普通样式。通过以下配置,我可以将常规粗细/样式覆盖为“中”,但“普通”样式(也与“常规”具有相同的粗细)仍然固定为“常规”而不是“中”。
<fontconfig>
<alias>
<family>sans</family>
<prefer><family>Roboto</family>
</prefer>
</alias>
<match target="pattern">
<test name="style" qual="any" compare="eq"><string>normal</string></test>
<edit name="style" mode="assign" binding="strong"><string>medium</string></edit>
</match>
<match target="pattern">
<test name="weight" qual="any" compare="eq"><int>80</int></test>
<edit name="weight" mode="assign" binding="strong"><int>100</int></edit>
</match>
</fontconfig>
这是结果:
$ fc-match "Roboto: normal"
Roboto-Regular.ttf: "Roboto" "Regular"
$ fc-match "Roboto: regular"
Roboto-Medium.ttf: "Roboto" "Medium"
我希望用中等覆盖“正常”风格。为什么这不起作用以及如何做到这一点?
答案1
原因是,这normal
不是样式/粗细而是宽度定义。
[root@ArchTestVM ~]# fc-pattern "Roboto: normal"
Pattern has 2 elts (size 16)
family: "Roboto"(s)
width: 100(i)(s)
[root@ArchTestVM ~]# fc-pattern "Roboto: regular"
Pattern has 2 elts (size 16)
family: "Roboto"(s)
weight: 80(i)(s)
[root@ArchTestVM ~]# fc-pattern "Roboto: medium"
Pattern has 2 elts (size 16)
family: "Roboto"(s)
weight: 100(i)(s)
[root@ArchTestVM ~]# fc-pattern "Roboto: normal:medium"
Pattern has 3 elts (size 16)
family: "Roboto"(s)
weight: 100(i)(s)
width: 100(i)(s)
模式“Roboto:正常”不包含体重或族的定义,因此映射到常规。
可以匹配宽度并改变重量,但这可能不是您想要的:
<match target="pattern">
<test name="width" qual="any" compare="eq"><int>100</int></test>
<edit name="weight" mode="assign" binding="strong"><int>100</int></edit>
</match>
<match target="pattern">
<test name="weight" qual="any" compare="eq"><int>80</int></test>
<edit name="weight" mode="assign" binding="strong"><int>100</int></edit>
</match>
[root@ArchTestVM ~]# fc-match "Roboto: normal"
SourceCodePro-Medium.otf: "Source Code Pro" "Medium"
[root@ArchTestVM ~]# fc-match "Roboto: normal:bold"
SourceCodePro-Medium.otf: "Source Code Pro" "Medium"
[root@ArchTestVM ~]# fc-pattern "Roboto: normal"
Pattern has 2 elts (size 16)
family: "Roboto"(s)
width: 100(i)(s)
[root@ArchTestVM ~]# fc-pattern "Roboto: normal:bold"
Pattern has 3 elts (size 16)
family: "Roboto"(s)
weight: 200(i)(s)
width: 100(i)(s)
您可以将粗体更改为中等,因为它定义的宽度为 100。
或者您是否正在寻找一种方法来更改默认权重(如果模式中没有权重定义为 100)?
编辑。即使明确指定为重量而不是宽度,它也不起作用:
[root@ArchTestVM ~]# fc-match "Roboto: weight=normal"
Fontconfig error: Unexpected constant name `normal' used for object `weight': should be `width'
Unable to parse the pattern
这是有道理的,因为宽度 80 有正则,但宽度 100 没有其他单词,而且可以区分关键字就可以了。只是问题是为什么他们<const>
根据文档允许标签中的“正常”别名为“常规”。