Ubuntu下ttf-mscorefonts-installer的安装与Python中Times New Roman字体的应用指南

张开发
2026/4/13 16:59:06 15 分钟阅读

分享文章

Ubuntu下ttf-mscorefonts-installer的安装与Python中Times New Roman字体的应用指南
1. Ubuntu下ttf-mscorefonts-installer字体包安装全攻略第一次在Ubuntu上用matplotlib画论文图表时发现系统默认的英文字体里居然没有Times New Roman这让我这个科研狗差点崩溃。毕竟大多数期刊都要求使用这个经典字体。折腾了半天才发现原来Linux系统默认不包含这些商业字体需要手动安装微软核心字体包。下面我就把踩坑后总结的完整安装流程分享给大家。ttf-mscorefonts-installer是Ubuntu官方仓库提供的微软核心字体安装包包含Times New Roman、Arial、Courier New等12种常用英文字体。虽然这些字体在Windows上是标配但在Linux环境下需要额外安装。这个教程特别适合需要准备学术论文图表、毕业论文排版或者商业文档制作的开发者。2. 安装前的准备工作2.1 系统环境检查在开始安装前建议先更新系统软件包列表。打开终端CtrlAltT执行以下命令sudo apt update sudo apt upgrade检查系统是否已安装fontconfig这个库负责字体配置管理fc-list如果提示命令未找到则需要先安装fontconfigsudo apt install fontconfig2.2 解决可能的依赖问题有些Ubuntu衍生版本如Kali Linux、Linux Mint可能需要额外安装cabextract工具来处理微软的.cab字体压缩包sudo apt install cabextract3. 安装ttf-mscorefonts-installer3.1 常规安装方法执行标准安装命令sudo apt install ttf-mscorefonts-installer安装过程中会出现终端图形界面ncurses界面需要用Tab键切换到OK按钮后按回车。接着会显示微软的EULA协议选择是同意条款。注意在这个步骤很多人会遇到安装失败主要是因为字体服务器连接问题。如果看到Failed to download extra data files错误不要慌下面会介绍手动解决方法。3.2 手动安装方案当自动下载失败时可以到以下目录查看字体下载链接cat /usr/share/package-data-downloads/ttf-mscorefonts-installer这些链接指向微软的字体文件。你可以手动下载所有列出的.ttf文件创建一个临时目录存放这些字体比如~/Downloads/msttcorefonts执行重新配置命令sudo dpkg-reconfigure ttf-mscorefonts-installer在出现的界面中指定你存放字体文件的目录路径。3.3 验证安装结果成功安装后检查字体目录ls /usr/share/fonts/truetype/msttcorefonts/应该能看到包括Times_New_Roman.ttf在内的多个字体文件。也可以用以下命令测试fc-match Times New Roman如果返回Times New Roman字样及文件路径说明安装成功。4. 常见问题解决方案4.1 安装失败后的清理如果安装中途失败想重新开始建议彻底清除后重装sudo apt remove --purge ttf-mscorefonts-installer sudo apt clean sudo apt autoclean然后重新执行安装步骤。4.2 字体缓存更新问题有时即使安装成功系统仍无法识别新字体。这时需要重建字体缓存sudo fc-cache -fv这个命令会强制刷新系统字体缓存-v参数显示详细过程便于排查问题。4.3 特定衍生版的兼容问题在基于Ubuntu的某些发行版如Kali Linux上可能需要额外步骤sudo apt --fix-broken install sudo dpkg --configure -a5. Python中使用Times New Roman字体5.1 基础matplotlib配置最简单的使用方法是在绘图代码开头设置rcParamsimport matplotlib.pyplot as plt plt.rcParams[font.family] Times New Roman plt.rcParams[font.size] 12 # 设置默认字号 # 示例绘图 plt.plot([1,2,3,4]) plt.title(Sample Plot) plt.show()5.2 高级字体管理方法对于更复杂的应用场景建议使用FontProperties指定具体字体文件路径import matplotlib.pyplot as plt import matplotlib.font_manager as fm # 重建字体缓存重要 fm._rebuild() # 指定字体文件路径 font_path /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman.ttf font_prop fm.FontProperties(fnamefont_path) # 应用字体属性 plt.rcParams[font.family] font_prop.get_name() # 绘制图表 fig, ax plt.subplots() ax.plot([1,2,3,4], labelData) ax.set_title(Advanced Font Usage, fontpropertiesfont_prop) ax.legend(propfont_prop) plt.show()5.3 中英文混排解决方案当需要同时显示中文和Times New Roman时可以使用以下配置from matplotlib import rcParams # 设置默认字体 rcParams[font.family] sans-serif rcParams[font.sans-serif] [Times New Roman, SimHei] # Windows中文用户用SimHei rcParams[axes.unicode_minus] False # 解决负号显示问题6. 学术图表优化技巧6.1 SVG输出配置对于需要矢量图输出的论文建议添加以下设置plt.rcParams[svg.fonttype] path # 将文字转为路径避免字体缺失问题这样即使在没有安装Times New Roman的电脑上打开SVG文件也能正常显示。6.2 LaTeX文本渲染如果需要与LaTeX排版风格一致可以启用matplotlib的LaTeX文本渲染plt.rcParams[text.usetex] True plt.rcParams[text.latex.preamble] r\usepackage{times}注意这种方法需要系统安装LaTeX环境会增加图表生成时间。6.3 字体大小与排版规范根据常见学术期刊要求建议使用以下基准尺寸图标题10-12pt坐标轴标签8-10pt刻度标签7-8pt图例文本8-9pt可以通过全局设置统一管理plt.rcParams[axes.titlesize] 12 plt.rcParams[axes.labelsize] 10 plt.rcParams[xtick.labelsize] 8 plt.rcParams[ytick.labelsize] 8 plt.rcParams[legend.fontsize] 97. 其他应用场景扩展7.1 在Jupyter Notebook中使用对于Jupyter用户建议在第一个单元格运行以下代码确保字体生效import matplotlib.pyplot as plt from matplotlib import font_manager # 显式加载字体 font_manager.findfont(Times New Roman, rebuild_if_missingTrue) # 设置全局样式 plt.style.use(seaborn) plt.rcParams[font.family] Times New Roman7.2 配合Pandas绘图Pandas的plot方法也继承matplotlib的字体设置import pandas as pd df pd.DataFrame({data: [1,3,2,4]}) ax df.plot(titlePandas Plot) ax.title.set_fontname(Times New Roman) # 显式设置标题字体7.3 在Seaborn中使用Seaborn基于matplotlib字体设置方法类似import seaborn as sns sns.set(fontTimes New Roman) # 设置全局字体 sns.set_context(paper, font_scale1.2) # 调整字体缩放比例8. 字体管理进阶技巧8.1 多字体切换方案如果需要在不同图表间切换字体可以创建字体属性字典font_props { times: fm.FontProperties(fname/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman.ttf), arial: fm.FontProperties(fname/usr/share/fonts/truetype/msttcorefonts/Arial.ttf) } # 使用特定字体绘图 plt.title(Times Title, fontpropertiesfont_props[times]) plt.xlabel(Arial Label, fontpropertiesfont_props[arial])8.2 自定义字体缓存位置如果不想修改系统字体目录可以将字体放在用户目录并更新缓存mkdir -p ~/.fonts/truetype cp *.ttf ~/.fonts/truetype/ fc-cache -fv然后在Python中指定用户字体路径user_font_path os.path.expanduser(~/.fonts/truetype/Times_New_Roman.ttf)8.3 字体回退机制为确保代码在不同环境下的兼容性可以实现字体回退try: plt.rcParams[font.family] Times New Roman except: print(Times New Roman not found, falling back to DejaVu Sans) plt.rcParams[font.family] DejaVu Sans在实际科研工作中我经常需要为合作者准备图表。最稳妥的做法是导出PDF时将所有文字转为轮廓这样可以完全避免字体兼容问题。在matplotlib中可以通过以下设置实现plt.rcParams[pdf.fonttype] 42 # 输出Type 42字体可编辑 # 或者 plt.rcParams[pdf.fonttype] 3 # 将文字转为路径不可编辑但兼容性最好

更多文章