arch+KDE桌面下chrome中文字体回退到了noto-fonts,请问没办法只通过fontconfig解决吗?

症状如图所示,不太理解为什么一个block元素中,前半部分字体是misans,后半部分是宋体(应该是noto-fonts)。

看了 https://catcat.cc/post/2020-10-31/#:~:text=%E5%80%BC%E3%80%82-,Chrome 这个文章,意思好像是说chrome命中字体的实现有bug,但感觉和我的症状不太匹配(中文字体是命中了 mi sans的)。

通过chrome自己的字体设置,设置为misans倒是可以解决,但不够优雅(系统全局设置)

我的 .config/fontconfig/fonts.conf 内容是:

<?xml version='1.0'?>

<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">

<fontconfig>



 <alias>

  <family>sans</family>

  <prefer>

   <family>CaskaydiaCove Nerd Font</family>

   <family>MiSans</family>

  </prefer>

 </alias>

 <alias>

  <family>serif</family>

  <prefer>

   <family>CaskaydiaCove Nerd Font</family>

   <family>MiSans</family>

  </prefer>

 </alias>

 <alias>

  <family>sans-serif</family>

  <prefer>

   <family>CaskaydiaCove Nerd Font Mono</family>

   <family>MiSans</family>

  </prefer>

 </alias>

 <alias>

  <family>monospace</family>

  <prefer>

   <family>CaskaydiaCove Nerd Font Mono</family>

   <family>MiSans</family>

  </prefer>

 </alias>



<match target="pattern">

  <test name="family">

    <string>system-ui</string>

  </test>

  <edit name="family" mode="prepend" binding="strong">

    <string>sans-serif</string>

  </edit>

</match>



<match target="pattern">

  <test name="family">

    <string>sans-serif</string>

  </test>

  <edit name="family" mode="prepend" binding="strong">

   <family>CaskaydiaCove Nerd Font</family>

   <family>MiSans</family>

  </edit>

</match>



<match target="pattern">

  <test name="family">

    <string>sans</string>

  </test>

  <edit name="family" mode="prepend" binding="strong">

   <family>CaskaydiaCove Nerd Font</family>

   <family>MiSans</family>

  </edit>

</match>



<match target="pattern">

  <test name="family">

    <string>serif</string>

  </test>

  <edit name="family" mode="prepend" binding="strong">

   <family>CaskaydiaCove Nerd Font</family>

   <family>MiSans</family>

  </edit>

</match>



<match target="pattern">

  <test name="family">

    <string>monospace</string>

  </test>

  <edit name="family" mode="prepend" binding="strong">

   <family>CaskaydiaCove Nerd Font Mono</family>

   <family>MiSans</family>

  </edit>

</match>

 <match target="font">

  <edit mode="assign" name="hinting">

   <bool>true</bool>

  </edit>

 </match>

 <match target="font">

  <edit mode="assign" name="hintstyle">

   <const>hintslight</const>

  </edit>

 </match>

 <match target="font">

  <edit mode="assign" name="antialias">

   <bool>true</bool>

  </edit>

 </match>

</fontconfig>

Kde 系统设置的字体配置:

我感觉是你的fontconfig的配置问题。我这边用Source Han Sans SC是正常的。

另外这是我的fontconfig

抄一抄你的fontconfig试试 :nerd_face:

挺符合的。你的MiSans不在第一位,因此Google Chrome使用fallback字体,刚好先后命中文鼎宋体和MiSans。

如果只命中第一个 Cascadia Code ,那这个<h3>里应该都回退到宋体才符合症状吧(如果我的理解没无误)。

但症状 <h3>{部分是misans}{部分是宋体}</h3>,一个block里的直接文本(没有嵌套)也能命中两种不同的字体,但是只保留一个misans确实能解决问题。

本来设置想英文&中文用不同的字体的,其它软件都正常。chrome又正常又不正常的:expressionless_face:

最终还是只保留一个 misans 了,好在 misans的英文也不难看。

 <match target="pattern">
   <test name="family">
   <string>...替换的字体</string>
  </test>
  <edit binding="strong" mode="prepend" name="family">
   <family>MiSans</family> <!--只保留一个misans 应对chrome-->
  </edit>
 </match>

我也不太清楚为什么会这样。

可以给 Google Chrome 设置字体,然后它就会比较正常了。见