boxmoe_header_banner_img

Hello! 欢迎来到阿白de小站!

加载中

文章导读

用 Python 把 Word 公式字体一键改成 Times New Roman:我做了个批量处理小工具


avatar
1919033373 2026年 5月 21日 20

写论文的人大概率都遇到过这个问题:

从 Word 自带公式编辑器插入的公式,字体总感觉“不对劲”。

尤其是:

  • 英文字母不是 Times New Roman
  • 变量没斜体
  • 上下标风格不统一
  • 导师一句:“公式格式再规范一点”

然后你开始:

  • 双击公式
  • 一个个选字母
  • 改字体
  • 调斜体

几十个公式还行,几百个公式基本属于折磨。

于是我干脆自己写了个工具,专门处理这个问题。


这个工具能干什么

这个工具主要做两件事:

1. 批量修改 Word 公式字体

自动把 Word 公式中的字母改成:

Times New Roman

支持:

  • 普通公式
  • 上标
  • 下标
  • 分式
  • 根号
  • 求和
  • 多层嵌套公式

而且它不是改正文,而是直接改 Word 里的公式 XML(OMML)。

也就是说:

  • 不影响正文
  • 不影响排版
  • 不影响公式结构

只处理公式里的数学字符。


2. 自动处理公式斜体

数学论文里通常要求:

  • 变量斜体
  • 数字不斜体
  • 运算符不斜体

这个工具默认就是按这个规则来的:

内容 默认处理
x y z 等变量 斜体
数字 不变
括号 不变
根号 / 求和号 不变
分式线 不变

README 里也专门说明了这一点。


为什么我没直接用 VBA

一开始我也试过:

  • Word VBA
  • 样式批处理

但问题很多:

  • 不稳定
  • Word 版本兼容差
  • 容易卡死
  • 对复杂公式支持不好

后来我发现:

.docx 本质上就是一个 zip 包。

里面的公式其实是:

m:r
m:t
m:rPr

这种 OMML 结构。

于是我直接绕开 Word,去改底层 XML。

核心逻辑大概是:

  1. 解压 docx
  2. 找到 word/*.xml
  3. 遍历公式节点
  4. 修改字体属性
  5. 写回 zip

整个过程不依赖 Word COM。

稳定性会高很多。


技术实现

这个项目主要用了:

  • Python
  • lxml
  • zipfile
  • tkinter

其中:

XML 解析

核心使用:

from lxml import etree as ET

直接操作 Word 的 OMML 节点。


docx 处理

因为 .docx 本质是 zip:

with zipfile.ZipFile(src, "r") as zin

所以直接读取并修改内部 XML。


GUI 界面

为了让没 Python 基础的人也能用,我又做了个 tkinter GUI:

  • 选文件
  • 选文件夹
  • 选择输出位置
  • 一键处理

甚至还能:

  • 批量处理整个目录
  • 递归处理子目录
  • 指定只处理某几个字母
  • 强制非变量正体

界面大概长这样:

  • 左边选 Word
  • 中间选规则
  • 下面直接输出日志

整个工具其实已经接近可直接发给同学使用了。


我觉得最麻烦的一部分

其实不是改字体。

而是:

Word 公式的“斜体规则”

Word 的公式并不是简单:

font-style: italic

它内部还有:

<m:sty m:val="i"/>

以及:

<m:nor/>

这些数学样式控制。

不同节点组合不对时:

  • 有的公式会乱码
  • 有的 Word 会提示“内容损坏”
  • 有的字体根本不生效

我后来专门加了一层兼容逻辑:

  • 自动修复错误层级
  • 清理 ctrlPr 里的斜体
  • 修正 w:rPr 位置

避免 Word 打开时报:

Word 发现无法读取的内容

这部分其实花的时间最多。


支持哪些使用场景

目前比较适合:

论文排版

比如:

  • 本科毕业论文
  • 硕士论文
  • SCI
  • EI
  • 数学建模

导师统一格式

有些导师要求:

  • 所有公式统一 TNR
  • 所有变量必须斜体

这个工具可以直接批量跑。


老旧 Word 文档修复

以前很多文档:

  • Cambria Math
  • Symbol
  • 混乱字体

都能统一替换。


GUI 版真的很适合普通人

我后来专门补了 GUI。

因为很多同学:

  • 不会 Python
  • 不会命令行
  • 不会 pip

所以现在基本:

三步完成

  1. 选 Word
  2. 点开始
  3. 等输出

README 里也写得比较详细。


后面准备继续加的功能

目前准备继续做:

  • 公式字号统一
  • 中英文字体分离
  • LaTeX 风格映射
  • 批量处理 doc/docx
  • Office 批处理工具箱

甚至有点想做成:

论文排版自动化工具

最后

这种工具其实很“小”。

但真的能省很多时间。

尤其是论文最后阶段。

你会发现:

真正消耗时间的,
往往不是研究本身。

而是:

  • 格式
  • 字体
  • 编号
  • 对齐
  • Word 的各种玄学问题

如果一个小工具能帮你省掉几个小时重复劳动,
那它就已经值回票价了。


下载链接:https://pan.gt68.cn/file.php?hash=e70d9cc3764ec51253d9cbd039155367

感谢您的支持
支付宝赞赏

支付宝扫一扫



评论(0)

查看评论列表

暂无评论


发表评论

表情 颜文字
插入代码

个人信息

avatar

白白

小皮卡白,一名喜欢钻研的小白。

6
文章
0
评论
1
用户

广告