Lazy loaded imageR 中加载与使用系统字体

type
status
date
slug
summary
tags
category
icon
password
comment
一文讲清:系统装字体 → R 导入 → 设备加载 → 图中调用 → PDF 嵌入。重点用 extrafont,兼顾 ggplot2、base 图形与 grid 系统。

快速上手


1. extrafont 是做什么的?

  • 目的:让 R 能识别并使用你电脑里的 TrueType/OpenType 字体(如 Cambria MathNoto Sans Math、中文字体等)。
  • 流程
      1. font_import:扫描并登记系统字体信息到 extrafontdb
      1. loadfonts:把已登记字体注册到具体绘图设备(Windows 屏幕、pdf、postscript)。
      1. 使用:在绘图主题/参数里指定 family = "字体名"
      1. 嵌入:将字体真正打包进 PDF,解决跨机查阅缺字/替换问题。

2. 在 Windows 安装字体(系统层面)

  • 双击 .ttf/.otf安装(建议“为所有用户安装”)。
  • 常见数学/符号字体:Cambria Math(Office 自带)、Noto Sans MathSTIX Two Math
  • 安装后 重启 R/RStudio,再做 font_import

3. 用 extrafont 导入与加载

3.1 导入字体(首次或新增字体后)

小贴士
  • fonttable() 查看已登记字体表;fonts() 查看当前可用字体名。
  • 新装字体后需 重新 font_import 才会出现在 extrafont 数据库。

3.2 加载到绘图设备


4. 在图里使用字体

4.1 ggplot2

4.2 base R

4.3 grid / forestploter


5. 导出 PDF 并“嵌入字体”

extrafont 能让 pdf() 使用到系统字体,但很多 PDF 阅读器仍会替换字体。解决方案:嵌入字体到 PDF 文件。

5.1 安装 Ghostscript

  • Windows 下安装后记住路径,例如:
    • C:/Program Files/gs/gs10.04.0/bin/gswin64c.exe
  • R 里告诉 extrafont

5.2 导出与嵌入


6. 常见问题与排查

Q1. font_import() 很慢?

  • pattern= 精准筛选,如 pattern = "Noto|Cambria";
  • 或指定路径:font_import(paths = "C:/Windows/Fonts", prompt = FALSE)

Q2. 绘图时报 unknown family

  • 字体名不匹配。用 fonts()/fonttable() 查实际名称;
  • Windows 建议用 windowsFonts(别名 = windowsFont("实际名")),再用 par(family="别名")
  • 重启 R 后,记得 loadfonts(device="win")/("pdf")

Q3. PDF 里字体被替换?

  • 需要 loadfonts(device="pdf") + embed_fonts()
  • 确保 R_GSCMD 指向 Ghostscript 的可执行文件。

Q4. 中文或 CJK 字体乱码?

  • 优先选带完整 CJK 字形的字体(如 SimSun 宋体、Microsoft YaHei 微软雅黑等),同样走 font_importloadfonts
  • 若仍不稳,备选方案showtext(兼容性强,跨平台省心)。

7. 进阶:和 R Markdown / Quarto 配合

  • HTML 输出:浏览器自身渲染,若使用 web 字体(Google Fonts)更稳定;
  • PDF 输出:沿用本文流程(loadfonts("pdf") + embed_fonts()),或用 showtext
  • 在 YAML 里指定 mainfont: "Cambria Math"(需 Pandoc/LaTeX 能识别该字体)。

8. 最小可复现脚本(Windows)


总结:在 Windows 上,extrafont 的标准操作是
安装系统字体 → font_import()loadfonts("win"/"pdf") → 在图里 family="字体名"embed_fonts()
配合 pattern 精准导入和 Ghostscript 嵌入 PDF,就能做出跨设备也稳定一致的出版级图表。
 
Prev
Chrome 使用全攻略
Next
R 中的数据类型完整指南
Loading...
Article List
Evan の Logbook
✨ Updates
🎨 Style Guide
🧠 Creative Resources
🗒️ Mind Notes
🧭 Knowbase
📘 SOPs
🩺 Medical Research
🛠️ Tech Chronicles
💰 Fortune Blueprint
📈 R Visionary
📊 Statistics
🖼️ BioVis