批量转换论文正文引用为上标后转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,
而是手动调整文字大小与上移量
Sub SuperscriptCitations_MainTextOnly_EnhancedPDF()Dim doc As DocumentDim para As ParagraphDim rng As RangeDim refStart As LongDim fontSize As SingleSet doc = ActiveDocumentrefStart = 0' 定位参考文献部分For Each para In doc.ParagraphsIf InStr(para.Range.Text, "参考文献") > 0 Or InStr(para.Range.Text, "参考资料") > 0 ThenrefStart = para.Range.StartExit ForEnd IfNext paraFor Each para In doc.ParagraphsIf refStart > 0 And para.Range.Start >= refStart Then Exit ForIf para.Range.Information(wdWithInTable) Then GoTo NextParaIf para.Range.StoryType <> wdMainTextStory Then GoTo NextParaSet rng = para.RangeWith rng.Find.ClearFormatting.Text = "\[[0-9]{1,3}\]".MatchWildcards = TrueDo While .ExecutefontSize = rng.Font.Sizerng.Font.Superscript = Truerng.Font.Position = 4 ' 垂直上移4磅rng.Font.Size = fontSize * 0.75 ' 缩小字体比例rng.Collapse wdCollapseEndLoopEnd WithSet rng = para.RangeWith rng.Find.ClearFormatting.Text = "\([0-9]{1,3}\)".MatchWildcards = TrueDo While .ExecutefontSize = rng.Font.Sizerng.Font.Superscript = Truerng.Font.Position = 4rng.Font.Size = fontSize * 0.75rng.Collapse wdCollapseEndLoopEnd WithSet rng = para.RangeWith rng.Find.ClearFormatting.Text = "([0-9]{1,3})".MatchWildcards = TrueDo While .ExecutefontSize = rng.Font.Sizerng.Font.Superscript = Truerng.Font.Position = 4rng.Font.Size = fontSize * 0.75rng.Collapse wdCollapseEndLoopEnd WithNextPara:Next paraMsgBox "✅ 上标已重新定位并固定,导出 PDF 时不会掉落!"
End Sub
