私は XSLT (v1.0) の初心者で、XSLT を使用して複雑な XHTML テーブルを LaTeX に変換できません。
複雑なテーブルとは、列の数が異なる行を持つテーブルです。つまりtd
、colspan
.
つまり (xhtml テーブル)
<table border="1" cellspacing="0" cellpadding="0">
<tr>
<td valign="top" width="68" colspan="3"> <p>Values</p> </td>
</tr>
<tr>
<td valign="top" width="68"> <p>95</p> </td>
<td valign="top" width="68"> <p>169</p> <p> </p> </td>
<td valign="top" width="68"> <p>180</p> <p> </p> </td>
</tr>
</table>
XSL ファイルで行っていることは次のとおりです。
<xsl:template match="xhtml:table[@border='1']">
<xsl:text>\begin{center}</xsl:text>
<xsl:text>\begin{tabular}{</xsl:text>
<xsl:for-each select="xhtml:tr[1]/*">
<xsl:text>c</xsl:text>
<xsl:if test="position() = last()">
<xsl:text>} </xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:text>\toprule </xsl:text>
<xsl:for-each select="xhtml:tr">
<xsl:if test="position() != 1">
<xsl:text>\midrule </xsl:text>
</xsl:if>
<xsl:if test="position() = 2">
<xsl:text>\midrule </xsl:text>
</xsl:if>
<xsl:for-each select="xhtml:td|xhtml:th">
<xsl:if test="name() = 'th'">{\bf </xsl:if>
<xsl:apply-templates />
<xsl:if test="name() = 'th'">}</xsl:if>
<xsl:if test="position() != last()">
<xsl:text>&</xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:text> \\ </xsl:text>
</xsl:for-each>
<xsl:text>\bottomrule </xsl:text>
<xsl:text>\end{tabular} </xsl:text>
<xsl:text>\end{center} </xsl:text>
</xsl:template>
しかし、ご覧のとおり、このコードは colspan 属性を使用しない単純なテーブルに対してのみ機能します。コードは最初の をループし、tr
それぞれtd
に「c」を書き込みます。したがって、上記の場合、1 列のテーブルのみが作成されます。
私がしたいのは、 の数とtd
、存在する場合は colspans の数を数えて、3 列の正しいテーブルを作成することです。
誰もこれを行う方法を知っていますか? 前もって感謝します。