Этот вопрос является частью XSL-FO, части XSLT и части DITA. В общем, этот вопрос является попыткой устранить то, что я делаю неправильно, с fo:marker
и понять, возможно ли то, что я пытаюсь.XSL-FO: Можно ли использовать маркер для хранения чего-либо?
Я пытаюсь использовать fo: marker для хранения текста из определенного элемента, а затем извлекать этот текст в заголовке, как вы могли бы ожидать. Я делаю это как часть пользовательской таблицы стилей, которая является частью плагина 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
?
Спасибо за отзыв @tony. Сначала я попробовал это как заголовок таблицы, но это было сложно, потому что я уже использую таблицы в том, как сами шаги создаются. Одним из других требований является то, что изображения для шага должны существовать бок о бок с соответствующей инструкцией. Я полагал, что использование маркеров выполнило бы то, что я хочу, не слишком усложняя структуру шагов. В общем, скажете ли вы, что использование заголовка или маркера - единственный реальный способ, которым я могу выполнить то, что я пытаюсь сделать? –
Вы можете поместить 'fo: table' внутри' fo: table-cell', но поскольку вы уже используете таблицы, вы могли бы, по-видимому, комбинировать маркеры и таблицы и использовать 'fo: retrieve-table-marker (http: // www .w3.org/TR/xsl11/# fo_retrieve-table-marker), чтобы получить маркер, установленный в текущей таблице. –
Спасибо Тони. Основываясь на ваших отзывах, мне удалось выяснить, как я неправильно использовал fo: marker. –