Fontconfig는 글꼴의 일반적인 두께와 스타일을 재정의합니다.

Fontconfig는 글꼴의 일반적인 두께와 스타일을 재정의합니다.

글꼴의 두께나 일반 스타일을 재정의하고 싶습니다. 다음 구성을 사용하면 일반 가중치/스타일을 "medium"으로 재정의할 수 있지만 "normal" 스타일("regular"와 동일한 가중치를 가짐)은 여전히 ​​"medium" 대신 "regular"로 고정됩니다.

<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:Normal" 모드에는 가중치 또는 계열 정의가 포함되어 있지 않으므로 Normal로 매핑됩니다.
너비를 일치시키고 가중치를 변경하는 것이 가능하지만 아마도 원하는 것이 아닐 수도 있습니다.

<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>문서에 따라 태그의 "일반" 별칭을 "일반"으로 허용하는 이유입니다.

관련 정보