You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何更改Plots.jl用于LaTeX字符串的字体包?

解决Plots.jl中\mathcal{I}显示为\mathcal{J}的字体问题

核心问题原因

Plots.jl默认使用的LaTeX字体(如Computer Modern)中,\mathcal{I}的字形设计与\mathcal{J}高度相似,导致视觉上误显示为\mathcal{J}。此外,直接全局设置fontfamily会与LaTeX渲染引擎冲突,引发报错。


解决方案1:局部指定LaTeX字体包(最小侵入)

在需要显示\mathcal{I}的LaTeX字符串中加载calrsfs包,该包的手写体字体中\mathcal{I}为标准竖线带顶杠的样式,完全区分于\mathcal{J}:

using Plots
using LaTeXStrings

plot([1],[1], ylabel=L"\usepackage{calrsfs}\mathcal{I}")

此方法无需修改全局配置,仅针对单个标签调整,适合已有大量代码的场景。

解决方案2:全局设置LaTeX渲染字体

若需所有LaTeX文本统一使用正确字体,可通过default()设置texfont参数,指定支持标准\mathcal{I}的字体(如cmbright或mathpazo):

using Plots
using LaTeXStrings

default(texfont="cmbright") # 或 "mathpazo"
plot([1],[1], ylabel=L"\mathcal{I}")

全局生效后,所有LaTeX标签都会自动使用指定字体,无需逐个修改。

解决自定义字体与LaTeX冲突的报错问题

之前设置fontfamily="Bookman"或Times Roman报错,是因为全局字体设置仅作用于普通文本,与LaTeX渲染引擎的字体配置不兼容。需分开设置普通文本字体和LaTeX渲染字体:

using Plots
using LaTeXStrings

# 设置普通文本字体
default(fontfamily="Times Roman")
# 设置匹配的LaTeX字体(确保支持标准手写体)
default(texfont="times")

plot([1],[1], ylabel=L"\mathcal{I}")

注意:不要混用普通字符串与LaTeX字符串拼接(如string("𝓘", L"1")),此类操作会触发渲染冲突,应直接在LaTeX字符串内完成内容编写(如L"\mathcal{I}1")。


内容的提问来源于stack exchange,提问作者Derick Diana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 16:12:55