作者: 閑舎
日時: 2002/2/04(14:58)
 XML::XSLT による xsl ファイルを使用した XML のコンバートをやってみて感
じたことです。

<table>
<tr>
 <td rowspan='2'> 1x2 </td><td> 1 </td>
 <td rowspan='2' colspan='2' width='5cm'> 2x2。
このように複数行にまたがるセルは width 属性が必要。</td>
</tr>
<tr>
 <td rowspan='2' align='center'> 1x2 </td>
</tr>
<tr>
 <td> 1 </td>
 <td align='center'> center </td>
 <td align='right'> right </td>
</tr>
</table>

上のような HTML ソースがあったとして、これを XSL を使って下のような 
LaTeX ソースに変換できるでしょうか? はなはだ疑問と言わざるを得ません。
あるいはとても面倒である、ということです。

\begin{tabular}{|l|l|l|l|}\hline
 \multicolumn{1}{|l|}{\multirow{2}{*}{ 1x2 }}&
 1 & \multicolumn{2}{|l|}{\multirow{2}{*}{\parbox{5cm}{\vspace{4pt}  2x2。このように複数行にまたがるセルは width 属性が必要。\vspace{4pt}}}}
 \\\cline{2-2}
 &\multicolumn{1}{|c|}{\multirow{2}{*}{ 1x2 }}&\multicolumn{2}{|l|}{}
 \\\cline{1-1}\cline{3-3}\cline{4-4}
 1 & &\multicolumn{1}{|c|}{ center }& \multicolumn{1}{|r|}{ right }
 \\\cline{1-1}\cline{2-2}\cline{3-3}\cline{4-4}
\end{tabular}

 これは私が昔 James Clark 氏(現在フリーの XML パーサ作成の中心)の 
SGML パーサを使っていたころ、その中間コードを Perl でかなり加工した上で
再びパーサに戻さないといけなかったのと同じ問題を含んでいます。XSL はかな
り賢くはなったけれど、やはり万能ではないと感じます。とすると、ある程度自
分が書き代えるという前提はあるものの、Perl に全てやらせた方が簡単。日本
語化なども考えなくていいし。

 私の考えでは、news2html.rep のような置換規則を書いたファイルを用意し、
標準関数で置換した上で、単純な置換で済まない部分(目次とか索引みたいな部
分)を Perl が直接処理する、そういう仕掛けが必要です。

<ts_news>   <html>\n
</ts_news>  </html>\n
<title>     <head><title>\n
</title>    </head><body>\n
...

 あまり余計なことを考えなければ、XML のパーシングは簡単なので、ちょっと
書いてみようかな;-)。

--
本田博通(閑舎)
Hiromichi Honda <raku@...>