如何在 Word 中用脚注(带上标数字)替换项目符号

如何在 Word 中用脚注(带上标数字)替换项目符号

我有一个 Microsoft Word 文档,其中有 600 多行带编号/项目符号的行(即段落)。如下所示:

  1. 有一天,一个阴沉的午夜,我疲惫不堪地沉思着,¶
  2. 在许多被遗忘的古怪而又令人好奇的传说中——¶
  3. 正当我打瞌睡,点头的时候,突然传来一阵敲击声。¶
  4. 就像有人在轻轻地敲我的房门一样。¶
  5. “有客人来访,”我嘀咕道,“正在敲我的房门——
  6. 仅此而已。"¶

来源:乌鸦埃德加·爱伦·坡 (Edgar Allan Poe) 著,摘自古腾堡计划

...或者它可以是项目符号;我可以很容易地在这两种格式之间切换。

我想将其重新格式化为一篇文章(而不是 600 行),删除数字或项目符号,并在每行后面附加一个脚注(以数字作为上标)(按照当前格式)。如下所示:

一个阴沉的午夜,我疲惫不堪,沉思着,1 翻阅着许多被遗忘的奇异而又令人好奇的传说—— 2 当我打瞌睡,几乎要睡着的时候,突然传来一阵敲门声,3 好像有人轻轻地敲着——敲着我房门。4 “有客人来访,”我喃喃自语,“敲着我房门—— 5 仅此而已。”  6  ¶

______________________________________
1
2
3
4
5
6

脚注应为空白,以便我稍后撰写脚注文本。脚注编号可以按顺序分配,而不考虑段落上的当前编号——但您可以假设段落 按正确的顺序编号,没有跳过或重复的数字或其他特殊情况。

答案1

插入以下 VBA 例程。然后单击文件开头并运行该例程。

Sub Reformat()
    With Selection
        With .Find
            .ClearFormatting
            .MatchWildcards = True
            .Text = "[!^13]^13"
            .Forward = True
            .Wrap = wdFindStop
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchAllWordForms = False
            .MatchSoundsLike = False
        End With
        With .FootnoteOptions
            .Location = wdBottomOfPage
            .NumberingRule = wdRestartContinuous
            .StartingNumber = 1
            .NumberStyle = wdNoteNumberStyleArabic
            .LayoutColumns = 0
        End With
        Do While True
            .Find.Execute
            If Not .Find.Found Then Exit Do
            .MoveLeft Unit:=wdCharacter, Count:=1
            .Range.ListFormat.RemoveNumbers NumberType:=wdNumberParagraph
            .MoveRight Unit:=wdCharacter, Count:=1
            .Footnotes.Add Range:=.Range, Reference:="", Text:=""
            .MoveRight Unit:=wdCharacter, Count:=1
            .TypeText Text:=" "
            .Delete Unit:=wdCharacter, Count:=1
        Loop
    End With
End Sub

如何在 MS Office 中添加 VBA? 以获得关于如何做到这一点的一般指导。

上述代码的一部分实际上是由 Microsoft Word 自动生成的。我并不完全理解每一行,我怀疑其中有些可以省略。以下是我可以解释的几行:

  • .MatchWildcards = True.Text = "[!^13]^13"。这些定义了在文本中查找的内容。通配符模式为您提供了更多功能。在通配符模式下,^13 表示段落分隔符。这通常通过按 生成Enter,在 Word 的“显示隐藏字符”模式下,显示为 ¶。

    [! character(s) ][!匹配除 和之间的任何字符之外的任何字符]。因此 [!^13]匹配除段落分隔符之外的任何字符。将它们放在一起并[!^13]^13匹配前面有普通字符的段落标记 — 换句话说,非空段落的结尾。

  • .Wrap = wdFindStop。到达文档末尾时停止(不要从头继续)。
  • .StartingNumber = 1。我猜这意味着创建的第一个脚注将是 #1,第二个创建的脚注将是 #2,依此类推。(脚注编号不会基于现有的段落编号。)
  • Do While True— 运行“无限”循环。
  • .Find.Execute— 找到下一个段落标记。
  • If Not .Find.Found Then Exit Do— 如果我们找不到,就跳出循环。
  • .MoveLeft Unit:=wdCharacter, Count:=1— 移至段落最后一个字符的左侧。我预计这将是一个标点符号(例如,.!或者?)。
  • .Range.ListFormat.RemoveNumbers NumberType:=wdNumberParagraph — 将段落格式化为普通格式,而不是编号或项目符号。这可能真的只对第一段有必要,但将其留在循环中并在每次迭代中执行它并没有什么坏处。
  • .MoveRight Unit:=wdCharacter, Count:=1— 移动到段落最后一个字符(可能是标点符号)的右边。
  • .Footnotes.Add Range:=.Range, Reference:="", Text:="" — 插入没有文字的脚注。
  • .MoveRight Unit:=wdCharacter, Count:=1 — 移至脚注编号的右侧。
  • .TypeText Text:=" "— 在脚注编号后添加一个空格。(您可能希望将其更改为两个空格。)
  • .Delete Unit:=wdCharacter, Count:=1— 删除段落标记。

我根据以下输入运行了上述操作:

前

得到了这个结果:

后

注意:执行此宏每段需要超过一秒钟的时间。对于 600 段的文档,这需要超过十分钟。在宏运行时,屏幕可能会冻结,Word 可能会显示为“无响应”。因此,如果您打开了其他 Word 窗口,您可能需要关闭它们,或者至少保存它们。然后耐心等待。

相关内容