PAYATHON 2026

如何去掉 Microsoft Word APA 引文中由 XSLT 输出的前导空格?

数据阿明

可以修改生成引文的 XSLT 来去掉前导空格,但要先确认空格来自样式输出。xsl:when 本身不会自动添加空格;空格可能来自分支中的 xsl:text、字符串拼接或调用的其他模板,也可能已经存在于 Word 文档中。由于没有提供相关 XSL 源码,目前无法确定应修改哪一行。

先确认空格的位置

目标是把:

Some text ( (Doe, 2026)).

改为:

Some text ((Doe, 2026)).

需要删除的是两个左括号之间的空格。先在 Word 中显示格式标记,检查引文字段的边界。如果空格位于手动输入的外层左括号之后、引文字段之外,直接在文档中删除即可。修改 XSLT 无法删除字段外的普通文本。

如果确认引文字段自身以空格开头,再检查样式文件。

检查输出空格的代码

在怀疑的第 2707 至 3044 行范围内,优先检查以下内容,并沿着 xsl:call-template 等调用继续查找:

  • 包含前导空格的 xsl:text。
  • 以空格开头的 concat() 字符串。
  • 从变量或源数据中取出的文本。
  • 显式输出的   或不换行空格  。

例如,如果负责输出引文左括号的代码是:

<xsl:text> (</xsl:text>

它会输出一个空格和一个左括号。确认这个空格是异常来源后,改成:

<xsl:text>(</xsl:text>

同样,如果字符串拼接以 ' (' 开头,可以检查是否能改为 '('。这些只是定位和修改方式的示例,原样式不一定包含这些代码。

保留引文内部的正常空格

不要批量删除样式中的空格。下面的输出逻辑保留了作者与年份之间的正常间距,同时没有添加前导空格:

<xsl:text>(</xsl:text>
<xsl:value-of select="$author"/>
<xsl:text>, </xsl:text>
<xsl:value-of select="$year"/>
<xsl:text>)</xsl:text>

其中的 $author 和 $year 是示例变量,需要替换为原样式中实际使用的变量或 XPath 表达式。可以参照这段逻辑检查现有 xsl:when 分支,但不要直接替换整个分支,以免丢失多作者等其他处理。

也不建议对完整引文直接使用 normalize-space():它会同时处理首尾空白和内部连续空白,修改范围可能超过需要。

修改后验证

备份样式文件后,只修改已确认的空格输出点。让 Word 重新加载修改后的样式并更新引文,检查目标句子,并确认普通句子中的引文间距仍然正确。

如果修改后没有变化,需要进一步区分是样式未重新加载、引文字段未更新,还是空格来自其他模板。要确定具体修改位置,还需要相关 xsl:when 分支及其调用的模板代码。

备注:内容仅供参考。