批量转换论文正文引用为上标后转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
相关推荐
小贺儿开发1 天前
Unity3D 心理沙盘互动演示
unity·ai·pdf·人机交互·工具·互动·心理沙盘
伟贤AI之路1 天前
为什么AI里的公式复制到Word格式会乱?
人工智能·word·latex
私人珍藏库1 天前
[Windows] PDF工具箱 PDF24 Creator 11.30.0
windows·pdf·工具·软件·多功能
彭于晏Yan1 天前
基于iText7的动态PDF生成技术方案
spring boot·pdf
悟乙己1 天前
Advanced RAG 02:揭秘 PDF 解析
ai·pdf·llm·文档解析
lq12332101 天前
PDF工具箱 PDF24 Creator 11.30.0
pdf
琪伦的工具库1 天前
批量DOCXPDFPPTX文档页拆分工具使用说明:每页拆分/每N页拆分/指定页码范围,支持导出日志
word
忧郁的Mr.Li2 天前
JAVA工具类---PDF电子签章工具类
java·pdf
AscendKing2 天前
免费、易用、覆盖全平台的网页转 PDF 工具
pdf·html·网页保存·网页保存为pdf·保存网页位pdf
优化控制仿真模型2 天前
【26年6月四级】英语四级高频核心词汇1500个pdf电子版+真题
经验分享·pdf