批量转换论文正文引用为上标后转PDF保持上标

Word 的 Font.Superscript = True 实际上:

  • 并不是"真正的"数学/排版上标;

  • 而是把字体垂直位置上移一小段(约33%)

  • 在 Word → PDF 时,不同字体或 PDF 引擎会重新计算基线

    导致上标"掉下来"或"与正文对齐",看起来不像上标。

尤其是:

  • 使用中文字体(宋体、仿宋、微软雅黑等);

  • 或 Word 版本较旧 / PDF 导出使用"快速打印"模式;

  • 或 Word 中混用了不同语言的字体(中文正文+英文字体)

解决方案(从易到难,建议按顺序尝试)

方案 1:统一字体并强制上标

在 Word 中:

全选文档(Ctrl + A

设置字体为一个统一的中英文混排兼容字体,例如:

Times New Roman + 宋体

等线(DengXian)

确保"引用上标"的字体与正文一致

再导出 PDF 时,选择:

文件 → 另存为 → PDF

点击"选项"

勾选 "符合 ISO 19005-1(PDF/A)"

→ 这样 Word 会嵌入字体,不会丢失上标定位

方案 2:VBA 强制设定字体高度与上移比例

如果你希望脚本层面就避免掉落,可以修改宏,使"上标"不仅仅设置 Superscript = True

而是手动调整文字大小与上移量

vbscript 复制代码
Sub SuperscriptCitations_MainTextOnly_EnhancedPDF()
    Dim doc As Document
    Dim para As Paragraph
    Dim rng As Range
    Dim refStart As Long
    Dim fontSize As Single

    Set doc = ActiveDocument
    refStart = 0

    ' 定位参考文献部分
    For Each para In doc.Paragraphs
        If InStr(para.Range.Text, "参考文献") > 0 Or InStr(para.Range.Text, "参考资料") > 0 Then
            refStart = para.Range.Start
            Exit For
        End If
    Next para

    For Each para In doc.Paragraphs
        If refStart > 0 And para.Range.Start >= refStart Then Exit For
        If para.Range.Information(wdWithInTable) Then GoTo NextPara
        If para.Range.StoryType <> wdMainTextStory Then GoTo NextPara

        Set rng = para.Range
        With rng.Find
            .ClearFormatting
            .Text = "\[[0-9]{1,3}\]"
            .MatchWildcards = True
            Do While .Execute
                fontSize = rng.Font.Size
                rng.Font.Superscript = True
                rng.Font.Position = 4 ' 垂直上移4磅
                rng.Font.Size = fontSize * 0.75 ' 缩小字体比例
                rng.Collapse wdCollapseEnd
            Loop
        End With

        Set rng = para.Range
        With rng.Find
            .ClearFormatting
            .Text = "\([0-9]{1,3}\)"
            .MatchWildcards = True
            Do While .Execute
                fontSize = rng.Font.Size
                rng.Font.Superscript = True
                rng.Font.Position = 4
                rng.Font.Size = fontSize * 0.75
                rng.Collapse wdCollapseEnd
            Loop
        End With

        Set rng = para.Range
        With rng.Find
            .ClearFormatting
            .Text = "([0-9]{1,3})"
            .MatchWildcards = True
            Do While .Execute
                fontSize = rng.Font.Size
                rng.Font.Superscript = True
                rng.Font.Position = 4
                rng.Font.Size = fontSize * 0.75
                rng.Collapse wdCollapseEnd
            Loop
        End With

NextPara:
    Next para

    MsgBox "✅ 上标已重新定位并固定,导出 PDF 时不会掉落!"
End Sub
相关推荐
Metaphor6922 小时前
使用 Python 给 PDF 设置背景色或背景图
数据库·python·pdf
DS随心转插件3 小时前
AI导出鸭:DeepSeek 转 Word 效果实测与案例展示
人工智能·ai·word·豆包·deepseek·ai导出鸭
2601_961845156 小时前
新高考一卷真题2025|真题PDF全科整理
线性代数·矩阵·pdf·动态规划·概率论·高考
复园电子6 小时前
企业PDF批量盖章开发集成指南:API对接OA/LIMS系统,高并发落地实战
开发语言·python·pdf
itgather7 小时前
OfficeExcel — Word / Excel DLL 验证台功能介绍
c#·word·excel
2601_961845157 小时前
2026四级作文预测题|英语四级写作押题+提纲PDF
java·c语言·数据库·c++·python·pdf·php
VBA说7 小时前
俄罗斯诚信码的批量识别,pdf文件也可
pdf
DS随心转插件8 小时前
AI导出鸭深度评测:DeepSeek 转 Word 实战表现与边界分析
人工智能·ai·word·文心一言·deepseek·ai导出鸭
yuhulkjv3358 小时前
Kimi如何导出pdf | AI导出鸭 独家深度测评
人工智能·ai·chatgpt·pdf·ai导出鸭
被放养的研究生9 小时前
各软件中的 pt 有何不同?PDF 查看器、Draw.io 与 LaTeX 的单位陷阱
pdf·draw.io