1

我想在 microsoft word 2010 中手动进行交叉引用(类似于乳胶 \label - \ref 或 \cite - \bibliography)。我发现 Field 函数几乎完全符合我的要求(语法有点奇怪)。如果我在文档中键入以下内容(括号是由 ctrl+f9 生成的字段标记):

{设置放电率 {seq 图}}图 {ref 放电率}:放电率与孔直径。图来自参考文献 [{ref authorA}]。

结果显示在图 {ref dispatchRate} 中,之前发表在 [{ref authorB}] 和 [{ref authorA}] 上。

参考:

{set authorA {seq cites}}[{ref authorA}] 作者、标题、期刊、年份

{set authorB {seq cites}}[{ref authorB}] 作者、标题、期刊、年份

以上产生:

图 1:放电率与孔径的关系。图来自参考文献[1]。

结果如图 1 所示,之前发表在 [2] 和 [1] 中。

参考:

[1] 作者、标题、期刊、年份

[2] 作者、标题、期刊、年份

有没有办法用一个命令而不是这三个命令来定义增量和引用:set、seq 和 ref?或者我如何创建一个为我执行此操作的宏。我正在寻找类似 {setOrRef sequencename labelname} 的东西,它显示一个数字 i+1,以后可以由 {setOrRef sequencename labelname} 引用。

还应该检查标签是否没有重新定义。例如:如果标签不存在,则序列(图或引用)增加 1,并将该数字分配给标签。如果标签存在,则使用标签的现有编号。

我认为这是一个编程问题,因为它非常接近宏和自动化 Ms Word。

4

1 回答 1

1

如果您只想使用域代码而不是其他任何东西,我认为没有一种实用的方法可以避免使用 SEQ、SET 和 REF。

检测书签的存在/不存在有很多困难。我认为您可以使用以下一组嵌套字段来回避它们,但我不能说我已经“真正地”尝试过这个。就个人而言,我会尽量避免这种字段编码的复杂性。

您需要做的就是在 QUOTE 字段中插入一次您想要的书签名称,即用您想要的“书签”名称代替“bm”。在这里,我使用“s”作为提供顺序参考编号的名称。顺便说一下,它实际上不是书签名称,而是 SEQ 名称。

像往常一样,所有的 {} 都必须是可以在 Windows Word 上使用 ctrl-F9 插入的特殊域代码大括号。您仍然需要注意引用的命名,例如不要使用“AuthorA”和“AuthorA1”。您将需要避免使用任何其他 SEQ 名称,例如 AuthorA2,并避免在其他地方使用 SEQ 名称 s 和 s1。

{QUOTE {SET b bm}{SEQ "{b}{SEQ {b}}" \r{SEQ "s{={SEQ {b}}-3 \#"1'';''"}}" \h}{SEQ "{b}1" \c}}

由于它是如何工作的并不明显,我将逐步进行。假设您将参考文献命名为“AuthorA”。然后你会插入

{QUOTE {SET b AuthorA}{SEQ "{b}{SEQ {b}}" \r{SEQ "s{={SEQ {b}}-3 \#"1'';''"}} \h}{SEQ "{b}1" \c}}

书签“b”设置为“AuthorA”

{SEQ "{b}{SEQ {b}}"} 

扩展到

{SEQ "AuthorA{SEQ AuthorA}"}

在 AuthorA 的第一组这样的字段中,这扩展为

{SEQ "AuthorA1" }

在随后的集合中,它扩展到

{SEQ "AuthorA2" } 

等等。

最后一个字段(由 QUOTE 实际插入的字段)

{SEQ "{b}1" \c}

扩展到

{SEQ "AuthorA1" \c}

即它始终是AuthorA 文档中第一组字段返回的值。

AuthorA1 的值由

\r{SEQ "s{={SEQ {b}}-3 \#"1'';''"}}

{SEQ {b}}

扩展到

{SEQ AuthorA}

在 AuthorA 的第一组字段中实际上是 2(这是 Word 的 SEQ 字段评估怪癖之一)。所以

{={SEQ AuthorA}-3}

将是 -1 和数字开关

\#"1'';''"

将返回 ''。所以 AuthorA1 设置为

\r{SEQ "s"}

即序列s的下一个值。

随后,

{={SEQ AuthorA}-3}

大于 0,数字开关返回“1”,因此 AuthorA2 将设置为

\r{SEQ "s1"}

但我们并不关心 AuthorA2 设置的内容。这一位数字格式的目的是确保 { SEQ s } 仅在我们第一次为特定“引用名称”插入这些字段集之一时递增。

为了插入这些东西,你可以创建一个自动文本/构建块来插入块。您需要做的就是更改“bm”。一段 VBA 提示输入书签名称并插入相同的块并不难,但我让你四处寻找。

与往常一样,即使使用建议的一般技术,也可能有一种方法可以简化字段。就个人而言,我认为我会选择一种设计,让我插入某种占位符并要求我运行一些“预发布 VBA”来正确设置它们。

于 2013-09-27T11:27:19.817 回答