|
| 1 | +<?xml version="1.0"?> |
| 2 | +<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd"> |
| 3 | +<!-- |
| 4 | + base コンテナの日本語の描画 (devbasex/devbase#161) |
| 5 | +
|
| 6 | + このファイルは /etc/fonts/local.conf へ置く。conf.d/ へ置いてはいけない。 |
| 7 | +
|
| 8 | + /etc/fonts/fonts.conf は <include>conf.d</include> の 1 行しか持たず、conf.d を番号順に |
| 9 | + 読む。local.conf は conf.d/51-local.conf 経由で読まれる ── つまりスロット 51 で、 |
| 10 | + sans-serif を WenQuanYi Zen Hei (中国語) へ向けている 64-wqy-zenhei.conf と |
| 11 | + 65-nonlatin.conf より「先」である。 |
| 12 | +
|
| 13 | + <prefer> は一致した総称ファミリの直前へ挿入する (prepend) ため、最も早く読まれた |
| 14 | + <prefer> が先頭に残る。効くのは順序が後だからではなく、先だからである。 |
| 15 | +
|
| 16 | + 同じ内容を conf.d/99-devbase-fonts.conf へ置いて実測した結果 (2026-09-22、arm64): |
| 17 | +
|
| 18 | + 置き場所 fc-match sans-serif fc-match sans-serif:lang=ja |
| 19 | + /etc/fonts/local.conf Noto Sans CJK JP Noto Sans CJK JP |
| 20 | + /etc/fonts/conf.d/99-devbase-fonts.conf WenQuanYi Zen Hei WenQuanYi Zen Hei |
| 21 | +
|
| 22 | + <match target="pattern"> の規則 (下の zh-cn / ko) はどのスロットからでも効くが、 |
| 23 | + <alias><prefer> は 64 / 65 より先に読まれないと効かない。だから 99 では直らない。 |
| 24 | + 規則の種類によって順序への依存が違うため、「99 でも一部は効く」ことを知らないと、 |
| 25 | + 部分的に直ったのを見て置き場所の問題を見落とす。 |
| 26 | +
|
| 27 | + 利用者は ~/.config/fontconfig/fonts.conf (スロット 50、このファイルより先) で |
| 28 | + 上書きできる。実測で確認済み。 |
| 29 | +--> |
| 30 | +<fontconfig> |
| 31 | + <!-- 総称ファミリの先頭を日本語フェイスにする --> |
| 32 | + <alias><family>sans-serif</family><prefer><family>Noto Sans CJK JP</family></prefer></alias> |
| 33 | + <alias><family>sans</family><prefer><family>Noto Sans CJK JP</family></prefer></alias> |
| 34 | + <alias><family>serif</family><prefer><family>Noto Serif CJK JP</family></prefer></alias> |
| 35 | + <alias><family>monospace</family><prefer><family>Noto Sans Mono CJK JP</family></prefer></alias> |
| 36 | + |
| 37 | + <!-- |
| 38 | + 未導入の書体を指定されたときの受け皿 (Meiryo / Yu Gothic / MS PGothic / |
| 39 | + Zen Kaku Gothic New など)。弱い結合なので実在する指定は妨げない。Arial は |
| 40 | + 30-metric-aliases.conf (スロット 30、このファイルより先) の強い結合で |
| 41 | + Liberation Sans へ向くため、受け皿は末尾に付くだけで結果を変えない。 |
| 42 | + --> |
| 43 | + <match target="pattern"> |
| 44 | + <edit name="family" mode="append" binding="weak"><string>Noto Sans CJK JP</string></edit> |
| 45 | + </match> |
| 46 | + |
| 47 | + <!-- |
| 48 | + 中国語・韓国語を明示したときは、その言語の、しかも同じ様式のフェイスを保つ。 |
| 49 | + 総称ファミリを名指しした指定にだけ効かせる (<test name="family">)。 |
| 50 | +
|
| 51 | + この test を省くと、Arial:lang=zh-cn のような欧文の指定まで CJK のフェイスへ |
| 52 | + 奪われる (binding="strong" の前置は名指しの書体よりも強いため)。実測済み。 |
| 53 | + 様式も崩れる ── serif:lang=zh-cn が sans のフェイスになり、monospace:lang=zh-cn が |
| 54 | + 等幅でなくなる。だから総称ファミリ 4 つ × 言語 2 つ = 8 つを並べる。 |
| 55 | +
|
| 56 | + zh-cn は OS 既定の 65-nonlatin.conf と 70-fonts-noto-cjk.conf が正しく扱うので |
| 57 | + 規則なしでも合うが、ko は合わない (上の <alias> が JP を先頭にするため、韓国語が |
| 58 | + 日本語の字形になる)。ko だけ書くと非対称で後から読めないため、8 つで対称にする。 |
| 59 | + --> |
| 60 | + <match target="pattern"> |
| 61 | + <test name="family"><string>sans-serif</string></test> |
| 62 | + <test name="lang" compare="contains"><string>zh-cn</string></test> |
| 63 | + <edit name="family" mode="prepend" binding="strong"><string>Noto Sans CJK SC</string></edit> |
| 64 | + </match> |
| 65 | + <match target="pattern"> |
| 66 | + <test name="family"><string>sans</string></test> |
| 67 | + <test name="lang" compare="contains"><string>zh-cn</string></test> |
| 68 | + <edit name="family" mode="prepend" binding="strong"><string>Noto Sans CJK SC</string></edit> |
| 69 | + </match> |
| 70 | + <match target="pattern"> |
| 71 | + <test name="family"><string>serif</string></test> |
| 72 | + <test name="lang" compare="contains"><string>zh-cn</string></test> |
| 73 | + <edit name="family" mode="prepend" binding="strong"><string>Noto Serif CJK SC</string></edit> |
| 74 | + </match> |
| 75 | + <match target="pattern"> |
| 76 | + <test name="family"><string>monospace</string></test> |
| 77 | + <test name="lang" compare="contains"><string>zh-cn</string></test> |
| 78 | + <edit name="family" mode="prepend" binding="strong"><string>Noto Sans Mono CJK SC</string></edit> |
| 79 | + </match> |
| 80 | + |
| 81 | + <match target="pattern"> |
| 82 | + <test name="family"><string>sans-serif</string></test> |
| 83 | + <test name="lang" compare="contains"><string>ko</string></test> |
| 84 | + <edit name="family" mode="prepend" binding="strong"><string>Noto Sans CJK KR</string></edit> |
| 85 | + </match> |
| 86 | + <match target="pattern"> |
| 87 | + <test name="family"><string>sans</string></test> |
| 88 | + <test name="lang" compare="contains"><string>ko</string></test> |
| 89 | + <edit name="family" mode="prepend" binding="strong"><string>Noto Sans CJK KR</string></edit> |
| 90 | + </match> |
| 91 | + <match target="pattern"> |
| 92 | + <test name="family"><string>serif</string></test> |
| 93 | + <test name="lang" compare="contains"><string>ko</string></test> |
| 94 | + <edit name="family" mode="prepend" binding="strong"><string>Noto Serif CJK KR</string></edit> |
| 95 | + </match> |
| 96 | + <match target="pattern"> |
| 97 | + <test name="family"><string>monospace</string></test> |
| 98 | + <test name="lang" compare="contains"><string>ko</string></test> |
| 99 | + <edit name="family" mode="prepend" binding="strong"><string>Noto Sans Mono CJK KR</string></edit> |
| 100 | + </match> |
| 101 | +</fontconfig> |
0 commit comments