如何在MS Word中创建标记的增量引用?

时间:2013-07-16 16:28:30

标签: macros reference ms-word ms-office word-vba

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

  

{set dischargeRate {seq Figure}}图{ref dischargeRate}:放电   速率与孔径。图来自参考[{ref authorA}]。

     

结果如图{ref dischargeRate}所示并公布   以前在[{ref authorB}]和[{ref authorA}]。

     

参考文献:

     

{set authorA {seq cites}} [{ref authorA}] author,title,journal,year

     

{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,并将该编号分配给标签。如果标签存在,则使用标签的现有编号。

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

1 个答案:

答案 0 :(得分:0)

如果你想使用字段代码而不是别的,我认为没有一种实用的方法可以避免使用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"}

即。序列的下一个值。

随后,

{={SEQ AuthorA}-3}

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

\r{SEQ "s1"}

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

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

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