【问题标题】:How to create a labeled incremental reference in MS Word?如何在 MS Word 中创建带标签的增量引用?
【发布时间】:2013-07-16 16:28:29
【问题描述】:

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

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

结果如图{refdischargeRate}所示并公布 以前在 [{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} 引用。

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

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

【问题讨论】:

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


    【解决方案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”来正确设置它们。

    【讨论】:

    • 即使迷宫也很精彩,这么多年仍然有用!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    相关资源
    最近更新 更多