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