这个问题是XSL-FO部分,XSLT部分和DITA部分。一般来说,这个问题是尝试解决我在fo:marker
做错的事情,并了解我的尝试是否可行。
我正在尝试使用fo:标记来存储特定元素的文本,然后像您期望的那样在标题中检索该文本。我这是作为DITA插件的一部分的自定义样式表的一部分。我们的想法是插件用于列出程序的一系列步骤的文档。这些程序的步骤通常包括一堆图片。因此,要求是当页面中的步骤中断时,该步骤的第一个句子充当排序的运行标题。在DITA中,步骤的第一个句子在cmd
元素中捕获。所以,我的想法是我可以设置用cmd
处理fo:marker
元素的模板。
以下是cmd
的模板与我添加的标记相似的内容:
<xsl:template match="*[contains(@class, ' task/cmd ')]" priority="1">
<fo:block xsl:use-attribute-sets="cmd">
<xsl:call-template name="commonattributes"/>
<xsl:if test="../@importance='optional'">
<xsl:call-template name="insertVariable">
<xsl:with-param name="theVariableID" select="'Optional Step'"/>
</xsl:call-template>
<xsl:text> </xsl:text>
</xsl:if>
<fo:inline>
<fo:marker marker-class-name="current-step"/>
</fo:inline>
<xsl:apply-templates/>
</fo:block>
</xsl:template>
这不起作用。我对此进行了一些讨论,当我修改了这样的模板时,我只能在info
元素上工作,这是cmd
的兄弟:
<xsl:template match="*[contains(@class, ' task/info ')]">
<fo:block xsl:use-attribute-sets="info">
<fo:inline>
<fo:marker marker-class-name="current-step">
<xsl:apply-templates/>
</fo:marker>
</fo:inline>
<xsl:call-template name="commonattributes"/>
<xsl:apply-templates/>
</fo:block>
</xsl:template>
问题是,我尝试使用cmd
元素进行此构造(即包含apply-templates指令),但它仍然没有产生任何内容。
我描述的内容是否可行以及为什么我的标记仅在我包含apply-templates指令且仅适用于info
元素时才有效?
答案 0 :(得分:2)
你需要fo:marker
内的某些东西,因为它是fo:marker
的内容“可以从fo:static-content ...中使用fo:retrieve-marker”检索和格式化。见http://www.w3.org/TR/xsl11/#fo_marker
我不知道为什么带有内容且具有相同标记类名称的fo:marker
在两个上下文中都不起作用。您在retrieve-position="first-including-carryover"
上使用fo:retrieve-marker
了吗?您是否已fo:marker
留在info
,以便屏蔽fo:marker
的{{1}}?
完全独立的替代方案可能是将每个步骤放在没有边框的单列表中,并将cmd
的内容放在表格标题中。