&、XSLT 和 LaTeX

Ampersand, XSLT and LaTeX

在从 Google Tables 到 XML 再到 LaTeX 的转换过程中,我正在努力解决一些基本问题。我的主要问题是:如何将&符号从一端传递到另一端。

我知道类似的问题已经回答了好几次,但似乎没有有效的解决方案。 (到目前为止最好的帮助在我看来是这样的:

假设我在 Google 表中有出版社 "Simon & Schuster"。在我将它导出并导入到 XML 之后,它是:

<xml>
  <name>
    <publisher>Simon &amp; Schuster</publisher>
  </name>
</xml>

现在在 LaTeX 中我准备了一个新命令来最小化与号问题:

\newcommand{\ampersand}{\&}

当我使用 XSLT (2.0) 时,它变得(太)棘手了:

<xsl:function name="foo:ampersand-replace">
    <xsl:param name="passed-string"/>
    <xsl:value-of select="replace($passed-string, '\&amp', '\\ampersand')"/>
  </xsl:function>

  <xsl:template match="publisher">
     <xsl:value of select="foo:ampersand-replace(publisher)"/>
  </xsl:template> 

因为这无法编译 (Saxxon 9.6)。问题当然是 & 符号:不允许使用语法错误转义字符。

我也尝试了不同的方法:

<xml>
  <name>
    <publisher>Simon <c rendition="#ampersand"/> Schuster</publisher>
  </name>
</xml>

问题是我无法使用

<xsl:value-of/>

-command,以及c不处理。 知道我错了什么吗?

我认为你的 xsl:function 需要看起来像这样:

<xsl:function name="foo:ampersand-replace">
    <xsl:param name="passed-string"/>
    <xsl:value-of select="replace($passed-string, '&amp;', '\ampersand')"/>
</xsl:function>

另请注意,当您调用它时,您当前的模板与 publisher 匹配,因此您位于该模板上,因此对该函数的调用应如下所示...

<xsl:template match="publisher">
    <xsl:value-of select="foo:ampersand-replace(.)"/>
</xsl:template>