Blame xsl/figure.xsl

Packit Service 76cb02
Packit Service 76cb02
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version='1.0'>
Packit Service 76cb02
Packit Service 76cb02
Packit Service 76cb02
    XSLT Stylesheet DocBook -> LaTeX 
Packit Service 76cb02
    ############################################################################ -->
Packit Service 76cb02
Packit Service 76cb02
Packit Service 76cb02
<xsl:param name="figure.title.top">0</xsl:param>
Packit Service 76cb02
<xsl:param name="figure.anchor.top" select="$figure.title.top"/>
Packit Service 76cb02
<xsl:param name="figure.default.position">[htbp]</xsl:param>
Packit Service 76cb02
<xsl:param name="figure.default.align">center</xsl:param>
Packit Service 76cb02
Packit Service 76cb02
Packit Service 76cb02
<xsl:template match="figure">
Packit Service 76cb02
  <xsl:text>\begin{figure}</xsl:text>
Packit Service 76cb02
  
Packit Service 76cb02
  <xsl:choose>
Packit Service 76cb02
    <xsl:when test="@floatstyle != ''">
Packit Service 76cb02
      <xsl:value-of select="@floatstyle"/>
Packit Service 76cb02
    </xsl:when>
Packit Service 76cb02
    <xsl:when test="not(@float) or (@float and @float='0')">
Packit Service 76cb02
      <xsl:text>[H]</xsl:text>
Packit Service 76cb02
    </xsl:when>
Packit Service 76cb02
    <xsl:otherwise>
Packit Service 76cb02
      <xsl:value-of select="$figure.default.position"/>
Packit Service 76cb02
    </xsl:otherwise>
Packit Service 76cb02
  </xsl:choose>
Packit Service 76cb02
  <xsl:text>
</xsl:text>
Packit Service 76cb02
Packit Service 76cb02
  
Packit Service 76cb02
  <xsl:apply-templates select="." mode="caption.and.label">
Packit Service 76cb02
    <xsl:with-param name="position.top" select="1"/>
Packit Service 76cb02
  </xsl:apply-templates>
Packit Service 76cb02
Packit Service 76cb02
  
Packit Service 76cb02
  <xsl:call-template name="figure.begin"/>
Packit Service 76cb02
  <xsl:apply-templates select="*[not(self::title)]"/>
Packit Service 76cb02
  <xsl:call-template name="figure.end"/>
Packit Service 76cb02
Packit Service 76cb02
  
Packit Service 76cb02
  <xsl:apply-templates select="." mode="caption.and.label">
Packit Service 76cb02
    <xsl:with-param name="position.top" select="0"/>
Packit Service 76cb02
  </xsl:apply-templates>
Packit Service 76cb02
  <xsl:text>\end{figure}
</xsl:text>
Packit Service 76cb02
</xsl:template>
Packit Service 76cb02
Packit Service 76cb02
Packit Service 76cb02
<xsl:template match="informalfigure">
Packit Service 76cb02
  <xsl:call-template name="figure.begin"/>
Packit Service 76cb02
  <xsl:apply-templates/>
Packit Service 76cb02
  <xsl:call-template name="figure.end"/>
Packit Service 76cb02
</xsl:template>
Packit Service 76cb02
Packit Service 76cb02
Packit Service 76cb02
<xsl:template name="figure.begin">
Packit Service 76cb02
  <xsl:param name="align" select="$figure.default.align"/>
Packit Service 76cb02
  <xsl:value-of select="concat('
\begin{',$align,'}
')"/>
Packit Service 76cb02
</xsl:template>
Packit Service 76cb02
Packit Service 76cb02
<xsl:template name="figure.end">
Packit Service 76cb02
  <xsl:param name="align" select="$figure.default.align"/>
Packit Service 76cb02
  <xsl:value-of select="concat('
\end{',$align,'}
')"/>
Packit Service 76cb02
</xsl:template>
Packit Service 76cb02
Packit Service 76cb02
Packit Service 76cb02
Packit Service 76cb02
     increments the label counter and puts an anchor. Therefore putting a
Packit Service 76cb02
     label *before* the related caption needs to manipulate the counters
Packit Service 76cb02
     
Packit Service 76cb02
     Limitation: it is not possible to put a caption on the top, and the
Packit Service 76cb02
     label anchor at the bottom. The first caption anchor at the top prevails.
Packit Service 76cb02
     Putting a label before the caption is possible because the
Packit Service 76cb02
     duplicated label name when \caption is called is ignored
Packit Service 76cb02
     (see latex warnings) -->
Packit Service 76cb02
Packit Service 76cb02
<xsl:template match="figure" mode="caption.and.label">
Packit Service 76cb02
  <xsl:param name="position.top"/>
Packit Service 76cb02
Packit Service 76cb02
  <xsl:choose>
Packit Service 76cb02
  <xsl:when test="$figure.title.top='1'">
Packit Service 76cb02
Packit Service 76cb02
    <xsl:if test="$position.top='1'">
Packit Service 76cb02
      <xsl:text>\caption</xsl:text>
Packit Service 76cb02
      <xsl:apply-templates select="title" mode="format.title"/>
Packit Service 76cb02
    </xsl:if>
Packit Service 76cb02
Packit Service 76cb02
    <xsl:if test="$figure.anchor.top=$position.top">
Packit Service 76cb02
      <xsl:call-template name="label.id">
Packit Service 76cb02
        <xsl:with-param name="object" select="."/>
Packit Service 76cb02
      </xsl:call-template>
Packit Service 76cb02
    </xsl:if>
Packit Service 76cb02
Packit Service 76cb02
  </xsl:when>
Packit Service 76cb02
  <xsl:when test="$figure.title.top='0'">
Packit Service 76cb02
Packit Service 76cb02
    <xsl:choose>
Packit Service 76cb02
    <xsl:when test="$position.top='1'">
Packit Service 76cb02
      <xsl:if test="$figure.anchor.top='1'">
Packit Service 76cb02
        <xsl:text>\refstepcounter{figure}</xsl:text>
Packit Service 76cb02
        <xsl:call-template name="label.id">
Packit Service 76cb02
          <xsl:with-param name="object" select="."/>
Packit Service 76cb02
        </xsl:call-template>
Packit Service 76cb02
      </xsl:if>
Packit Service 76cb02
    </xsl:when>
Packit Service 76cb02
Packit Service 76cb02
    <xsl:otherwise>
Packit Service 76cb02
      <xsl:if test="$figure.anchor.top='1'">
Packit Service 76cb02
        <xsl:text>\addtocounter{figure}{-1}</xsl:text>
Packit Service 76cb02
      </xsl:if>
Packit Service 76cb02
Packit Service 76cb02
      <xsl:text>\caption</xsl:text>
Packit Service 76cb02
      <xsl:apply-templates select="title" mode="format.title"/>
Packit Service 76cb02
Packit Service 76cb02
      <xsl:if test="$figure.anchor.top='0'">
Packit Service 76cb02
        <xsl:call-template name="label.id">
Packit Service 76cb02
          <xsl:with-param name="object" select="."/>
Packit Service 76cb02
        </xsl:call-template>
Packit Service 76cb02
      </xsl:if>
Packit Service 76cb02
    </xsl:otherwise>
Packit Service 76cb02
    </xsl:choose>
Packit Service 76cb02
  </xsl:when>
Packit Service 76cb02
  </xsl:choose>
Packit Service 76cb02
</xsl:template>
Packit Service 76cb02
Packit Service 76cb02
</xsl:stylesheet>
Packit Service 76cb02