word自带公式编辑器自动将公式变成正体

  • Microsoft Word 对象 -> ThisDocument
  • 模块 -> 模块1

要操作的是 模块1 ,不是 ThisDocument,也不是"引用"。

你现在该怎么做

第 1 步:双击"模块1"

在左侧项目树里,双击:

text 复制代码
模块1

右边会出现代码窗口。


第 2 步:把代码放进"模块1"

如果里面已经有你之前那段旧宏,可以直接删掉,换成下面这段。

这段已经把字体设成 STIX Two Math 了:

vb 复制代码
Sub FixEquationStyleSmart()
    Dim rngStory As Range
    Dim eq As OMath
    Dim r As Range
    Dim funcs As Variant
    Dim i As Long

    funcs = Array( _
        "sin", "cos", "tan", "cot", "sec", "csc", _
        "arcsin", "arccos", "arctan", _
        "sinh", "cosh", "tanh", _
        "ln", "log", "lg", "exp", _
        "lim", "min", "max", "sup", "inf", _
        "det", "dim", "mod", "gcd", "lcm", _
        "ker", "deg", "arg", "Pr" _
    )

    Application.ScreenUpdating = False

    For Each rngStory In ActiveDocument.StoryRanges
        Do
            For Each eq In rngStory.OMaths

                eq.Range.Font.Name = "STIX Two Math"
                eq.Range.Font.Italic = True

                For i = LBound(funcs) To UBound(funcs)
                    Set r = eq.Range.Duplicate
                    With r.Find
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = funcs(i)
                        .Forward = True
                        .Wrap = wdFindStop
                        .Format = False
                        .MatchCase = True
                        .MatchWholeWord = True
                        .MatchWildcards = False
                    End With

                    Do While r.Find.Execute
                        r.Font.Italic = False
                        r.Font.Name = "STIX Two Math"
                        r.Collapse wdCollapseEnd
                    Loop
                Next i

            Next eq

            Set rngStory = rngStory.NextStoryRange
        Loop Until rngStory Is Nothing
    Next rngStory

    Application.ScreenUpdating = True

    MsgBox "公式已处理完成。", vbInformation
End Sub

你要注意

这句已经帮你设置字体了:

vb 复制代码
eq.Range.Font.Name = "STIX Two Math"

所以你不用再去别的地方设置字体名


第 3 步:运行宏

把光标点到这段代码里面任意一行,然后按:

text 复制代码
F5

如果键盘上的 F5 不方便,也可以点顶部菜单:

text 复制代码
运行 -> 运行子过程/用户窗体

第 4 步:回到 Word 看结果

运行完后,回到论文文档里检查公式:

  • 字体会尽量改成 STIX Two Math
  • 单个变量通常会是斜体
  • sincoslnloglim 这些会尽量保持正体

你现在不用碰的地方

你当前左侧这些里:

  • ThisDocument不用点
  • 引用不用点
  • 模块1就操作这里

如果"模块1"里已经有旧代码

你有两种做法。

做法 A:直接全部替换

把原来代码全删掉,粘贴我上面这段新的。

做法 B:保留旧宏,再加一个新宏

如果你想保留旧的,也可以把新代码直接粘在旧代码下面。

只要宏名字不同就行。

你现在这个新宏名字是:

vb 复制代码
FixEquationStyleSmart

运行后如果没有变化

最常见有 3 个原因:

1. 文档里的公式不是 Word 自带公式

如果是 MathType 公式或图片,这个宏改不了。

它只能处理 Word 内置公式

2. 宏没真的运行

看有没有弹出:

text 复制代码
公式已处理完成。

如果没弹,说明没跑成功。

3. 某些公式本身被手动设置过特殊格式

这种少数情况可能要单独再处理。


保存怎么选

因为你把宏放在 Project(学位论文) 下面:

  • 想保留这段宏代码:保存为 .docm
  • 只想保留改好的公式结果:保存为 .docx 也可以

也就是说,公式修改结果会保留 ,只是宏代码本身在 .docx 里通常不会保留。


你现在就做这一件事:
双击"模块1"→ 把代码换成上面这段 → 按 F5。


把宏搬到 Normal(Normal.dotm) 的意思是:

把代码从 当前文档的 VBA 项目 移到 Word 的全局模板 里。这样以后任何 Word 文档都能运行这个宏,而且你的论文仍然可以保存成 .docx

我给你一步一步操作(照做基本不会错)👇


一、打开 VBA 编辑器

在 Word 里按:

复制代码
Alt + F11

左侧会看到类似:

复制代码
MathTypeCommands (MathType Commands 2016)
Normal
Project()
Project(EndNote Cwyw)
Project(学位论文)

二、在 Normal 里新建模块

在左侧找到:

复制代码
Normal

展开它。

你会看到类似:

复制代码
Normal
   Microsoft Word 对象
       ThisDocument

然后:

1️⃣ 右键点击 Normal

选择:

复制代码
插入 → 模块

这时会出现:

复制代码
Normal
   模块
       Module1

(名字可能是 Module1 或 Module2)


三、把宏代码粘进去

双击刚刚创建的:

复制代码
Module1

右边会出现代码窗口。

把你的宏 完整粘进去

vb 复制代码
Sub FixEquationStyleSmart()

    Dim rngStory As Range
    Dim eq As OMath
    Dim r As Range
    Dim funcs As Variant
    Dim i As Long

    funcs = Array( _
        "sin", "cos", "tan", "cot", "sec", "csc", _
        "arcsin", "arccos", "arctan", _
        "sinh", "cosh", "tanh", _
        "ln", "log", "lg", "exp", _
        "lim", "min", "max", "sup", "inf", _
        "det", "dim", "mod", "gcd", "lcm", _
        "ker", "deg", "arg", "Pr" _
    )

    Application.ScreenUpdating = False

    For Each rngStory In ActiveDocument.StoryRanges
        Do
            For Each eq In rngStory.OMaths

                eq.Range.Font.Name = "STIX Two Math"
                eq.Range.Font.Italic = True

                For i = LBound(funcs) To UBound(funcs)

                    Set r = eq.Range.Duplicate

                    With r.Find
                        .Text = funcs(i)
                        .Forward = True
                        .Wrap = wdFindStop
                        .MatchCase = True
                        .MatchWholeWord = True
                    End With

                    Do While r.Find.Execute
                        r.Font.Italic = False
                        r.Font.Name = "STIX Two Math"
                        r.Collapse wdCollapseEnd
                    Loop

                Next i

            Next eq

            Set rngStory = rngStory.NextStoryRange

        Loop Until rngStory Is Nothing

    Next rngStory

    Application.ScreenUpdating = True

    MsgBox "公式已处理完成。"

End Sub

四、运行宏

把光标放到代码里任意位置,然后按:

复制代码
F5

或者回到 Word 按:

复制代码
Alt + F8

选择:

复制代码
FixEquationStyleSmart

点击 运行


五、保存 Normal 模板(关键)

关闭 Word 时,Word 很可能会弹出提示:

复制代码
是否保存 Normal.dotm 的更改?

一定要点:

复制代码
保存

这样宏才会永久存在。


六、以后使用方法

以后在任何 Word 文档里:

复制代码
Alt + F8

就能看到:

复制代码
FixEquationStyleSmart

点击运行即可。

你的论文仍然可以保存为:

复制代码
xxx.docx

不会再出现 模块消失 的问题。


七、一个小建议(很重要)

以后不要把宏放在论文文档里,统一放到:

复制代码
Normal → 模块

原因:

位置 结果
Project(论文) docx 保存会丢
Normal 永久存在

如果你愿意,我可以再教你一个更稳的版本

运行时只修改 选中的公式,而不是整篇文档全部扫描。这样对论文更安全。

相关推荐
笨笨饿1 小时前
26_为什么工程上必须使用拉普拉斯变换
c语言·开发语言·人工智能·嵌入式硬件·机器学习·编辑器·概率论
H@Z*rTE|i4 小时前
vscode 安装配置claudeCode 配置美团免费模型LongCat-Flash-Thinking-2601的每天500000token 保姆级教程
ide·vscode·编辑器
浔川python社5 小时前
浔川代码编辑器 v4.0 升级版 公告
编辑器
笨笨饿6 小时前
博客目录框架
c语言·开发语言·arm开发·git·嵌入式硬件·神经网络·编辑器
@BruceYan@7 小时前
VSCode Insiders 添加 OpenAI 兼容模型
ide·vscode·编辑器·copilot·自定义模型
cui_ruicheng8 小时前
Linux基础开发工具(一):软件管理与 Vim 编辑器入门
linux·编辑器·vim
北冥有羽Victoria9 小时前
Django 实战:SQLite 转 MySQL 与 Bootstrap 集成
大数据·服务器·python·django·编辑器
阿华田51210 小时前
基于VScode构建企业级云容器开发平台技术方案
ide·vscode·编辑器
时光之源1 天前
使用ssh用Cursor/TRAE/VSCode链接远程服务器并运行可视化程序,显示在本地机器上,全流程教学!
ide·vscode·编辑器