如何向 Microsoft Word 添加新的引用和参考书目样式?

如何向 Microsoft Word 添加新的引用和参考书目样式?

在 Microsoft Word 中,有 12 种可用的引用和参考书目样式,如以下屏幕截图所示:

Microsoft Word 中提供的 12 种引用和参考书目样式。

但是,似乎没有简单的方法来添加自定义或新的引文和参考书目样式。不幸的是,我的大学使用自己独特的引文和参考书目样式,这是略微修改过的芝加哥风格。基本上,他们使用 & 符号而不是“and”来指代两位作者。并且他们在参考书目中将年份放在作者后面,中间没有句号。

所以我基本上需要在 Microsoft Word 中添加一种新的引用和参考书目样式,它是芝加哥样式的副本,但有这两个细微的差别。

我对此的研究表明,这可以通过 XML 文件实现。我以前编辑过 XML 文件,但芝加哥风格的 XML 文件在哪里?[编辑:路径似乎是 %APPDATA%\Microsoft\Bibliography)

为了将作者之间的“and”变成“&”符号,并删除参考书目中作者和年份之间的句点(它不存在于内联引用中),我需要更改芝加哥风格的哪些部分?

APA 格式使用“&”符号,但不幸的是,其余格式与 Chicago 格式有很大不同,总体而言,Chicago 格式更接近我的目标格式。我尝试比较 APASixthEditionOfficeOnline.xsl 和 CHICAGO.XSL 文件,看看能否发现差异,从而找到需要更改的内容,因为 APA 使用“&”符号,而 Chicago 使用“and”,但不幸的是,我的 XML 知识水平以及这些文件的大小使我无法发现需要更改的部分。此外,这两种格式都在参考书目中的作者后面加了一个句号。

谢谢任何有关此问题的帮助或提示。

答案1

使用内置样式 .xsl 样式表比较困难,因此以下只是一些建议。主要的困难在于确定更改的适当点 - 具体取决于它是什么,您可能能够进行单一更改,或者您可能必须进行大量类似的更改。这主要是因为这些样式表试图实现一组相当大的“小”规则。无论实施者如何做到这一点,始终很难确定更改样式表中的 XSL 模板会产生正确影响的点。使用不太熟悉的语言并且不提供内部文档也无济于事。

另一个不幸的问题是,您可能必须将修改后的 .xsl 提供给需要处理您的文档的任何人。

但是例如,我建议您首先在您标识的文件夹中保存一份 Chicago.xsl 的副本(位于您的用户区域中,而不是 Program Files 或 Program Files (86) 下的文件夹)。也许称之为 Xhicago.xsl。

然后,当您重新启动 Word 时,您应该会看到相关下拉列表中列出了两种相同的样式。现在在合适的编辑器中打开 .xsl(我目前在这里使用 Visual Studio Code,带有适合 .xml 和其他文件类型的插件)。

尽管如此,您至少可以尝试以下步骤,因为它可以帮助您确定它是否足以满足您当前的需求。

我建议您首先在您指定的文件夹中保存一份 Chicago.xsl 的副本(该文件夹位于您的用户区域中,而不是 Program Files 或 Program Files (86) 下的文件夹)。也许可以将其命名为 Xhicago.xsl。

然后,当您重新启动 Word 时,您应该会在相关下拉列表中看到两个相同的样式。现在打开一个已经包含一些引文和参考书目的测试文档,并使用 Word 的下拉列表在两个 Chicago 样式表之间切换。您应该不会在输出中看到任何变化,但 Word 可能会有点闪烁。

在合适的编辑器中打开 Xhicago.xsl(我目前在这里使用 Visual Studio Code,带有适合 .xml 和其他文件类型的插件)。

在我看来,首先要更改的是 XmlVersion,这样你才能看到原始 Chicago 和新 Chicago 之间的区别。搜索

b:XmlVersion

您应该会看到类似这样的代码(如果您使用的 Chicago.xsl 版本有很大不同,您可能会看到与我看到的不同)。

<xsl:when test="b:XslVersion">

  <xsl:text>16</xsl:text>

</xsl:when>

将 16 改为(比如说)18(我想微软可能已经从我的版本中转移了)然后保存 .xsl。在这里,我通常不需要在测试更改时关闭它。我个人也会写一个 XML 注释 - 除此之外,它确实可以帮助您找到您更改的内容。例如

<xsl:when test="b:XslVersion">

  <!-- 20200402 changed 16 to 18 -->

  <xsl:text>18</xsl:text>

</xsl:when>

我个人也更喜欢将旧代码包装起来,以防再次需要它。

现在,重新启动 Word 并重新打开测试文档。您应该能够在下拉菜单中看到两种不同的“芝加哥”风格,以及两个不同的版本号。

接下来,在 .xsl 中查找

  <xsl:template name="templ_str_AndUnCap" >

你应该看到如下一段代码:

  <xsl:template name="templ_str_AndUnCap" >
    <xsl:param name="LCID" />
    <xsl:variable name="_LCID">
      <xsl:call-template name="localLCID">
        <xsl:with-param name="LCID" select="$LCID"/>
      </xsl:call-template>
    </xsl:variable>
    <xsl:value-of select="/*/b:Locals/b:Local[@LCID=$_LCID]/b:Strings/b:AndUnCap"/>
  </xsl:template>

这样做的目的是设置一个局部变量,该变量包含 .xsl 在需要“and”时将使用的单词,至少在您使用英语语言 ID 时是这样。

每当 Word 想要生成引文或整个参考书目文本时,它都会将 XML 文件传递​​给 .xsl。该文件包含所有相关引文,以及一大堆其他设置。其中一些是常规设置,例如“作者列表中的最后一位作者之前是否应该有一个‘and’”,而有些是与不同的内置样式表相关的设置。此外,可能有许多不同语言代码的设置。例如,XML 可能包含英语的“and”,但法语的“et”。据我所知,没有地方可以让您配置这些设置 - 它们在 Word 的某个地方被硬编码。

所以在更改此代码之前,您需要考虑可能产生什么影响。

首先,据我所知,“and”一词仅在传入 XML 中的一个元素中定义。因此,如果您希望“and”用于作者列表,但不希望用于“翻译者”,则不能依赖传入 XML 为您提供它。我建议的更改是将“and”更改为“&”每个地方其中 .xsl 引用此传入值。此外,它不会考虑语言 ID。但这是我建议的代码:

<xsl:template name="templ_str_AndUnCap" >
    <xsl:param name="LCID" />
    <xsl:variable name="_LCID">
      <xsl:call-template name="localLCID">
        <xsl:with-param name="LCID" select="$LCID"/>
      </xsl:call-template>
    </xsl:variable>
    <!--20200402 use &amp; instead of <xsl:value-of select="/*/b:Locals/b:Local[@LCID=$_LCID]/b:Strings/b:AndUnCap"/>-->
    <xsl:text>&amp;</xsl:text>
  </xsl:template>

现在再次保存 .xsl。当您切换到 Chicago 样式并返回 Xhicago 样式时,您应该会看到参考书目中反映的更改(尽管您可能必须更新参考书目)。如果您任何编码错误很可能您不会看到任何变化,事实上,下次重新启动 Word 时,您可能也不会在列表中看到 Xhicago 样式 - 除非它是有效的 .xsl 并且具有 Word 所需的一些特殊模板,否则 Word 不会加载工作表。

但是,如果一切顺利,并且你有一本有作者的书,

Ionawr, Chwefror, Mawrth and Ebrill

在芝加哥的引文中你应该看到

Ionawr, Chwefror, Mawrth and Ebrill

在参考书目中你会看到

Ionawr, Chwefror, Mawrth, and Ebrill

在芝加哥你应该看到

Ionawr, Chwefror, Mawrth & Ebrill

Ionawr, Chwefror, Mawrth, & Ebrill

分别。

现在我不太喜欢 Luke 后面的逗号,你可以去掉它(同样,可能影响比你希望的要大),方法是寻找

  <xsl:template name="templ_prop_NoCommaBeforeAnd" >

并将那里的文本更改为

  <xsl:template name="templ_prop_NoCommaBeforeAnd" >
    <xsl:param name="LCID" />
    <xsl:variable name="_LCID">
      <xsl:call-template name="localLCID">
        <xsl:with-param name="LCID" select="$LCID"/>
      </xsl:call-template>
    </xsl:variable>
    <!-- 20200402 hard code this one
    <xsl:value-of select="/*/b:Locals/b:Local[@LCID=$_LCID]/b:General/b:NoCommaBeforeAnd"/>
    -->
    <xsl:text>yes</xsl:text>
  </xsl:template>

保存并测试。

最后,去掉作者和年份之间的点是有问题的,原因比我们上面讨论的还要多。例如,它不一定是“年份前的点”。例如,如果没有年份怎么办?(我们甚至还没有讨论用“et. al.”代替实际作者姓名的情况)。

可以解决这个问题的方法是搜索书籍作者列表

<xsl:variable name="theAuthorSufixDot">

并将代码更改为

<xsl:variable name="theAuthorSufixDot">
  <!--this may be enough to suppress the dot between the authors and the year
  <xsl:call-template name="appendField_Dot">
    <xsl:with-param name="field" select="$theAuthorSufix"/>
  </xsl:call-template>
  -->
  <xsl:value-of select="$theAuthorSufix" />
</xsl:variable>

顺便说一句,可能值得四处看看你的大学里是否有人已经做过这项工作。我确实不时为人们做过一些小的修改,但我认为没有得到它全部适合全部情况全部“文化”确实是一个实用的提议,无需花费大量时间来解决该问题。虽然我认为 Word 传递给 XSL 的 XML 的内部结构可能在 .docx 的 ISO 29500 标准中有所描述,但我发现整个领域非常混乱,并决定唯一有帮助的就是有一个样式表,可以遍历 Word 提供的所有 XML。我相信它可以在很多方面得到改进,但这是我的“explore.xsl”。显然,您不能像普通工作表一样使用它,但您可以将它放在与其他 .xsl 文件相同的文件夹中,然后以 Word 中的常规方式切换到它。

顺便说一句,微软关于 .xsl 中需要输入什么内容的文档现在已经很旧了。我认为它没有很好地解释主“选择”中的代码实现的一些“选项”,例如

<xsl:when test="b:XslVersion">

在早期版本的 Word 中是必需的,但在更高版本的 Word 中则不需要,反之亦然。此外,Mac 版 Word 曾一度支持与普通引文布局不同的脚注引文布局。然而,该功能在 Mac Word 2016 中消失了,我认为它不会再回来了。

最后,您会在 Program Files(或 (86) 版本)下的 Microsoft Office 文件夹中找到参考书目系统使用的其他 .XSL 文件。据我所知,这些文件不用于生成引文和 Bib 文本,而仅用于 Word 使用的部分或全部与参考书目相关的对话框。

但是这是explore.xsl:

urn:schemas-microsoft-com:xslt" 
   xmlns:b="http://schemas.openxmlformats.org/officeDocument/2006/bibliography" 
   xmlns:t="http://www.microsoft.com/temp">
   <xsl:output method="html" encoding="utf-8"/>

   <!--Match the root element, and dispatch to its children-->

   <xsl:template match="/">
      <!--<xsl:apply-templates select="*" />-->
      <xsl:choose>
         <xsl:when test="b:Version">
            <xsl:text>2019.10.16</xsl:text>
         </xsl:when>

         <xsl:when test="b:XslVersion">
            <xsl:text>2</xsl:text>
         </xsl:when>



         <xsl:when test="b:StyleNameLocalized">
            <xsl:text>explore</xsl:text>
         </xsl:when>

      <!--<xsl:variable name="book_Title">
         <xsl:value-of select="(b:Title)" />
      </xsl:variable>-->

         <xsl:when test="b:Citation">
            <xsl:call-template name="output-data"/>
         </xsl:when>

         <xsl:when test="b:Bibliography">
            <xsl:call-template name="output-data"/>
         </xsl:when>

      </xsl:choose>

   </xsl:template>

   <xsl:template name="output-data" >
      <html xmlns="http://www.w3.org/TR/REC-html40">
         <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
         </head>
         <body>
            <table>
               <tr>
                  <td>Name</td><td>Value</td>
               </tr>
               <xsl:apply-templates select="node()" />
            </table>
         </body>
      </html>
   </xsl:template>

    <xsl:template match="node()"> 
      <xsl:if test="text()"> 
      <tr>
         <td>
         <!--From the Answer by Daniel Haley in 
            https://stackoverflow.com/questions/953197/how-do-you-output-the-current-element-path-in-xslt -->
            <xsl:for-each select="ancestor-or-self::*">
               <xsl:value-of select="concat('/',local-name())"/>
               <!--Predicate is only output when needed.-->
               <xsl:if test="(preceding-sibling::*|following-sibling::*)[local-name()=local-name(current())]">
                  <xsl:value-of select="concat('[',count(preceding-sibling::*[local-name()=local-name(current())])+1,']')"/>
               </xsl:if>
            </xsl:for-each>
         </td>
         <td>
            <xsl:value-of select="text()"/>
         </td>
      </tr>
      </xsl:if>
      <xsl:apply-templates select="@*"/>
      <xsl:apply-templates select="node()"/>

    </xsl:template>

   <xsl:template match="@*">
      <tr>
         <td>
            <xsl:text>@</xsl:text>
            <xsl:value-of select="name(.)"/>
         </td>
         <td>
            <xsl:value-of select="text()"/>
         </td>
      </tr>
   </xsl:template>

</xsl:stylesheet>

答案2

我基本上需要添加一个新的引用和参考书目样式

您可以安装其他样式。其中一种可能更适合您:

  • 巴西技术规范协会 (ABNT)
  • 计算机协会(ACM)
  • 美国医学会(ACS)
  • 美国医学协会(AMA)
  • 美国社会学协会(ASA)
  • 科学编辑委员会 (CSE)
  • 哈佛——AGPS
  • 哈佛-安格利亚
  • 哈佛 - 埃克塞特
  • 哈佛 - 利兹
  • 人类出版社
  • 电气电子工程师学会
  • 计算机科学讲稿(LNCS)
  • 现代人文研究协会(MHRA)
  • 自然
  • 温哥华

来源安装其他 Word 引用样式 (Mac + Windows)

您还可以使用自定义样式来获得所需的精确格式。有关详细信息,请参阅以下链接:

答案3

我对此的研究表明,这可以通过 XML 文件实现。我以前编辑过 XML 文件,但是芝加哥风格的 XML 文件在哪里?

它位于Office 2016Bibliography/StyleC:\Program Files (x86)\Microsoft Office\Office16\Bibliography\Style。具体路径将根据您安装的 Office 版本而有所不同。

创建自定义书目样式表示新引用样式所需的一切。鉴于该过程需要多个 XML 文件,引用链接会很困难,但无论如何,如何创建自己的样式并不是问题。

答案4

可以通过创建或编辑定义样式规则的 XML 文件来向 Microsoft Word 添加新的引文和参考书目样式。您可以使用现有的样式文件作为模板并根据需要进行修改。样式文件位于计算机上的 %APPDATA%\Microsoft\Bibliography 文件夹中。您还可以从在线来源下载自定义样式文件并将其复制到同一文件夹。

要创建新的样式文件,您可以按照以下步骤操作:

  1. 在文本编辑器或 XML 编辑器中打开现有样式文件(例如 CHICAGO.XSL)。
  2. 用新名称(例如 MYSTYLE.XSL)将文件保存在同一文件夹中。
  3. 编辑文件以更改样式名称、描述和规则。
  4. 保存文件并关闭编辑器。
  5. 重新启动 Microsoft Word 并转到“引用”选项卡。
  6. 在“引文和参考书目”组中,单击“样式”旁边的箭头,然后从列表中选择新样式。

要编辑现有的样式文件,您可以按照以下步骤操作:

  1. 在 %APPDATA%\Microsoft\Bibliography 文件夹中找到样式文件(例如 CHICAGO.XSL)并对其进行备份。
  2. 在文本编辑器或 XML 编辑器中打开样式文件。
  3. 对样式名称、描述和规则进行所需的更改。
  4. 保存文件并关闭编辑器。
  5. 重新启动 Microsoft Word 并转到“引用”选项卡。
  6. 在“引文和参考书目”组中,单击“样式”旁边的箭头,然后从列表中选择已编辑的样式。

要添加对 Word 的新引用,您可以观看此视频:[如何将 APA 第 7 版参考文献样式添加到 MS Word?]。它向您展示如何使用源管理器添加、编辑和重复使用源,以及如何在文档中插入引文和参考书目。

相关内容