批量转换论文正文引用为上标后转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
相关推荐
缺点内向9 小时前
C#编程实战:如何为Word文档添加背景色或背景图片
开发语言·c#·自动化·word·.net
放飞自我的Coder16 小时前
【PDF拆分 Python拆分左右并排PDF】
python·pdf
开开心心_Every16 小时前
发票批量打印工具支持双面预览页面方向设置
游戏·微信·pdf·华为云·excel·语音识别·googlecloud
AI刀刀16 小时前
千问 文心 元宝 Kimi公式乱码
ai·pdf·豆包·deepseek·ds随心转
yuhulkjv33520 小时前
ChatGPT和Gemini复制到word格式
chatgpt·word
gc_229920 小时前
学习C#调用OpenXml操作word文档的基本用法(21:学习嵌入对象类)
c#·word·openxml·ole
J_liaty21 小时前
Java实现PDF添加水印的完整方案(支持灵活配置、平铺、多页策略)
java·开发语言·pdf
德育处主任Pro21 小时前
『NAS』告别付费和广告,在群晖部署PDF工具箱-bentopdf
pdf·nas
索荣荣21 小时前
Spring Boot 实现DOCX转PDF(基于docx4j的轻量级开源方案)
spring boot·后端·pdf
裴嘉靖21 小时前
uni-app 打包后 PDF 无法生成问题完整解决方案
pdf·uni-app