&、XSLT 和 LaTeX
Ampersand, XSLT and LaTeX
在从 Google Tables 到 XML 再到 LaTeX 的转换过程中,我正在努力解决一些基本问题。我的主要问题是:如何将&符号从一端传递到另一端。
我知道类似的问题已经回答了好几次,但似乎没有有效的解决方案。 (到目前为止最好的帮助在我看来是这样的:)
假设我在 Google 表中有出版社 "Simon & Schuster"。在我将它导出并导入到 XML 之后,它是:
<xml>
<name>
<publisher>Simon & 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, '\&', '\\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, '&', '\ampersand')"/>
</xsl:function>
另请注意,当您调用它时,您当前的模板与 publisher
匹配,因此您位于该模板上,因此对该函数的调用应如下所示...
<xsl:template match="publisher">
<xsl:value-of select="foo:ampersand-replace(.)"/>
</xsl:template>
在从 Google Tables 到 XML 再到 LaTeX 的转换过程中,我正在努力解决一些基本问题。我的主要问题是:如何将&符号从一端传递到另一端。
我知道类似的问题已经回答了好几次,但似乎没有有效的解决方案。 (到目前为止最好的帮助在我看来是这样的:
假设我在 Google 表中有出版社 "Simon & Schuster"。在我将它导出并导入到 XML 之后,它是:
<xml>
<name>
<publisher>Simon & 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, '\&', '\\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, '&', '\ampersand')"/>
</xsl:function>
另请注意,当您调用它时,您当前的模板与 publisher
匹配,因此您位于该模板上,因此对该函数的调用应如下所示...
<xsl:template match="publisher">
<xsl:value-of select="foo:ampersand-replace(.)"/>
</xsl:template>