批量转换论文正文引用为上标后转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
相关推荐
weixin_3975740914 天前
PDF复杂表格的1:1还原引擎:跨页表格自动拼接技术实战
大数据·人工智能·pdf
Metaphor69214 天前
使用 Python 将 PDF 转换为 HTML
python·pdf·html
2601_9618451514 天前
粉笔行测5000题电子版|pdf|解析
pdf·新媒体运营·github·个人开发·内容运营·规格说明书·极限编程
Sour14 天前
PDF翻译卡住不动怎么办?扫描件、OCR 和大文件排查清单
前端·pdf·ocr
狂奔solar14 天前
OpenDataLoader-PDF 做 PDF 解析可视化调试器
pdf·rag 预处理
chatexcel14 天前
ChatExcel Max使用教程:图片、PDF、网页与复杂Excel的一站式数据分析
数据分析·pdf·excel
绘梨衣54714 天前
PDF表格解析知识总结
开发语言·python·pdf
qq_5469372714 天前
Excel批量转PDF_Word_图片,支持自动合并报表,效率翻倍。
pdf·word·excel
zyplayer-doc14 天前
企业知识库安全与权限管理完全指南:从加密到审计的六层防护
人工智能·安全·pdf·编辑器·创业创新
(Charon)14 天前
【C++ 面试高频:内存管理、RAII 和智能指针详解】
java·开发语言·word