我正在尝试使用XSLT(版本1.0)将表格从XHTML转换为LaTeX,但该表格不适合文档有用区域(宽度 - 16cm)。
没有colspan的表格恰好适合文档的有用区域,但是带有colspan的表格超出了这个区域。
我无法弄清楚我做错了什么。
实施例
XHMTL表
<table border="1" cellspacing="0" cellpadding="0">
<tr>
<td colspan="2"> <strong>LOREM</strong></td>
<td colspan="10"><strong>IPSUM DOLOR SIT AMET</strong></td>
</tr>
<tr>
<td colspan="2"></td>
<td><strong>consectetuer</strong></td>
<td><strong>adipiscing</strong></td>
<td><strong>elit</strong></td>
<td><strong>Aenean</strong></td>
<td><strong>commodo</strong></td>
<td><strong>ligula</strong></td>
<td><strong>eget</strong></td>
<td><strong>dolor</strong></td>
<td><strong>Aenean</strong></td>
<td><strong>massa</strong></td>
</tr>
<tr>
<td><strong>Cum</strong></td>
<td>sociis</td>
<td>natoque</td>
<td>penatibus</td>
<td>magnis</td>
<td>parturient</td>
<td>montes</td>
<td>nascetur</td>
<td>ridiculus</td>
<td>Donec</td>
<td>felis</td>
<td><strong>ultricies</strong></td>
</tr>
</table>
xsl代码
<xsl:template match="xhtml:table">
<xsl:text>\begin{center} </xsl:text>
<xsl:text>\begin{tabulary}{\linewidth}{</xsl:text>
<xsl:variable name="total_columns">
<xsl:value-of select="sum(xhtml:tr[1]/*/@colspan) + count(xhtml:tr[1]/*[not(@colspan)])"/>
</xsl:variable>
<xsl:text>*{</xsl:text>
<xsl:value-of select="$total_columns"/>
<xsl:text>}{C}} </xsl:text>
<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="self::xhtml:th">\bfseries</xsl:if>
<xsl:choose>
<xsl:when test="@colspan">
<xsl:if test="current()/@colspan>=0">
\multicolumn{<xsl:value-of select="current()/@colspan"/>}{
>{\centering\arraybackslash}m{
<xsl:value-of select="((16 div $total_columns) * current()/@colspan)"/>cm}}{
</xsl:if>
</xsl:when>
</xsl:choose>
<xsl:apply-templates/>
<xsl:choose>
<xsl:when test="@colspan">
<xsl:if test="current()/@colspan>=0">}</xsl:if>
</xsl:when>
</xsl:choose>
<xsl:if test="position() != last()">
<xsl:text>&</xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:if test="position()!=last()">\\ </xsl:if>
</xsl:for-each>
<xsl:text>\\ \bottomrule</xsl:text>
<xsl:text> \end{tabulary} </xsl:text>
<xsl:text>\end{center}</xsl:text>
</xsl:template>
答案 0 :(得分:1)
我不确定LaTeX有什么问题,生成了桌子,但即使宽度限制在16cm,桌子也超出了面积。然后,这不一定是XSLT问题。不完全是主题,但您可能希望使用TeXML(getfo.org/texml)转换XHTML&gt; LaTeX与XSLT(其中TeXML是中间步骤)。