【已解决】Obsidian 原装默认无修改的字体无法修改中文字重

已尝试的解决方案

snippets里加入css片段如
body {
–h1-weight: 700;
–h2-weight: 600;
–h3-weight: 600;
–h4-weight: 600;
–h5-weight: 600;
–h6-weight: 600;
}
英文字重可以生效,中文字重不动如山

摸索出解决方法,但仍有疑问:

我注意到,使用Things主题后中文有粗字重了,扒了半天发现是这一条声明,关了就没粗字重开了就有。单独拿出来放入Obsidian默认主题的snippets里也有用,但我看不出来这是为啥啊。。。这条声明里完全没有字重相关的东西啊。。。
body{
–font-interface-theme: -apple-system, BlinkMacSystemFont, ‘Segoe UI’, Roboto,
Inter, Ubuntu, sans-serif;
}

已解决

翻了半天发现obsidian默认中文字体族只引入了雅黑light没有雅黑,light没有700字重。。。而前述方法是因为覆盖了默认字体族,但却没有引入中文字体,于是系统检测到 sans-serif 后就调用了系统默认的无衬线字体,即雅黑,于是就有了700字重
body {
–font-default: ui-sans-serif, -apple-system, BlinkMacSystemFont, “Segoe UI”, Roboto, “Inter”, “Apple Color Emoji”, “Segoe UI Emoji”, “Segoe UI Symbol”, “Microsoft YaHei Light”, sans-serif;
}

1 个赞

找到对应元素的selector用css改吧,这里是一级标题的案例:

h1, .HyperMD-header-1{
  font-weight: 800!important;
}

这个方法我早试过了,只对英文起作用,对中文不起作用 :melting_face:

有可能是你的字体没有多字重,换个字体吧

都是用的默认字体,我都没改。。

我注意到,使用Things主题后中文有粗字重了,扒了半天发现是这一条声明,关了就没粗字重开了就有,单独拿出来放入Obsidian默认主题的snippets里也有用,但我看不出来这是为啥啊。。。这条声明里完全没有字重相关的东西啊。。。
body{
–font-interface-theme: -apple-system, BlinkMacSystemFont, ‘Segoe UI’, Roboto,
Inter, Ubuntu, sans-serif;
}

看起来就是字体的原因啊

字体只装了Regular不够么?,要把meidium,bold 都安装上才能加粗?

解决了,翻了半天发现obsidian默认中文字体族只引入了雅黑light没有雅黑,light没有700字重。。。

感谢楼里的各位, 顺着大家思路研究了一下, 我终于搞明白一点了:


在默认主题 + 实时预览 + 普通笔记段落 时, 其默认字体设置是:

/* 以下 selector, 选中的是 "笔记编辑窗口滚动时, 用户可视的范围" */
.markdown-source-view.mod-cm6 .cm-scroller {
    font-family: var(--font-text);
}

其中, var(--font-text); 来自

--font-text: var(--font-text-override), var(--font-text-theme), var(--font-interface);
/* 那么应该是取三者中第一次被定义的 */

这三个变量中

1 var(--font-text-override)

--font-text-override: '??';  
/* 
'??' 就是默认为空的状态, 
在 Ob 的设置 -> 外观 -> 字体 -> 正文字体 -> 管理 中可调整
Ob 的样式, 以 -override 关键词代指这类设置, 同类还有 
--font-monospace-override: '??';
--font-interface-override: '??';
*/

2 var(--font-text-theme)

--font-text-theme: '??';
/* 来自主题的样式 应该定义在这里 
默认主题里, 这个仍旧为空
*/

主题样式参考可以见 Ob 文档 ref

3 var(--font-interface)

来自 Ob 默认样式

--font-interface: var(--font-interface-override), var(--font-interface-theme), var(--default-font, '??'), var(--font-default);

默认值挺复杂, 但可看出,
--font-interface-override 是指 Ob 的设置界面的UI字体覆盖
--font-interface-theme 是指来自主题的UI字体

所以在没这两项时, 起作用的是随后的两项 var(--default-font, '??'), var(--font-default);

在我这里 --default-font: 未定义, 而 --font-default:

--font-default: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Inter", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Microsoft YaHei Light", sans-serif;

前面一堆字体里除了 -apple-system 应该都不带中文, (ui-sans-serif 具体是啥, 待查)
于是这里终于到楼主说的 微软雅黑 Light
这就是 Windows 版本 Ob 在默认设定下, 第一次找到可用的中文字体


PS. @fantab01 这类型论坛的默认设置是, 如果你回复的是上一楼层的人, 那你的帖子右上角不会显示 image 这个指向标记,

但实际是能回复到那个人的, 我也被坑过好多次~

@fantab01 目前查看是否回复正确的方法:

谢谢,我明白了~~

sans-serif 是无衬线字体,就是黑体,相对的宋体就是serif。 主题内 font-family font-default 这些都删除,去设置界面设置字体比较简单,随时可以换。

感谢~

我今天又顺着查了一堆资料, 目前认为:

  • ui-sans-serif = “操作系统UI” 所用的无衬线字体, 这是为让浏览器能显示跟系统UI相协调的字体
    • 可能不会映射到没适当系统字体的平台上的任何字体 ref
    • 目前除 Safari 外, 没有浏览器支持 ui-xxxx 系列 ref
  • serif, sans-serif = 这俩是衬线和无衬线字体, 一般是设 font-family 的保底方案
    • 要求必须得指向某个具体字体, 不可空缺
    • W3C 草案认为 serif, sans-serif 这俩名起的不好, 是当年以拉丁语为中心的历史问题, 更推荐 “modulated” and “monoline” 但现已不好改了 ref

所以目前判断, 在当前的 Windows → Electron → Chromium 环境的软件里, 这个 ui-sans-serif 应该是没啥作用的