繁体   English   中英

对自定义引用类型的交叉引用

[英]Cross reference to custom reference type

我正在尝试将交叉引用添加到 SEQ 字段中。
我的文档包含“点标题”,这意味着用户可以在两个标题元素之间添加扩展名(1.1 和 1.2 之间可能是 1.1A、1.1B、...)

下面是点标题代码的样子:
{STYLEREF "HEADING 2" \\N}{SEQ "HEADING 2 POINT" \\* ALPHABETIC \\S 2}
结果为:1.1A

我希望能够对点标题进行交叉引用。
虽然我可以将引用类型设置为“标题”,但我不知道如何将其引用到自定义元素。

通过网络搜索并没有发现任何解决方案,但有一些可能的线索:

  • 这个解释交叉引用格式的网站包含一个自定义类型的图像(我的新标题)。
  • Microsoft DOCReferenceType 描述是: The type of item for which a cross-reference is to be inserted. Can be any WdReferenceType or WdCaptionLabelID constant The type of item for which a cross-reference is to be inserted. Can be any WdReferenceType or WdCaptionLabelID constant或用户定义的标题标签

我的客户端习惯于使用交叉引用对话框,因此我更喜欢这种方法,但 VBA 脚本也将受到赞赏。

谢谢!

更新:

我将尝试描述我的限制和环境。
标题 1-9 用于多级列表项中,因此它们具有自定义样式。
它们无法更改。

对于此处描述和回答的特定任务,我创建了所谓的“点标题”。
“点标题”基本上是用户可以使用 VBA 宏在多级编号之间添加的扩展。
假设我有两个 Heading 2 项(1.1, 1.2),用户可以添加 1.1A,然后添加 1.1B,依此类推。
用户可以添加从第 2 级到第 5 级的点标题。
他们的风格是'Heading 2 Point','Heading 3 Point'等等,每一种都基于其相关的Heading。

如上所述,最终在文档中,单词字段具有以下结构: {STYLEREF "HEADING 2" \\N}{SEQ "HEADING 2 POINT" \\* ALPHABETIC \\S 2}

我的目标是能够交叉引用这些项目,但它们不会出现在 Heading 类型中,因为它们不是 Heading 样式。

我希望能够创建一个自定义引用类型,它将显示这些项目。

经过一番研究,这是我的答案。 希望它会帮助一些未来的观众。

Private Sub createPointHeader(pointLevel As Integer, Optional appendixPrefix As String = "")
Dim sQuote As String, referencedStyle As String, captionName As String
sQuote = Chr(34)
referencedStyle = appendixPrefix & "Heading " & pointLevel
captionName = referencedStyle & " Point"
With Selection
    .Fields.Add .Range, wdFieldEmpty, "StyleRef " & sQuote & referencedStyle & sQuote & " \n", False
    .Collapse wdCollapseEnd
    CaptionLabels.Add (captionName)
    .InsertCaption Label:=captionName, ExcludeLabel:=True
    ' Select the created field
    .MoveLeft Count:=1, Extend:=True
    ' Replace the syntax from Arabic to Alphabetic
    .Fields.ToggleShowCodes
    With .find
        .Text = "ARABIC"
        .Forward = False
        .Wrap = wdFindStop
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchKashida = False
        .MatchDiacritics = False
        .MatchAlefHamza = False
        .MatchControl = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        .Execute
        If .Found = True Then
            Selection.Range.Text = "ALPHABETIC \s " & pointLevel
        End If
    End With

    .Fields.ToggleShowCodes
    .Fields.Update
    .MoveRight Count:=1
    .InsertAfter vbTab
    .Collapse wdCollapseEnd
    ' Apply style after .InsertCaption, because it changes the style to Caption
    .Style = ActiveDocument.Styles(referencedStyle & " Point")
    End With
End Sub

几点说明

  • 我有两种样式可以根据:标题 (2-5) 和附录标题 (2-5)。 这就是将可选的 appendixPrefix 作为子变量的原因。
  • 我检查过的CaptionLabels.Add可以获得相同的值。 如果它已经存在,则无需提前检查。
  • Selection.InsertCaption自动将样式更改为Caption 这就是我在最后应用样式更改的原因。

结果

  • 这是点标题 2 的样子:
    {STYLEREF "HEADING 2" \\N"}{SEQ HEADING_2_POINT \\* ALPHABETIC \\S 2}

  • 带有点标题的文档快照点标题示例

  • 最后,根据要求,交叉引用交叉引用框中的点标题交叉引用对话框

该问题询问如何创建对自定义引用类型的交叉引用。 我怀疑这个答案实际上可能回应了最初的提问者可能已经得到的东西。

这个想法是使用自定义标题标签。 自定义标题标签(理想情况下)出现在“插入/交叉引用”对话框中。

当您说“插入/标题”,然后要求添加新的自定义标签时,就会创建一个自定义标题标签。

如果您自己在给定文档中添加了自定义标题标签,那么当您说插入/交叉引用...

然而,当您收到一份文档,其中其他人已经添加了交叉引用类型并且您想要编辑它(通过向给定类型的标题添加额外的交叉引用)时,就会出现困难。 这里的秘诀是通过使用自定义标签类型创建新的临时标题,自己添加自定义标题标签(即使它已经存在)。 然后您可以继续删除临时标题,但从那时起您将能够向该标题类型添加交叉引用。

当我想参考“代码片段”或“框”或“算法”时,我会使用它。

我想借此机会作为答案而不是作为评论进行回复,因为回复很长,但希望能让您朝着正确的方向前进。

我认为您已经被您引用的点页面文章引导到了错误的道路上。

我假设我们不能将样式“标题 1”修改为“标题 9”。 如果可以,那么您将能够调整以下建议以仅用于“标题 1”到“标题 9”样式。

您将需要创建一些新样式。 我使用了以下样式

Name                   Based on Style  Outline level

Heading Point 1        Heading 1          1  
Heading Point 2        Heading 2          2  
Heading Point 2 Ext    Heading 2          3
Heading Point 3        Heading 3          4
Heading Point 3 Ext    Heading 3          5
Heading Point 4        Heading 4          6
Heading Point 4 Ext    Heading 4          7
Heading Point 5        Heading 5          8
Heading Point 5 Ext    Heading 5          9

请注意,获得正确的大纲级别对于标题编号很重要。

接下来创建一个新的多级列表。 调用列表“PointNumbering”(因为如果这样做,您可以在需要此功能时通过 VBA 中的名称识别列表)。 将样式“Heading Point 1”到“Heading Point 5 Ext”链接到编号顺序的级别 1 到 9(例如,大纲级别 1 匹配编号顺序中的级别 1 等)。

关闭每个级别的合法样式编号,否则我们将无法使用字母编号。 如下所示设置编号方案。

Level Number style    format levels*   Final Appearance
1     1,2,3,             1                 1
2     1,2,3              1.2               1.1
3     A,B,C              1.23              1.1A
4     1,2,3              1.2.4             1.1.1
5     A,B,C              1.2.45            1.1.1A
6     1,2,3              1.2.4.6           1.1.1.1
7     A,B,C              1.2.4.67          1.1.1.1A
8     1,2,3              1.2.4.6.8         1.1.1.1.1
9     A,B,C              1.2.3.6.89        1.1.1.1.1A
  • 实际级别从下拉列表中选取,并在数字格式框中显示为“1”。 这使得编号错误很容易,所以要小心。 每个级别的最后一个数字是通过在“此级别的数字样式”框中选择数字格式来获得的。

设置样式并确保它们链接到上述编号方案后,您需要调整用于当前文档中标题的样式。

进行搜索和替换以进行以下样式替换

Current Style        New Style
Heading 1            Heading Point 1
Heading 2            Heading Point 2 
Heading 3            Heading Point 3
Heading 4            Heading Point 4 
Heading 5            Heading Point 5 

然后,对于您当前正在使用样式 ref 和 seq 字段创建编号的每个扩展标题,删除字段并应用相关的扩展标题。

因此,对于“Heading Point 2”之后的 A、B、C 编号,应用“Heading Point 2 Ext”样式。

这现在应该意味着可以通过交叉引用对话框访问所有标题点样式。

如果您在“标题 6”级别 6 和“标题点 5 Ext”之后记录标题,您可以正常使用标题样式(标题 6 到标题 9)。 但是,每次使用标题 6 时,您都需要手动重置编号。 我认为这比要求用户插入多个 styleref 和 seq 字段更容易,因为您只需选择然后右键单击标题编号,然后勾选按钮以启用“高级值(跳过编号)”,这允许您重置其中的任何级别您当前的标题编号。

如果您随后需要为您的文档创建一个目录字段,您现在必须使用 \\t 开关并提供样式列表和用于目录中样式的级别编号。 例如 {toc \\t "Heading Point 1,1,Heading Point 2,2,Heading Point 2 Ext,2,Heading Point 3,3,Heading Point 3 Ext,3.....etc}。

我已经在 Word 文档中创建并测试了上述所有内容。

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM