【问题标题】:MS Word Bibliography/Citation XSL-Template not workingMS Word 参考书目/引文 XSL 模板不起作用
【发布时间】:2014-09-08 19:35:54
【问题描述】:

我想创建一个自定义 Word 参考书目/引文模板,并从 Microsoft site 中获取一个作为基础。无论如何,它不起作用(Windows Office 2013),即 Word 不会在可用模板列表中显示此模板。有人可以帮帮我吗?

我的代码:

<?xml version="1.0" ?>
<!--List of the external resources that we are referencing-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:b="http://schemas.openxmlformats.org/officeDocument/2006/bibliography" xmlns:t="http://www.microsoft.com/temp">
   <!--When the bibliography or citation is in your document, it's just HTML-->
   <xsl:output method="html" encoding="us-ascii"/>
   <!--Match the root element, and dispatch to its children-->
   <xsl:template match="/">
      <xsl:apply-templates select="*" />
   </xsl:template>
   <!--Set an optional version number for this style-->
   <xsl:template match="b:version">
      <xsl:text>2006.5.07</xsl:text>
   </xsl:template>
   <!--Defines the name of the style in the References dropdown-->
   <xsl:template match="b:StyleName">    
      <xsl:text>MyTemplate</xsl:text>
   </xsl:template>
   <!--Specifies which fields should appear in the Create Source dialog when in a collapsed state (The Show All Bibliography Fieldscheckbox is cleared)-->
   <xsl:template match="b:GetImportantFields[b:SourceType = 'Book']">
      <b:ImportantFields>
         <b:ImportantField>
            <xsl:text>b:Author/b:Author/b:NameList</xsl:text>
         </b:ImportantField>
         <b:ImportantField>
            <xsl:text>b:Title</xsl:text>
         </b:ImportantField>
         <b:ImportantField>
            <xsl:text>b:Year</xsl:text>
         </b:ImportantField>
         <b:ImportantField>
            <xsl:text>b:City</xsl:text>
         </b:ImportantField>
         <b:ImportantField>
            <xsl:text>b:Publisher</xsl:text>
         </b:ImportantField>
      </b:ImportantFields>
   </xsl:template>
   <!--Defines the output format for a simple Book (in the Bibliography) with important fields defined-->
   <xsl:template match="b:Source[b:SourceType = 'Book']">
      <!--Count the number of Corporate Authors (can only be 0 or 1-->
      <xsl:variable name="cCorporateAuthors">
         <xsl:value-of select="count(b:Author/b:Author/b:Corporate)" />
      </xsl:variable>
      <!--Label the paragraph as an Office Bibliography paragraph-->
      <p>
         <xsl:choose>
            <xsl:when test ="$cCorporateAuthors!=0">
               <!--When the corporate author exists display the corporate author-->
               <xsl:value-of select="b:Author/b:Author/b:Corporate"/>
               <xsl:text>. (</xsl:text>
            </xsl:when>
            <xsl:otherwise>
               <!--When the corporate author does not exist, display the normal author-->
               <xsl:value-of select="b:Author/b:Author/b:NameList/b:Person/b:Last"/>
               <xsl:text>, </xsl:text>
               <xsl:value-of select="b:Author/b:Author/b:NameList/b:Person/b:First"/>
               <xsl:text>. (</xsl:text>
            </xsl:otherwise>
         </xsl:choose>
         <xsl:value-of select="b:Year"/>
         <xsl:text>). </xsl:text>
         <i>
            <xsl:value-of select="b:Title"/>
            <xsl:text>. </xsl:text>
         </i>
         <xsl:value-of select="b:City"/>
         <xsl:text>: </xsl:text>
         <xsl:value-of select="b:Publisher"/>
         <xsl:text>.</xsl:text>
      </p>
   </xsl:template>
   <!--Defines the output of the entire Bibliography-->
   <xsl:template match="b:Bibliography">
      <html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40">
         <head>                    
            <style>
               p.MsoBibliography, li.MsoBibliography, div.MsoBibliography
            </style>
         </head>
         <body>
            <xsl:apply-templates select ="*">
            </xsl:apply-templates>
         </body>
      </html>
   </xsl:template>
   <!--Defines the output of the Citation-->
   <xsl:template match="b:Citation/b:Source[b:SourceType = 'Book']">
      <html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40">
         <head>
         </head>
         <body>
            <xsl:variable name="cCorporateAuthors">
               <xsl:value-of select="count(b:Author/b:Author/b:Corporate)" />
            </xsl:variable>
            <!--Defines the output format as (Author, Year-->
            <xsl:text>(</xsl:text>
            <xsl:choose>
            <!--When the corporate author exists display the corporate author-->
               <xsl:when test ="$cCorporateAuthors!=0">
                  <xsl:value-of select="b:Author/b:Author/b:Corporate"/>
               </xsl:when>
               <!--When the corporate author does not exist, display the normal author-->
               <xsl:otherwise>
                  <xsl:value-of select="b:Author/b:Author/b:NameList/b:Person/b:Last"/>
               </xsl:otherwise>
            </xsl:choose>
            <xsl:text>, </xsl:text>
            <xsl:value-of select="b:Year"/>
            <xsl:text>)</xsl:text>
         </body>
      </html>
   </xsl:template>
   <xsl:template match="text()" />
</xsl:stylesheet>

【问题讨论】:

    标签: xml xslt ms-word


    【解决方案1】:

    我认为您需要的结构在 2013 年发生了变化,并且引用的文章不正确。您还需要对 StyleNameLocal 进行测试。这里有以下功能,但可能需要一些技巧才能正常工作。查找标记为“新:”的位

    <?xml version="1.0" encoding="utf-8"?>
    <!--List of the external resources that we are referencing-->
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:b="http://schemas.openxmlformats.org/officeDocument/2006/bibliography" xmlns:t="http://www.microsoft.com/temp">
      <!--When the bibliography or citation is in your document, it's just HTML-->
      <xsl:output method="html" encoding="us-ascii" />
      <!--Match the root element-->
      <xsl:template match="/">
        <!-- New: structure change here...-->
        <xsl:apply-templates select="*" />
        <xsl:choose>
          <!--Set an optional version number for this style-->
          <xsl:when test="b:version">
            <xsl:text>2006.5.07</xsl:text>
          </xsl:when>
          <!--Defines the name of the style in the References dropdown-->
          <xsl:when test="b:StyleName">
            <xsl:text>MyTemplate</xsl:text>
          </xsl:when>
          <!--New: need a StyleNameLocalized-->
          <xsl:when test="b:StyleNameLocalized">
            <xsl:choose>
              <!--You will need a when test for each Lcid you want to support-->
              <xsl:when test="b:StyleNameLocalized/b:Lcid='1033'">
                <xsl:text>MyTemplate</xsl:text>
              </xsl:when>
            </xsl:choose>
          </xsl:when>
        </xsl:choose>
      </xsl:template>
      <!--Specifies which fields should appear in the Create Source dialog when in a collapsed state (The Show All Bibliography Fieldscheckbox is cleared)-->
      <xsl:template match="b:GetImportantFields[b:SourceType = 'Book']">
        <b:ImportantFields>
          <b:ImportantField>
            <xsl:text>b:Author/b:Author/b:NameList</xsl:text>
          </b:ImportantField>
          <b:ImportantField>
            <xsl:text>b:Title</xsl:text>
          </b:ImportantField>
          <b:ImportantField>
            <xsl:text>b:Year</xsl:text>
          </b:ImportantField>
          <b:ImportantField>
            <xsl:text>b:City</xsl:text>
          </b:ImportantField>
          <b:ImportantField>
            <xsl:text>b:Publisher</xsl:text>
          </b:ImportantField>
        </b:ImportantFields>
      </xsl:template>
      <!--Defines the output format for a simple Book (in the Bibliography) with important fields defined-->
      <xsl:template match="b:Source[b:SourceType = 'Book']">
        <!--Count the number of Corporate Authors (can only be 0 or 1-->
        <xsl:variable name="cCorporateAuthors">
          <xsl:value-of select="count(b:Author/b:Author/b:Corporate)" />
        </xsl:variable>
        <!--Label the paragraph as an Office Bibliography paragraph-->
        <p>
          <xsl:choose>
            <xsl:when test="$cCorporateAuthors!=0">
              <!--When the corporate author exists display the corporate author-->
              <xsl:value-of select="b:Author/b:Author/b:Corporate" />
              <xsl:text>. (</xsl:text>
            </xsl:when>
            <xsl:otherwise>
              <!--When the corporate author does not exist, display the normal author-->
              <xsl:value-of select="b:Author/b:Author/b:NameList/b:Person/b:Last" />
              <xsl:text>, </xsl:text>
              <xsl:value-of select="b:Author/b:Author/b:NameList/b:Person/b:First" />
              <xsl:text>. (</xsl:text>
            </xsl:otherwise>
          </xsl:choose>
          <xsl:value-of select="b:Year" />
          <xsl:text>). </xsl:text>
          <i>
            <xsl:value-of select="b:Title" />
            <xsl:text>. </xsl:text>
          </i>
          <xsl:value-of select="b:City" />
          <xsl:text>: </xsl:text>
          <xsl:value-of select="b:Publisher" />
          <xsl:text>.</xsl:text>
        </p>
      </xsl:template>
      <!--Defines the output of the entire Bibliography-->
      <xsl:template match="b:Bibliography">
        <html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40">
          <head>
            <style>
    
              p.MsoBibliography, li.MsoBibliography, div.MsoBibliography
    
            </style>
          </head>
          <body>
            <xsl:apply-templates select="*"></xsl:apply-templates>
          </body>
        </html>
      </xsl:template>
      <!--Defines the output of the Citation-->
      <xsl:template match="b:Citation/b:Source[b:SourceType = 'Book']">
        <html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40">
          <head></head>
          <body>
            <xsl:variable name="cCorporateAuthors">
              <xsl:value-of select="count(b:Author/b:Author/b:Corporate)" />
            </xsl:variable>
            <!--Defines the output format as (Author, Year-->
            <xsl:text>(</xsl:text>
            <xsl:choose>
              <!--When the corporate author exists display the corporate author-->
              <xsl:when test="$cCorporateAuthors!=0">
                <xsl:value-of select="b:Author/b:Author/b:Corporate" />
              </xsl:when>
              <!--When the corporate author does not exist, display the normal author-->
              <xsl:otherwise>
                <xsl:value-of select="b:Author/b:Author/b:NameList/b:Person/b:Last" />
              </xsl:otherwise>
            </xsl:choose>
            <xsl:text>, </xsl:text>
            <xsl:value-of select="b:Year" />
            <xsl:text>)</xsl:text>
          </body>
        </html>
      </xsl:template>
      <xsl:template match="text()" />
    </xsl:stylesheet>
    

    另一个关键是将它放在正确的文件夹中,扩展名为 .xsl - 在这里,我保存为

    c:\Users\username\AppData\Roaming\Microsoft\Bibliography\Style\mybib.xsl
    

    其中“用户名”是我的 Windows 用户名,但您的可能在不同的位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-03
      • 2014-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多