带有交叉引用的 word 中表格的数字和字母编号
Number and letter numbering of tables in word with cross-referencing
如何获得如下所示的智能编号系统?每当我有一个新的 table 时,我都希望编号增加。
另一方面,如果我向 table 添加一行,我想在编号后面添加一个字母。
这可能吗?
我已经开始使用字段代码和序列,我相信这是可行的方法。
我知道没有字母的编号可以通过
得到
Number #{ STYLEREF 1\s}{SEQ Table \# "00"}
我也知道可以使用 \alphabetic 命令进行字母编号。
我只是不确定如何组合它们。另外,我想对 table 字幕进行交叉引用。
您可以使用 Word 的 built-in 编号实现此目的 - 无需求助于您需要手动更新的复杂字段组合。
我将概述非常完整的方法...
- 在“主页”选项卡上:Paragraph/Multilevel list/Define 新列表样式。
- 为样式输入一个名称,然后从格式按钮中选择编号;单击更多。
- 在级别 1 selected 中,选择您想要 link 编号(例如标题 1)所使用的样式
- 在 "Enter formatting for number" 字段中键入您希望在每个数字之前或之后出现的任何文本。 (根据你的图片:Header 在数字 1 前面,灰色阴影已经在框中。)
- Select 级别 2,选择您要 link 编号的样式(例如标题 2)
- 在数字前面的"Enter formatting for number"字段中键入(2,灰色底纹):数字#00
- 从 "Include level number from" 下拉列表中,select 级别 1。级别 1 中的数字将插入最后一个 0 和 grey-shaded 2 之间。
- 如有必要,更改对齐设置(您可能不希望在 table 单元格内缩进?)
现在,当您应用标题样式时,编号将自动应用。如果您不喜欢标题样式的格式,您可以更改样式定义。由于您创建了编号样式,您还可以通过再次转到多级编号对话框、right-clicking 您创建的编号格式和 selecting "Modify".[=10= 来更改这些设置]
我相信以下字段代码方法将为您提供示例图像中指示的编号(其中 table 编号对每个标题 1 段落重新开始。但是,它可能只适用于 "in-line" tables,不在文本框中浮动 tables 或 tables 等。
这里的主要目的是确保可以为您需要的每个新 "Number#" 插入完全相同的字段代码,但要实现这一点,您还必须在每个 table。您还需要 select 和 re-execute 所有字段代码 两次 以确保它们正确更新 - 这是 Cindy Meister 的回答提到的那种缺点.
在每个 table 的开头或之前放置以下字段。 (如果您已经将 table 标题 放在每个 table 之前 ,您可以稍微改变一下。)
{ SEQ tbl \s 1 \h }{ SEQ ltr \r0 \h }
这会增加 table 数字,在每个标题 1 段落处重置,并将字母编号重置为 0。
对于您想要在 table 中的每个 "Number #",请使用以下字段:
Number #{ STYLEREF 1 \s }{ SEQ tbl \c #00 }{ SEQ ltr \h }{ IF { REF "chap{ STYLEREF 1 \s }tbl{ SEQ tbl \c }" } > 1 "{ SEQ ltr \c \*alphabetic }" "" }
这会插入适当的标题编号和 table 编号,并增加字母编号。然后它查看一个书签,其中包含此 table 中 "Number #" 个条目的数量。例如,如果标题 1 的编号为 4,并且这是该标题下的第三个 table,则书签将被称为 "chap1tbl4"。如果书签的值大于 1,将附加相应的字母。
但是我们必须创建那个书签和值,我们只能在 table 的所有 "Number #" 字段之后才能这样做。因此,在每个 table 的末尾,或 table 之后和任何新的标题 1 段落之前,您将需要以下字段代码:
{ SET "chap{ STYLEREF 1 \s }tbl{ SEQ tbl \c }" { SEQ ltr \c } }
问题是 Word 按照域代码在文档中出现的顺序计算域代码。因此,当 Word 第一次遇到 table 中的 { REF } 字段时,书签将没有任何价值。所以你第一次 select 所有字段并执行它们时,你可能会看到错误的答案。完成后,书签就创建好了。 Word 将使用最近分配给书签的值,因此下次您执行 "Number #" 字段时,它们应该可以正常工作。
我认为要使用 Cindy Meister 的回答中给出的一般方法实现您想要的效果,您需要有两个单独的标题级别,一个用于不带字母的数字,以及另一个是带字母的数字。然后,用户或某些 VBA(比如)必须为每个 table 决定使用哪个标题级别。但即使是这种情况(她可能还有其他想法),它在操作上可能仍然比 field-based 方法更简单。我怀疑只有你能决定。
可能有更简单的 field-based 公式,但 IME 的基本问题是您无法测试 SEQ 或 SET 字段的 "final value",只能测试它在执行时的值.例如,如果有一个 \f 标志让您测试 SEQ 字段的最终值,您可以使用
{ IF { SEQ "chap{ STYLEREF 1 \s }tbl{ SEQ tbl \c }" \f } > 1 .... }
测试每个 table 中 "Number #" 条目的数量,而不必使用那个笨拙的 end-of-table SET 字段。
如何获得如下所示的智能编号系统?每当我有一个新的 table 时,我都希望编号增加。 另一方面,如果我向 table 添加一行,我想在编号后面添加一个字母。 这可能吗?
我已经开始使用字段代码和序列,我相信这是可行的方法。
我知道没有字母的编号可以通过
得到Number #{ STYLEREF 1\s}{SEQ Table \# "00"}
我也知道可以使用 \alphabetic 命令进行字母编号。
我只是不确定如何组合它们。另外,我想对 table 字幕进行交叉引用。
您可以使用 Word 的 built-in 编号实现此目的 - 无需求助于您需要手动更新的复杂字段组合。
我将概述非常完整的方法...
- 在“主页”选项卡上:Paragraph/Multilevel list/Define 新列表样式。
- 为样式输入一个名称,然后从格式按钮中选择编号;单击更多。
- 在级别 1 selected 中,选择您想要 link 编号(例如标题 1)所使用的样式
- 在 "Enter formatting for number" 字段中键入您希望在每个数字之前或之后出现的任何文本。 (根据你的图片:Header 在数字 1 前面,灰色阴影已经在框中。)
- Select 级别 2,选择您要 link 编号的样式(例如标题 2)
- 在数字前面的"Enter formatting for number"字段中键入(2,灰色底纹):数字#00
- 从 "Include level number from" 下拉列表中,select 级别 1。级别 1 中的数字将插入最后一个 0 和 grey-shaded 2 之间。
- 如有必要,更改对齐设置(您可能不希望在 table 单元格内缩进?)
现在,当您应用标题样式时,编号将自动应用。如果您不喜欢标题样式的格式,您可以更改样式定义。由于您创建了编号样式,您还可以通过再次转到多级编号对话框、right-clicking 您创建的编号格式和 selecting "Modify".[=10= 来更改这些设置]
我相信以下字段代码方法将为您提供示例图像中指示的编号(其中 table 编号对每个标题 1 段落重新开始。但是,它可能只适用于 "in-line" tables,不在文本框中浮动 tables 或 tables 等。
这里的主要目的是确保可以为您需要的每个新 "Number#" 插入完全相同的字段代码,但要实现这一点,您还必须在每个 table。您还需要 select 和 re-execute 所有字段代码 两次 以确保它们正确更新 - 这是 Cindy Meister 的回答提到的那种缺点.
在每个 table 的开头或之前放置以下字段。 (如果您已经将 table 标题 放在每个 table 之前 ,您可以稍微改变一下。)
{ SEQ tbl \s 1 \h }{ SEQ ltr \r0 \h }
这会增加 table 数字,在每个标题 1 段落处重置,并将字母编号重置为 0。
对于您想要在 table 中的每个 "Number #",请使用以下字段:
Number #{ STYLEREF 1 \s }{ SEQ tbl \c #00 }{ SEQ ltr \h }{ IF { REF "chap{ STYLEREF 1 \s }tbl{ SEQ tbl \c }" } > 1 "{ SEQ ltr \c \*alphabetic }" "" }
这会插入适当的标题编号和 table 编号,并增加字母编号。然后它查看一个书签,其中包含此 table 中 "Number #" 个条目的数量。例如,如果标题 1 的编号为 4,并且这是该标题下的第三个 table,则书签将被称为 "chap1tbl4"。如果书签的值大于 1,将附加相应的字母。
但是我们必须创建那个书签和值,我们只能在 table 的所有 "Number #" 字段之后才能这样做。因此,在每个 table 的末尾,或 table 之后和任何新的标题 1 段落之前,您将需要以下字段代码:
{ SET "chap{ STYLEREF 1 \s }tbl{ SEQ tbl \c }" { SEQ ltr \c } }
问题是 Word 按照域代码在文档中出现的顺序计算域代码。因此,当 Word 第一次遇到 table 中的 { REF } 字段时,书签将没有任何价值。所以你第一次 select 所有字段并执行它们时,你可能会看到错误的答案。完成后,书签就创建好了。 Word 将使用最近分配给书签的值,因此下次您执行 "Number #" 字段时,它们应该可以正常工作。
我认为要使用 Cindy Meister 的回答中给出的一般方法实现您想要的效果,您需要有两个单独的标题级别,一个用于不带字母的数字,以及另一个是带字母的数字。然后,用户或某些 VBA(比如)必须为每个 table 决定使用哪个标题级别。但即使是这种情况(她可能还有其他想法),它在操作上可能仍然比 field-based 方法更简单。我怀疑只有你能决定。
可能有更简单的 field-based 公式,但 IME 的基本问题是您无法测试 SEQ 或 SET 字段的 "final value",只能测试它在执行时的值.例如,如果有一个 \f 标志让您测试 SEQ 字段的最终值,您可以使用
{ IF { SEQ "chap{ STYLEREF 1 \s }tbl{ SEQ tbl \c }" \f } > 1 .... }
测试每个 table 中 "Number #" 条目的数量,而不必使用那个笨拙的 end-of-table SET 字段。