Word 365 IEEE 引文包含作者姓名和年份

Word 365 IEEE 引文包含作者姓名和年份

我如何更改 IEEE XML 以便引用包含作者姓名和文本“[1] McDonald (2011)”而不仅仅是数字“[1]”?

答案1

您可以考虑的事情。没有一个是简单的,而且选项 (4) 似乎不适用于 IEEE,原因我还无法弄清楚。

  1. (在我看来,这是最难的选择)创建一个满足您需求的新版 IEEE 书目样式。我将在下面概述所需的内容。书目样式在您计算机上的 XSLT 文件 (.xsl) 中定义,因此如果其他人需要以您看到的方式查看您的文档,您必须向他们提供您的 .xsl 文件并告诉他们如何安装它。
  2. 相反,从 Yves Dhondt 创建的风格之一开始,他试图让你更容易地创建自己的风格:看这里
  3. 如果可能的话,请选择另一种更接近您需要的书目样式。
  4. 如果您只需要插入和维护一些引文,请考虑手动将您想要的文本添加到引文中。不是很现代,而且比它应该的要难,但比选项 (1) 简单得多!

让我们来处理选项 4。插入引文时,Word 会插入一个带有小菜单的环绕框,里面是引文字段。如果您使用的是 Windows 桌面版 Word,则可以看到字段代码之间的切换,可能看起来像这样

{ CITATION xyz01 \l 2057 }

和现场结果,例如

[5]

您可以手动修改字段代码,使其看起来像这样

{ CITATION xyz01 \l 2057 \s " Einstein, 1908" }

然后选择该字段,更新它并使用 Alt-F9 显示结果。

不幸的是,IEEE 样式似乎在这里不起作用,但如果这是一种可行的方法,那么可能值得在您的系统上尝试一下。此外,有时 Word 不允许您编辑引文字段,原因并不明显。

对于选项 1,修改现有的书目样式涉及几个步骤,例如:

  1. 决定你的引文应该实际上包含您需要使用的每种类型的来源、您需要使用的每种语言(我们假设现在只有 1 种),以及您的来源中可能存在的每种类型/组合(单个作者、多个作者、编辑、公司作者等)。如果您的情况很简单(例如,每种来源类型总是有一位作者,如果有多个作者,则只需要引文中的第一个作者),那么这可能相当容易处理。麻烦的是,如果您不知道要求是什么,就尝试编写必要的 .xsl。
  2. 编写必要的 .xsl 代码并修改实际生成引文的代码部分。
  3. 修改 .xsl 的名称和版本信息。否则,使用它可能会非常混乱
  4. 将 .xsl 放入正确的文件夹
  5. 让所有这些工作正常。调试这些 .xsl 的唯一方法是将它们加载到 Word 中并尝试它们。Word 甚至不会加载包含 XSLT 语法错误的新 .xsl。

例如,要修改 IEEE 样式,请查找名为

C:\Users\<yourusername>\AppData\Roaming\Microsoft\Bibliography\Style

比如我的情况是

C:\Users\sj\AppData\Roaming\Microsoft\Bibliography\Style

在其中,找到IEEE2006OfficeOnline.xsl并在同一文件夹中复制一份名为 的文件IEEE2023OfficeOnline.xsl。此后,始终使用新文件 - 不要修改原始文件。

在纯文本编辑器(例如记事本、Visual Studio Code 或类似编辑器)中打开IEEE2023OfficeOnline.xsl,然后进行以下更改:

  1. 全局替换IEEEIEEE 2023或任何你喜欢的语言)。如果你的默认语言不使用,IEEE则进行适当的更改。例如,如果你碰巧使用哈萨克语区域设置 1087,则需要更改此代码:

      <xsl:when test="b:StyleNameLocalized/b:Lcid='1087'">
        <xsl:text>Электр және электроника инженерлері институты</xsl:text>
      </xsl:when>
    
  2. 在文件顶部附近找到这段文字

        <xsl:when test="b:Version">
            <xsl:text>2010.2.02</xsl:text>
        </xsl:when>
    
        <xsl:when test="b:XslVersion">
            <xsl:text>2006</xsl:text>
        </xsl:when>
    
  3. 将其更改为:

        <xsl:when test="b:Version">
            <xsl:text>2023-01-05</xsl:text>
        </xsl:when>
    
        <xsl:when test="b:XslVersion">
            <xsl:text>2023</xsl:text>
        </xsl:when>
    
  4. 找到下面一段代码:

    <xsl:template name="Citation">
    
  5. 向下滚动大约 60 行,直到看到:

                        <xsl:if test="b:LastAuthor">
                            <xsl:call-template name="templ_prop_SecondaryClose"/>
                        </xsl:if>
    
  6. 之后插入以下代码:

                        <xsl:call-template name ="CitDisplayAuthorBook">
                            <xsl:with-param name ="DisplayEditorIfAuthorUnavailale" select="'true'" />
                        </xsl:call-template>
    
  7. 转到文件底部,您应该看到以下内容:

    </xsl:stylesheet>
    
  8. 在其上方,插入以下代码(基于用于生成参考书目的作者/编辑者姓名的代码)。它实际上仅适用于书籍,可能比引文中需要的更复杂,并且可能不适用于其他类型的来源,但应该可以让您了解修改这些 .xsls 所涉及的内容。注意:如果您看到一些拼写错误,它是从原始代码中复制的!我无法在答案中完全正确地缩进此代码:

    <xsl:template name="CitDisplayAuthorBook">
        <xsl:param name ="DisplayEditorIfAuthorUnavailale"/>
        <xsl:variable name ="cAuthors">
            <xsl:value-of select ="count(b:Source/b:Author/b:Author/b:NameList/b:Person)"/>
        </xsl:variable>
        <xsl:variable name="cCorporateAuthors">
            <xsl:value-of select="count(b:Source/b:Author/b:Author/b:Corporate)" />
        </xsl:variable>
        <xsl:variable name="prop_APA_FromToDash">
            <xsl:call-template name="templ_prop_FromToDash"/>
        </xsl:variable>
    
    <xsl:variable name="cEditor">
        <xsl:value-of select="count(b:Source/b:Author/b:Editor/b:NameList/b:Person)" />
    </xsl:variable>
    
    <xsl:variable name="cYear">
        <xsl:value-of select ="count(b:Source/b:Year)"/>
    </xsl:variable>
    
    <xsl:text> </xsl:text>
    <xsl:choose>
        <xsl:when test ="$cAuthors=0">
            <xsl:choose>
                <xsl:when test="$cCorporateAuthors=0">
                    <xsl:choose>
                        <xsl:when test ="$cEditor=0 or $DisplayEditorIfAuthorUnavailale!='true'">
                            <xsl:if test="$cYear!=0">
                                <xsl:text>Published: </xsl:text>
                            </xsl:if>
                        </xsl:when>
                        <xsl:otherwise>
                            <xsl:call-template name="CitDisplayEditorNL"/>
                        </xsl:otherwise>
                    </xsl:choose>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="b:Source/b:Author/b:Author/b:Corporate"/>
                    <xsl:choose>
                        <xsl:when test="$cAuthors=0">
                            <xsl:choose>
                                <xsl:when test="$cYear!=0">
                                    <xsl:call-template name ="templ_prop_ListSeparator"/>
                                </xsl:when>
                                <xsl:otherwise>
                                    <xsl:call-template name ="templ_prop_Dot"/>
                                </xsl:otherwise>
                            </xsl:choose>
                        </xsl:when>
                        <xsl:otherwise>
                            <xsl:choose>
                                <xsl:when test="$cYear!=0">
                                    <xsl:call-template name ="templ_prop_ListSeparator"/>
                                </xsl:when>
                                <xsl:otherwise>
                                    <xsl:call-template name ="templ_prop_Dot"/>
                                </xsl:otherwise>
                            </xsl:choose>
                        </xsl:otherwise>
                    </xsl:choose>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:when>
    
        <xsl:when test="$cAuthors=1">
            <xsl:for-each select="b:Source/b:Author/b:Author/b:NameList/b:Person">
                <xsl:variable name ="cAuthorFirstName">
                    <xsl:value-of select ="count(b:First)"/>
                </xsl:variable>
                <xsl:variable name ="cAuthorLastName">
                    <xsl:value-of select ="count(b:Last)"/>
                </xsl:variable>
                <xsl:variable name ="cAuthorMiddleName">
                    <xsl:value-of select ="count(b:Middle)"/>
                </xsl:variable>
                <xsl:choose>
                    <xsl:when test="$cAuthorFirstName=1">
                        <xsl:choose>
                            <xsl:when test="contains(b:First,$prop_APA_FromToDash)">
                                <xsl:call-template name="HandleSPaceHypenInAuthor">
                                    <xsl:with-param name="author">
                                        <xsl:call-template name="right-trim">
                                            <xsl:with-param name ="s" select="b:First"/>
                                        </xsl:call-template>
                                    </xsl:with-param>
                                </xsl:call-template>
                                <xsl:call-template name ="templ_prop_Space"/>
                            </xsl:when>
                            <xsl:otherwise>
                                <xsl:call-template name="splitAuthorSpace">
                                    <xsl:with-param name ="first">
                                        <xsl:call-template name="right-trim">
                                            <xsl:with-param name ="s" select="b:First"/>
                                        </xsl:call-template>
                                    </xsl:with-param>
                                </xsl:call-template>
                                <xsl:call-template name ="templ_prop_Space"/>
                            </xsl:otherwise>
                        </xsl:choose>
                    </xsl:when>
                </xsl:choose>
    
                <xsl:choose>
                    <xsl:when test="$cAuthorMiddleName=1">
                        <xsl:choose>
                            <xsl:when test="contains(b:Middle,$prop_APA_FromToDash)">
                                <xsl:call-template name="HandleSPaceHypenInAuthor">
                                    <xsl:with-param name="author">
                                        <xsl:call-template name="right-trim">
                                            <xsl:with-param name ="s" select="b:Middle"/>
                                        </xsl:call-template>
                                    </xsl:with-param>
                                </xsl:call-template>
                                <xsl:call-template name ="templ_prop_Space"/>
                            </xsl:when>
                            <xsl:otherwise>
                                <xsl:call-template name="splitAuthorSpace">
                                    <xsl:with-param name ="first">
                                        <xsl:call-template name="right-trim">
                                            <xsl:with-param name ="s" select="b:Middle"/>
                                        </xsl:call-template>
                                    </xsl:with-param>
                                </xsl:call-template>
                                <xsl:call-template name ="templ_prop_Space"/>
                            </xsl:otherwise>
                        </xsl:choose>
                    </xsl:when>
                </xsl:choose>
                <xsl:choose>
                    <xsl:when test="$cAuthorLastName=1">
                        <xsl:value-of select="b:Last"/>
                        <xsl:choose>
                            <xsl:when test="$cAuthors=0">
                                <xsl:choose>
                                    <xsl:when test="$cYear!=0">
                                        <xsl:call-template name ="templ_prop_ListSeparator"/>
                                    </xsl:when>
                                    <xsl:otherwise>
                                        <xsl:call-template name ="templ_prop_Dot"/>
                                    </xsl:otherwise>
                                </xsl:choose>
                            </xsl:when>
                            <xsl:otherwise>
                                <xsl:choose>
                                    <xsl:when test="$cYear!=0">
                                        <xsl:call-template name ="templ_prop_ListSeparator"/>
                                    </xsl:when>
                                    <xsl:otherwise>
                                        <xsl:call-template name ="templ_prop_Dot"/>
                                    </xsl:otherwise>
                                </xsl:choose>
                            </xsl:otherwise>
                        </xsl:choose>
                    </xsl:when>
                </xsl:choose>
            </xsl:for-each>
        </xsl:when>
    
        <xsl:when test="$cAuthors>1">
            <xsl:for-each select="b:Source/b:Author/b:Author/b:NameList/b:Person">
                <xsl:variable name ="cAuthorFirstName">
                    <xsl:value-of select ="count(b:First)"/>
                </xsl:variable>
                <xsl:variable name ="cAuthorLastName">
                    <xsl:value-of select ="count(b:Last)"/>
                </xsl:variable>
                <xsl:variable name ="cAuthorMiddleName">
                    <xsl:value-of select ="count(b:Middle)"/>
                </xsl:variable>
    
                <xsl:choose>
                    <xsl:when test ="(position())=$cAuthors">
                        <xsl:call-template name ="templ_prop_Space"/>
                        <xsl:call-template name ="templ_str_AndUnCap"/>
                        <xsl:call-template name ="templ_prop_Space"/>
                    </xsl:when>
                </xsl:choose>
    
                <xsl:choose>
                    <xsl:when test="$cAuthorFirstName=1">
                        <xsl:choose>
                            <xsl:when test="contains(b:First,$prop_APA_FromToDash)">
                                <xsl:call-template name="HandleSPaceHypenInAuthor">
                                    <xsl:with-param name="author">
                                        <xsl:call-template name="right-trim">
                                            <xsl:with-param name ="s" select="b:First"/>
                                        </xsl:call-template>
                                    </xsl:with-param>
                                </xsl:call-template>
                                <xsl:call-template name ="templ_prop_Space"/>
                            </xsl:when>
                            <xsl:otherwise>
                                <xsl:call-template name="splitAuthorSpace">
                                    <xsl:with-param name ="first">
                                        <xsl:call-template name="right-trim">
                                            <xsl:with-param name ="s" select="b:First"/>
                                        </xsl:call-template>
                                    </xsl:with-param>
                                </xsl:call-template>
                                <xsl:call-template name ="templ_prop_Space"/>
                            </xsl:otherwise>
                        </xsl:choose>
                    </xsl:when>
                </xsl:choose>
                <xsl:choose>
                    <xsl:when test="$cAuthorMiddleName=1">
                        <xsl:choose>
                            <xsl:when test="contains(b:Middle,$prop_APA_FromToDash)">
                                <xsl:call-template name="HandleSPaceHypenInAuthor">
                                    <xsl:with-param name="author">
                                        <xsl:call-template name="right-trim">
                                            <xsl:with-param name ="s" select="b:Middle"/>
                                        </xsl:call-template>
                                    </xsl:with-param>
                                </xsl:call-template>
                                <xsl:call-template name ="templ_prop_Space"/>
                            </xsl:when>
                            <xsl:otherwise>
                                <xsl:call-template name="splitAuthorSpace">
                                    <xsl:with-param name ="first">
                                        <xsl:call-template name="right-trim">
                                            <xsl:with-param name ="s" select="b:Middle"/>
                                        </xsl:call-template>
                                    </xsl:with-param>
                                </xsl:call-template>
                                <xsl:call-template name ="templ_prop_Space"/>
                            </xsl:otherwise>
                        </xsl:choose>
                    </xsl:when>
                </xsl:choose>
                <xsl:choose>
                    <xsl:when test="$cAuthorLastName=1">
                        <xsl:value-of select="b:Last"/>
                        <xsl:if test="((position()+1)!=$cAuthors) and (position()&lt;$cAuthors)">
                            <xsl:call-template name ="templ_prop_ListSeparator"/>
                        </xsl:if>
                    </xsl:when>
                </xsl:choose>
            </xsl:for-each>
            <xsl:choose>
                <xsl:when test="$cAuthors=0">
                    <xsl:choose>
                        <xsl:when test="$cYear!=0">
                            <xsl:call-template name ="templ_prop_ListSeparator"/>
                        </xsl:when>
                        <xsl:otherwise>
                            <xsl:call-template name ="templ_prop_Dot"/>
                        </xsl:otherwise>
                    </xsl:choose>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:choose>
                        <xsl:when test="$cYear!=0">
                            <xsl:call-template name ="templ_prop_ListSeparator"/>
                        </xsl:when>
                        <xsl:otherwise>
                            <xsl:call-template name ="templ_prop_Dot"/>
                        </xsl:otherwise>
                    </xsl:choose>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:when>
    </xsl:choose>
    
    <xsl:if test="$cYear!=0">
        <xsl:value-of select="b:Source/b:Year"/>
    </xsl:if>
    
    </xsl:template>
    
    <xsl:template name ="CitDisplayEditorNL">
        <xsl:variable name="cEditor">
            <xsl:value-of select="count(b:Source/b:Author/b:Editor/b:NameList/b:Person)" />
        </xsl:variable>
    
    <xsl:variable name="prop_APA_FromToDash">
        <xsl:call-template name="templ_prop_FromToDash"/>
    </xsl:variable>
    
    <xsl:choose>
        <xsl:when test="$cEditor = 1">
            <xsl:variable name ="cEditorFirstName">
                <xsl:value-of select ="count(b:Source/b:Author/b:Editor/b:NameList/b:Person/b:First)"/>
            </xsl:variable>
            <xsl:variable name ="cEditorLastName">
                <xsl:value-of select ="count(b:Source/b:Author/b:Editor/b:NameList/b:Person/b:Last)"/>
            </xsl:variable>
            <xsl:variable name ="cEditorMiddleName">
                <xsl:value-of select ="count(b:Source/b:Author/b:Editor/b:NameList/b:Person/b:Middle)"/>
            </xsl:variable>
            <xsl:choose>
                <xsl:when test="$cEditorFirstName=1">
                    <xsl:choose>
                        <xsl:when test="contains(b:Source/b:Author/b:Editor/b:NameList/b:Person/b:First,$prop_APA_FromToDash)">
                            <xsl:call-template name="HandleSPaceHypenInAuthor">
                                <xsl:with-param name="author">
                                    <xsl:call-template name="right-trim">
                                        <xsl:with-param name ="s" select="b:Source/b:Author/b:Editor/b:NameList/b:Person/b:First"/>
                                    </xsl:call-template>
                                </xsl:with-param>
                            </xsl:call-template>
                            <xsl:call-template name ="templ_prop_Space"/>
                        </xsl:when>
                        <xsl:otherwise>
                            <xsl:call-template name="splitAuthorSpace">
                                <xsl:with-param name ="first">
                                    <xsl:call-template name="right-trim">
                                        <xsl:with-param name ="s" select="b:Source/b:Author/b:Editor/b:NameList/b:Person/b:First"/>
                                    </xsl:call-template>
                                </xsl:with-param>
                            </xsl:call-template>
                            <xsl:call-template name ="templ_prop_Space"/>
                        </xsl:otherwise>
                    </xsl:choose>
                </xsl:when>
            </xsl:choose>
            <xsl:choose>
                <xsl:when test="$cEditorMiddleName=1">
                    <xsl:choose>
                        <xsl:when test="contains(b:Source/b:Author/b:Editor/b:NameList/b:Person/b:Middle,$prop_APA_FromToDash)">
                            <xsl:call-template name="HandleSPaceHypenInAuthor">
                                <xsl:with-param name="author">
                                    <xsl:call-template name="right-trim">
                                        <xsl:with-param name ="s"  select="b:Source/b:Author/b:Editor/b:NameList/b:Person/b:Middle"/>
                                    </xsl:call-template>
                                </xsl:with-param>
                            </xsl:call-template>
                            <xsl:call-template name ="templ_prop_Space"/>
                        </xsl:when>
                        <xsl:otherwise>
                            <xsl:call-template name="splitAuthorSpace">
                                <xsl:with-param name ="first">
                                    <xsl:call-template name="right-trim">
                                        <xsl:with-param name ="s" select="b:Source/b:Author/b:Editor/b:NameList/b:Person/b:Middle"/>
                                    </xsl:call-template>
                                </xsl:with-param>
                            </xsl:call-template>
                            <xsl:call-template name ="templ_prop_Space"/>
                        </xsl:otherwise>
                    </xsl:choose>
                </xsl:when>
            </xsl:choose>
            <xsl:choose>
                <xsl:when test="$cEditorLastName=1">
                    <xsl:value-of select="b:Source/b:Author/b:Editor/b:NameList/b:Person/b:Last"/>
                    <xsl:call-template name="templ_prop_ListSeparator" />
                </xsl:when>
            </xsl:choose>
            <xsl:if test="$cEditor=1">
                <xsl:call-template name ="templ_str_EditorShortCap"/>
                <xsl:call-template name="Seperator"/>
            </xsl:if>
    
        </xsl:when>
        <xsl:when test="$cEditor>1">
            <xsl:for-each select="b:Source/b:Author/b:Editor/b:NameList/b:Person">
                <xsl:variable name ="cEditorFirstName">
                    <xsl:value-of select ="count(b:First)"/>
                </xsl:variable>
                <xsl:variable name ="cEditorLastName">
                    <xsl:value-of select ="count(b:Last)"/>
                </xsl:variable>
                <xsl:variable name ="cEditorMiddleName">
                    <xsl:value-of select ="count(b:Middle)"/>
                </xsl:variable>
    
                <xsl:choose>
    
                    <xsl:when test ="$cEditor>1 and (position())=$cEditor">
                        <xsl:call-template name ="templ_prop_Space"/>
                        <xsl:call-template name ="templ_str_AndUnCap"/>
                        <xsl:call-template name ="templ_prop_Space"/>
                    </xsl:when>
                </xsl:choose>
    
                <xsl:choose>
                    <xsl:when test="$cEditorFirstName=1">
                        <xsl:choose>
                            <xsl:when test="contains(b:First,$prop_APA_FromToDash)">
                                <xsl:call-template name="HandleSPaceHypenInAuthor">
                                    <xsl:with-param name="author">
                                        <xsl:call-template name="right-trim">
                                            <xsl:with-param name ="s" select="b:First"/>
                                        </xsl:call-template>
                                    </xsl:with-param>
                                </xsl:call-template>
                                <xsl:call-template name ="templ_prop_Space"/>
                            </xsl:when>
                            <xsl:otherwise>
                                <xsl:call-template name="splitAuthorSpace">
                                    <xsl:with-param name ="first">
                                        <xsl:call-template name="right-trim">
                                            <xsl:with-param name ="s" select="b:First"/>
                                        </xsl:call-template>
                                    </xsl:with-param>
                                </xsl:call-template>
                                <xsl:call-template name ="templ_prop_Space"/>
                            </xsl:otherwise>
                        </xsl:choose>
                    </xsl:when>
                </xsl:choose>
    
                <xsl:choose>
                    <xsl:when test="$cEditorMiddleName=1">
                        <xsl:choose>
                            <xsl:when test="contains(b:Middle,$prop_APA_FromToDash)">
                                <xsl:call-template name="HandleSPaceHypenInAuthor">
                                    <xsl:with-param name="author">
                                        <xsl:call-template name="right-trim">
                                            <xsl:with-param name ="s" select="b:Middle"/>
                                        </xsl:call-template>
                                    </xsl:with-param>
                                </xsl:call-template>
                                <xsl:call-template name ="templ_prop_Space"/>
                            </xsl:when>
                            <xsl:otherwise>
                                <xsl:call-template name="splitAuthorSpace">
                                    <xsl:with-param name ="first">
                                        <xsl:call-template name="right-trim">
                                            <xsl:with-param name ="s" select="b:Middle"/>
                                        </xsl:call-template>
                                    </xsl:with-param>
                                </xsl:call-template>
                                <xsl:call-template name ="templ_prop_Space"/>
                            </xsl:otherwise>
                        </xsl:choose>
                    </xsl:when>
                </xsl:choose>
                <xsl:choose>
                    <xsl:when test="$cEditorLastName=1">
                        <xsl:value-of select="b:Last"/>
                        <xsl:if test="((position()+1)!=$cEditor) and (position()&lt;$cEditor)">
                            <xsl:call-template name ="templ_prop_ListSeparator"/>
                        </xsl:if>
                    </xsl:when>
                </xsl:choose>
            </xsl:for-each>
            <xsl:call-template name ="templ_prop_ListSeparator"/>
            <xsl:if test="$cEditor>1">
                <xsl:call-template name ="templ_str_EditorsShortCap"/>
                <xsl:call-template name="Seperator"/>
            </xsl:if>
        </xsl:when>
    </xsl:choose>
    </xsl:template>
    
  9. 现在保存该文件。调试时,您应该能够在文本编辑器中保持打开状态。

  10. 关闭并重新启动 Word。(请确保已关闭所有 Word 实例。复制一份包含 IEEE 来源/引文的文档。然后在风格下拉列表参考文献->引文和参考书目。如果您看不到它,则可能是新 .xsl 中存在语法错误。但我们假设您可以看到它。

  11. 选择新样式,看看您的引文发生了什么变化。如果您没有任何图书类型的引文,我会添加一个用于测试目的。

  12. 此时,您可以在文本编辑器中修改 .xsl 并保存。要应用修改后的版本,您可以选择引文并单击 F9 来更新字段,或者切换到另一种书目样式(例如 IEEE)并再次返回。

如果您认为这是一种有用的方法,我当然可以尝试帮助您编码。

相关内容