fc-match가 어떻게 일치하는지 확인하는 방법은 무엇입니까?

fc-match가 어떻게 일치하는지 확인하는 방법은 무엇입니까?

실행하면 fc-mach Sans반환되지만 다음 과 DejaVuSans.ttf: "DejaVu Sans" "Book"같이 실행되면 반환됩니다 . 나는 항상 DejaVu Sans를 사용하는 것을 선호하지만 Fontconfig가 unifont를 선택하는 이유를 알 수 없습니다. 전역 구성이나 로컬 구성 모두 unifont를 언급하지 않는 것 같습니다( 아무 것도 반환하지 않음). LC_DEBUG로 플레이하는 것도 나에게 도움이 되지 않았습니다. Fontconfig가 이렇게 작동하는 이유에 대한 정보를 얻을 수 있는 방법이 있습니까?fc-match "Sans "fc-match "Sans 9"unifont.ttf: "unifont" "Medium"grep -ri unifont /etc/fonts/ ~/.fonts.conf

답변1

얼핏 보면 진짜 글꼴 구성 버그처럼 보입니다. 여기에서는 제대로 작동하고 DejaVu와 Unifont가 모두 설치되어 있기 때문입니다.

$ fc-match Sans
DejaVuSans.ttf: "DejaVu Sans" "Book"
$ fc-match "Sans"
DejaVuSans.ttf: "DejaVu Sans" "Book"
$ fc-match "Sans "
DejaVuSans.ttf: "DejaVu Sans" "Book"
$ fc-match "Sans 9"
DejaVuSans.ttf: "DejaVu Sans" "Book"

하지만 자세히 살펴보면 좀 더 자세한 내용을 볼 수 있습니다. 어딘가에 여전히 글꼴 구성 버그가 있을 수 있지만 fc-match아무것도 찾지 못하면 분명히 기본값을 반환합니다. 내 시스템의 기본값은 DejaVu입니다.

$ fc-match uni
DejaVuSans.ttf: "DejaVu Sans" "Book"
$ fc-match unifont
Unifont.ttf: "unifont" "Medium"
$ fc-match 4e5zedrkbxp
DejaVuSans.ttf: "DejaVu Sans" "Book"

매뉴얼 페이지에서는 fc-match(1)명령이 정확한 일치를 수행하지 않지만 가장 일치한다고 생각되는 항목을 반환한다는 것을 확인합니다. -a다음을 사용하면 모두 볼 수 있습니다 -s.

$ fc-match -s uni # now it also finds unifont
DejaVuSans.ttf: "DejaVu Sans" "Book"
DejaVuSans-Bold.ttf: "DejaVu Sans" "Bold"
DejaVuSans-Oblique.ttf: "DejaVu Sans" "Oblique"
DejaVuSans-BoldOblique.ttf: "DejaVu Sans" "Bold Oblique"
n019003l.pfb: "Nimbus Sans L" "Regular"
helvR12-ISO8859-1.pcf.gz: "Helvetica" "Regular"
FreeSans.ttf: "FreeSans" "нормален"
KanjiStrokeOrders.ttf: "KanjiStrokeOrders" "Medium"
Eadui.ttf: "Eadui" "Medium"
Unifont.ttf: "unifont" "Medium"
FreeSerif.ttf: "FreeSerif" "нормален"
cu12.pcf.gz: "ClearlyU" "Regular"
cu-pua12.pcf.gz: "ClearlyU PUA" "Regular"
10x20.pcf.gz: "Fixed" "Regular"

그런 다음 간단히 "망쳐버려"라고 말하고 그 위에 다른 검색을 추가하면 예상한 대로 일치하는 결과를 얻을 수 있습니다.

$ fc-match -s uni | grep -i uni
Unifont.ttf: "unifont" "Medium"

그러나 귀하의 질문은 그것이 정확히 일치하는 방법에 관한 것입니다. FcFontMatch(3)그리고 기본값/구성된 값을 사용하는지 대략적으로 확인하고 전달한 검색어를 먼저 수정하는지 확실히 확인합니다. 더 깊은 내용을 보려면 다음을 수행해야 합니다.코드를 검사하다(위에서 언급한 기능으로 시작합니다).

답변2

FontConfig는 일치 기준으로부터의 "거리"를 기반으로 속성을 일치시켰습니다. 비하인드 스토리가 궁금하시다면,환경 변수 설정FC_DEBUG=3 검색을 다시 실행하세요. 그러면 도움이 될 수 있는 디버깅 정보가 표시됩니다. FontConfig 코드를 읽을 필요는 없습니다.

관련 정보