[2025年6月:更新LXGWWenKaiGB到1.520]

中文字体默认不支持斜体,这与西文字体不同。西文字体如Times New Roman等通常包含专门设计的斜体字形,而中文字体(特别是宋体、黑体等传统中文字体)则没有原生的斜体设计。

在没有专门设计的中文斜体字形时,软件通常采用两种方式实现中文"斜体"效果:

  1. 程序算法倾斜:对字形应用数学变换,将垂直的笔画向右倾斜。这种方法不需要额外的字体文件,Windows系统上的中文斜体大多采用这种方法,如微软雅黑、宋体等字体在应用斜体格式时,操作系统会自动应用算法倾斜;

  2. 专门设计的斜体字形:一些现代中文字体会专门设计斜体版本,例如得意黑Smiley Sans字体等。这些字体的斜体不是简单的机械倾斜,而是经过专业设计,考虑了汉字结构特点。

有些编辑器如Typora、Notion默认支持中文斜体,但是NotePlan没有实现中文字体算法倾斜,需要创建专用的斜体字体文件。本文介绍的方法是通过FontForge工具对霞鹜文楷GB字体应用斜体变换,并生成新的字体文件,从而让NotePlan可以直接调用这个字体来显示斜体文本。

用FontForge生成斜体字体

首先安装fontforge,

brew install --cask fontforge

也可以手动下载安装: https://fontforge.org/en-US/downloads/mac/

本文以开源中文字体 霞鹜文楷GB 为例(本文方法同样适用于其他中文字体):

brew install font-lxgw-wenkai-gb

通过命令行打开FontForge英文界面:

LANG=en_US.UTF-8 open -a FontForge

生成Regular字体的斜体文件

第1步:通过菜单File → Open打开已经安装好的霞鹜文楷GB字体 /Users/<username>/Library/Fonts/LXGWWenKaiGB-Regular.ttf

第2步:通过⌘(command)-A选中所有字体,通过菜单Element → Style → Oblique生成斜体效果。By what angle (in degrees) do you want to slant the font?设置成10-15度,我这里设置成12度,这里的负号表示向右倾斜:

第3步:通过菜单Element → Font Info修改字体信息,保证字体名唯一性(很重要)

修改PS Names的Fontname

修改TTF Names的Styles (SubFamily)、UniqueID和Fullname

第4步:通过菜单File → Generate Fonts将字体保存到 /Users/<username>/Library/Fonts/LXGWWenKaiGB-Italic.ttf

生成Medium字体的斜体文件

第1步:使用同样的方法,用FontForge菜单File → Open打开字体 /Users/<username>/Library/Fonts/LXGWWenKaiGB-Medium.ttf

第2步同上。

第3步:同样要更新字体信息:

修改PS Names的Fontname

修改TTF Names的UniqueID, Fullname, Preferred Styles和Styles (SubFamily)

最后一步:通过菜单File → Generate Fonts将字体保存到 /Users/<username>/Library/Fonts/LXGWWenKaiGB-MediumItalic.ttf

用Font Book查看字体

两个中文斜体字体都已经创建好了,可以通过macOS下的Font Book查看字体,记录下字体的PostScript名称在NotePlan配置中使用。

创建NotePlan自定义主题

创建自定义主题,让NotePlan使用新创建的字体:

nano -w /Users/<username>/Library/Containers/co.noteplan.NotePlan3/Data/Library/Application\ Support/co.noteplan.NotePlan3/Themes/orange-zh.json

内容如下:

{
  "name": "Orange (zh)",
  "style": "Light",
  "author": {
    "name": "Binbin Shen",
    "email": "[email protected]"
  },

  "editor": {
    "backgroundColor": "#ffffff",
    "altBackgroundColor": "#FAFFFF",
    "tintColor": "#d87001",
    "tintColor2": "#0091f8",
    "textColor": "#333333",
    "toolbarBackgroundColor": "#F2F3F5",
    "toolbarIconColor": "#444444",
    "menuItemColor": "#444444",
    "timeBlockColor": "#d87001",
    "shouldOverwriteFont": false
  },

  "styles": {
    "body": {
      "font": "LXGWWenKaiGB-Regular",
      "size": 16,
      "color": "#333333"
    },

    "title1": {
      "color": "#000000",
      "size": 28
    },

    "title2": {
      "color": "#000000",
      "size": 24
    },

    "title3": {
      "color": "#000000",
      "size": 20
    },

    "working-on": {
      "backgroundColor": "#306600FF",
      "color": "#17003B"
    },

    "flagged-1": {
      "backgroundColor": "#22D04023",
      "color": "#59000B"
    },

    "flagged-2": {
      "backgroundColor": "#40E3021D",
      "color": "#420008"
    },

    "flagged-3": {
      "backgroundColor": "#6FFF0202",
      "color": "#1F0004"
    },

    "title-mark1": {
      "color": "#40000000",
      "size": 28
    },

    "title-mark2": {
      "color": "#40000000",
      "size": 24
    },

    "title-mark3": {
      "color": "#40000000",
      "size": 20
    },

    "title4": {
      "color": "#000000",
      "size": 16,
      "underlineStyle": 1
    },

    "title-mark4": {
      "color": "#40000000",
      "size": 18,
      "font": "LXGWWenKaiGB-Regular"
    },

    "bold": {
	  "font": "LXGWWenKaiGB-Medium"
    },

    "bold-left-mark": {
      "color": "#40000000"
    },

    "bold-right-mark": {
      "color": "#40000000"
    },

    "italic": {
	  "font": "LXGWWenKaiGB-Italic"
    },

    "italic-left-mark": {
      "color": "#40000000"
    },

    "italic-right-mark": {
      "color": "#40000000"
    },

    "boldItalic": {
	  "font": "LXGWWenKaiGB-MediumItalic"
    },

    "boldItalic-left-mark": {
      "color": "#40000000"
    },

    "boldItalic-right-mark": {
      "color": "#40000000"
    },

    "code": {
      "font": "Menlo-Regular",
      "color": "#0091f8",
      "size": 15
    },

    "code-left-backtick": {
      "color": "#660091f8"
    },

    "code-right-backtick": {
      "color": "#660091f8"
    },

    "checked": {
      "color": "#66333333",
      "headIndent": 33
    },

    "todo": {
      "color": "#d87001",
      "headIndent": 33,
      "size": 16
    },

    "checked-todo-characters": {
      "headIndent": 33,
      "size": 16
    },

    "tabbed": {
      "headIndent": 43
    },

    "quote-mark": {
      "color": "#800091f8",
      "headIndent": 33,
      "size": 16
    },

    "quote-content": {
      "color": "#CC333333",
	  "font": "LXGWWenKaiGB-Italic",
      "headIndent": 33
    },

    "link": {},

    "schedule-to-date-link": {},

    "done-date": {},

    "schedule-from-date-link": {},

    "note-title-link": {},

    "hashtag": {
      "backgroundColor": "#20d87001"
    },

    "attag": {
      "backgroundColor": "#20d87001"
    },

    "phonenumber": {},

    "highlighted": {
      "backgroundColor": "#6684FF00"
    },

    "highlighted-left-marker": {
      "color": "#40000000"
    },

    "highlighted-right-marker": {
      "color": "#40000000"
    },

    "strikethrough": {
      "color": "#99333333",
      "strikethroughColor": "#DD333333"
    },

    "strikethrough-left-tilde": {
      "color": "#44333333"
    },

    "strikethrough-right-tilde": {
      "color": "#44333333"
    },

    "underline": {
      "underlineStyle": 2,
      "underlineColor": "#FFCC66"
    },

    "underline-left-tilde": {
      "color": "#44333333"
    },

    "underline-right-tilde": {
      "color": "#44333333"
    }
  }
}

主要是设置shouldOverwriteFontfalse,并设置正确的字体名称。霞鹜文楷GB字体在NotePlan上的显示效果还不错:

参考资料