我如何更改 IEEE XML 以便引用包含作者姓名和文本“[1] McDonald (2011)”而不仅仅是数字“[1]”?
答案1
您可以考虑的事情。没有一个是简单的,而且选项 (4) 似乎不适用于 IEEE,原因我还无法弄清楚。
- (在我看来,这是最难的选择)创建一个满足您需求的新版 IEEE 书目样式。我将在下面概述所需的内容。书目样式在您计算机上的 XSLT 文件 (.xsl) 中定义,因此如果其他人需要以您看到的方式查看您的文档,您必须向他们提供您的 .xsl 文件并告诉他们如何安装它。
- 相反,从 Yves Dhondt 创建的风格之一开始,他试图让你更容易地创建自己的风格:看这里
- 如果可能的话,请选择另一种更接近您需要的书目样式。
- 如果您只需要插入和维护一些引文,请考虑手动将您想要的文本添加到引文中。不是很现代,而且比它应该的要难,但比选项 (1) 简单得多!
让我们来处理选项 4。插入引文时,Word 会插入一个带有小菜单的环绕框,里面是引文字段。如果您使用的是 Windows 桌面版 Word,则可以看到字段代码之间的切换,可能看起来像这样
{ CITATION xyz01 \l 2057 }
和现场结果,例如
[5]
您可以手动修改字段代码,使其看起来像这样
{ CITATION xyz01 \l 2057 \s " Einstein, 1908" }
然后选择该字段,更新它并使用 Alt-F9 显示结果。
不幸的是,IEEE 样式似乎在这里不起作用,但如果这是一种可行的方法,那么可能值得在您的系统上尝试一下。此外,有时 Word 不允许您编辑引文字段,原因并不明显。
对于选项 1,修改现有的书目样式涉及几个步骤,例如:
- 决定你的引文应该实际上包含您需要使用的每种类型的来源、您需要使用的每种语言(我们假设现在只有 1 种),以及您的来源中可能存在的每种类型/组合(单个作者、多个作者、编辑、公司作者等)。如果您的情况很简单(例如,每种来源类型总是有一位作者,如果有多个作者,则只需要引文中的第一个作者),那么这可能相当容易处理。麻烦的是,如果您不知道要求是什么,就尝试编写必要的 .xsl。
- 编写必要的 .xsl 代码并修改实际生成引文的代码部分。
- 修改 .xsl 的名称和版本信息。否则,使用它可能会非常混乱
- 将 .xsl 放入正确的文件夹
- 让所有这些工作正常。调试这些 .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
,然后进行以下更改:
全局替换
IEEE
(IEEE 2023
或任何你喜欢的语言)。如果你的默认语言不使用,IEEE
则进行适当的更改。例如,如果你碰巧使用哈萨克语区域设置 1087,则需要更改此代码:<xsl:when test="b:StyleNameLocalized/b:Lcid='1087'"> <xsl:text>Электр және электроника инженерлері институты</xsl:text> </xsl:when>
在文件顶部附近找到这段文字
<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>
将其更改为:
<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>
找到下面一段代码:
<xsl:template name="Citation">
向下滚动大约 60 行,直到看到:
<xsl:if test="b:LastAuthor"> <xsl:call-template name="templ_prop_SecondaryClose"/> </xsl:if>
之后插入以下代码:
<xsl:call-template name ="CitDisplayAuthorBook"> <xsl:with-param name ="DisplayEditorIfAuthorUnavailale" select="'true'" /> </xsl:call-template>
转到文件底部,您应该看到以下内容:
</xsl:stylesheet>
在其上方,插入以下代码(基于用于生成参考书目的作者/编辑者姓名的代码)。它实际上仅适用于书籍,可能比引文中需要的更复杂,并且可能不适用于其他类型的来源,但应该可以让您了解修改这些 .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()<$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()<$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>
现在保存该文件。调试时,您应该能够在文本编辑器中保持打开状态。
关闭并重新启动 Word。(请确保已关闭所有 Word 实例。复制一份包含 IEEE 来源/引文的文档。然后在风格下拉列表参考文献->引文和参考书目。如果您看不到它,则可能是新 .xsl 中存在语法错误。但我们假设您可以看到它。
选择新样式,看看您的引文发生了什么变化。如果您没有任何图书类型的引文,我会添加一个用于测试目的。
此时,您可以在文本编辑器中修改 .xsl 并保存。要应用修改后的版本,您可以选择引文并单击 F9 来更新字段,或者切换到另一种书目样式(例如 IEEE)并再次返回。
如果您认为这是一种有用的方法,我当然可以尝试帮助您编码。