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 永久存在

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

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

相关推荐
真的是小恐龙吗?2 小时前
在VSCode中写latex文档,输入部分字符,如何自动补全自定义指令
ide·vscode·编辑器
身如柳絮随风扬2 小时前
Apache POI导出Word,PPT完整实现
spring boot·word·powerpoint·apache
#include<菜鸡>2 小时前
解决vscode里面Gemini Code Assist插件无法使用的问题!!!
ide·vscode·编辑器
山峰哥13 天前
吃透 SQL 优化:告别慢查询,解锁数据库高性能
服务器·数据库·sql·oracle·性能优化·编辑器
holeer14 天前
【V1.0】Typora 中的 HTML 支持|软件文档自翻译
前端·编辑器·html·typora·web·markdown·文档
硬汉嵌入式14 天前
Vim 9.2版本正式发布
编辑器·vim
吹牛不交税14 天前
关于vscode左侧资源管理器目录层级疑似异常的问题
ide·vscode·编辑器
骆驼爱记录14 天前
WPS页码设置:第X页共Y-1页
自动化·word·excel·wps·新人首发