Blame xsl/figure.xsl

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