如何加粗 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 lines
或 page 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
我使用不同类型的 Microsoft Office Word 2013 文档创建了 table 的内容 (TOC) 标题 链接到目录。当我尝试修改我的 TOC 1 样式以便只有该 TOC 段落内的文本加粗时,它使整个段落 加粗 。我想要实现的是:
这里只有粗体字................................ ...1
而不是像这样将 dot leader lines
或 page 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