如何加粗 TOC 中的文本,而不是点前导而不是页码?

How to bold the text in TOC, but not the dot leader not the page number?

我使用不同类型的 Microsoft Office Word 2013 文档创建了 table 的内容 (TOC) 标题 链接到目录。当我尝试修改我的 TOC 1 样式以便只有该 TOC 段落内的文本加粗时,它使整个段落 加粗 。我想要实现的是:

这里只有粗体字................................ ...1

而不是像这样将 dot leader linespage number 加粗

整个段落都加粗了......................................1

我可以手动执行此操作,但每次我更新 TOC 时,所有这些更改都会消失(所有内容都再次 bolded/not 加粗)。我怎样才能 bold 只有 text(不是点前导或页码)在 TOC-style?

字段在更新时会丢弃编辑内容 - 您几乎无能为力。有一个 * MergeFormat 开关可以添加到域代码以保留格式。然而,主要缺点是它 "remembers" 按字符位置格式化。因此,如果文本更改(变短或变长)格式 "goes crazy"。因此,我认为这对您没有帮助。

因此,您真正能做的就是在每次目录更新后重新应用格式。最快的方法是使用代码(例如宏)。

这是一个可以在我的系统上进行快速测试的宏。它在 TableOfContents 中搜索每个 TAB 字符。然后,根据 OP 中仅应识别第二个选项卡的附加信息,使用第二个范围检查选项卡之后的位置是否在右边距一厘米以内。

如果是这种情况,它会将查找目标范围从该点重新定位到段落的开头,然后应用格式。

注意 1:您可以通过更改分配给 PageNumLimit 的公式来更改用于确定右边距距离的 "cushion"。

注意 2:我定义了一个名为 Toc1_Text 的 STYLE 并使用它,而不是直接使用 BOLD 进行格式化。并不重要,但我觉得 "cleaner" 比直接格式化 :-)

Sub FormatTextInTOC()
  Dim rngFind As word.Range, rngFound As word.Range
  Dim bFound As Boolean
  Dim toc As word.TableOfContents
  Dim infoH As Double, pageNumLimit As Double

  Set toc = ActiveDocument.TablesOfContents(1)
  toc.Update
  Set rngFind = toc.Range
  pageNumLimit = rngFind.Sections(1).PageSetup.RightMargin _
                 - CentimetersToPoints(1)
  With rngFind.Find
    .ClearFormatting
    .Text = vbTab
    .Style = word.WdBuiltinStyle.wdStyleTOC1
    Do
        bFound = .Execute
        If bFound Then
            Set rngFound = rngFind.Duplicate
            'rngFound.Select
            rngFound.Collapse wdCollapseEnd
            infoH = rngFound.Information(_ 
                    wdHorizontalPositionRelativeToTextBoundary)
            If infoH >= pageNumLimit Then
                'rngFind.Select
                rngFind.Collapse wdCollapseStart
                rngFind.MoveStart wdParagraph, -1
                rngFind.Style = "Toc1_Text"
                rngFind.Start = rngFind.Paragraphs(1).Range.End
                'rngFind.Select
            End If
        End If
    Loop While bFound
  End With
End Sub