我想在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。
答案 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”来正确设置它们。