批量转换论文正文引用为上标后转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
相关推荐
❀͜͡傀儡师3 小时前
docker一键部署PDF免费工具箱stirling-PDF
docker·容器·pdf
拓端研究室4 小时前
专题:2025中国医疗器械出海现状与趋势创新发展研究报告|附160+份报告PDF、数据、可视化模板汇总下载
大数据·人工智能·pdf
拓端研究室4 小时前
2025人形机器人产业链全景分析报告:核心技术与市场趋势|附130+份报告PDF、数据、可视化模板汇总下载
机器人·pdf
还不秃顶的计科生9 小时前
在Visio中保存PDF时去除空白区域
pdf
私人珍藏库15 小时前
[Windows] PDF文件浏览OCR工具1.0
pdf·ocr
黑咩狗夜.cm1 天前
Aspose.word实现表格每页固定表头、最后一行填满整个页面
开发语言·c#·word
gCode Teacher 格码致知1 天前
Python教学基础:用Python和openpyxl结合Word模板域写入数据-由Deepseek产生
python·word
六元七角八分1 天前
CSDN文章如何转出为PDF文件保存
开发语言·javascript·pdf
涔溪1 天前
Vue 中实现 PDF 文件上传
javascript·vue.js·pdf