如何在MS Word中制作自定义引文样式?

时间:2018-04-03 03:36:36

标签: xml ms-word

在MS Word中制作自定义引文样式我按照此网页中的说明https://msdn.microsoft.com/en-us/vba/word-vba/articles/create-custom-bibliography-styles

并按照此页面中的步骤进行操作:https://blogs.office.com/en-us/2009/04/29/bibliography-citations-102-building-custom-styles/

这两种方法都不起作用,新样式没有显示在Word的样式列表中,我有单词2016.如果有另一种方法来创建自定义样式而不使用xsl我想知道如何。

3 个答案:

答案 0 :(得分:1)

我也研究了自定义样式,但放弃了这个想法,因为就像您所说的那样,该方法不起作用(甚至在每页末尾都没有最终的代码示例)。

我最终使用Visual Basic,因为您实际上可以通过这种方式访问​​书目数据,因此您可以使用VBA和内容控件来重现引用行为。 (我没有复制引文,而是参考书目)

要使用内容控件,您需要在设置中启用开发人员工具。 现在,您将插入内容控件,而不是实际引用,标题和标签与要引用的源相对应。 (例如,给它一个标题,例如cit_auto和一个与您的源标签相对应的标签) 您需要在开发人员工具中启用“编辑模式”(?),以访问控件的属性。

现在,要访问当前文档的来源,您可以使用ActiveDocument.Bibliography.Sources。要获取所有来源,您可以使用Application.Bibliography.Sources

请注意,Bibliography.SourcesSources对象,而不是Source数组。

内容控件也发生类似的问题。函数ActiveDocument.SelectContentControlsByTitle返回一个ContentControls对象,而不是一个ContentControl数组。

两者都可以使用它们的索引进行迭代和访问,但是,如果要对代码进行模块化,则不能将它们作为相应数组的参数传递。

您可以在ContentControls中迭代For Each,通过将SourceContentControl.Tag匹配来选择相应的Source.Field("Tag")并设置{{1} }转换为您想要的格式:

ContentControl.Range.Text

请注意,我没有对此进行测试,可能可以做得更好。

如果缺少字段,则Source.Field()方法将引发错误,并且将被跳过。 您可以为该方法做一个包装,以在发生错误时插入默认值,然后使用该默认值构建样式。

如果需要访问源的其他字段,可以查看它的Public Sub FillSources() 'assign variable types to get some form of autocomplete Dim cc As ContentControl Dim src As Source Dim srcs As Sources 'get sources Set srcs = ActiveDocument.Bibliography.Sources 'iterate through the 'cit-auto' controls For Each cc In ActiveDocument.SelectContentControlsByTitle("cit_auto") On Error GoTo catch 'pseudo Try For Each src In srcs 'look for the source of the citation If (src.field("Tag") = cc.Tag) Then cc.Range.text = _ 'results in: lastname, firstname: title (day.month.year) src.field("Author/b:Author/b:NameList/b:Person:b/Last") & ", " & _ src.field("Author/b:Author/b:NameList/b:Person:b/First") & ": " & _ src.field("Title") & " (" & _ src.field("Day") & "." & _ src.field("Month") & "." & _ src.field("Year") & ")" End For 'source found, skip to next control End If Next GoTo finally catch: 'pseudo Catch Debug.Print "source " & cc.Tag & " not found" finally:'pseudo Finally Next Debug.Print "done" End Sub 属性,其中包含所有可用数据。您无需在xml的第一层名称上添加.XML前缀,因为b:方法会在缺少时自动添加它。

我也不知道如何处理多位作者,但是也许其他人知道。

答案 1 :(得分:0)

Word的引用&参考书目参考依赖于使用适当编码的xsl样式表。除非您使用第三方应用程序(例如可能支持或不支持自定义引用),否则您无法以任何其他方式执行此操作。

答案 2 :(得分:0)

Yoy 可以复制现有样式(.xsl 文件位于 C:\Program Files (x86)\Microsoft Office\Office14\Bibliography\Style 之类的位置)并从那里开始工作。 第一步是更改名称以在样式列表中正确识别它,因此找到字符串StyleName并修改名称:

  <xsl:when test="b:StyleName">
    <xsl:text>APA Sixth Edition Modified by Me</xsl:text>
  </xsl:when>