Page Sequence Master Interleave (PSMI)
HollmanさんはXSLとXSLTで著名な方で本も出しておられます.
Definitive XSL-FO
このスタイルシートはXSLT + XSLの世界では結構有名で使っている例があちこちで紹介されています.このスタイルシートは、XSLT 1.0で書かれていますが、ほぼそのままで問題なく動きます.仕組みはいたって簡単で、
<fo:page-sequence master-reference="A4のページマスター">
</fo:page-sequence>
<fo:page-sequence master-reference="A4/二段組のページマスター">
<!-- 索引のコンテンツ-->
</fo:page-sequence>
<fo:page-sequence master-reference="A4のページマスター">
</fo:page-sequence>
というページシーケンスを作りたければ、psmiというプリフィックスでhttp://www.CraneSoftwrights.com/resources/psmiのネームスペースを宣言しておき、
<fo:page-sequence master-reference="A4のページマスター">
<psmi:page-sequence master-reference="A4/二段組のページマスター">
<!-- 索引のコンテンツ-->
</psmi:page-sequence>
</fo:page-sequence>
というページシーケンスをいったん作ります.ここでpsmi.xslを通過させると望みの
<!--①-->
<fo:page-sequence master-reference="A4のページマスター">
</fo:page-sequence>
<!--②-->
<fo:page-sequence master-reference="A4/二段組のページマスター">
<!-- 索引のコンテンツ-->
</fo:page-sequence>
<!--③-->
<fo:page-sequence master-reference="A4のページマスター">
</fo:page-sequence>
が出来上がってくれます.ただし条件があって、psmi:page-sequenceは必ずfo:page-sequenceの子要素でなければなりません.深い階層のpsmi:page-sequenceは上位にまで引き上げられないからです.あとはfo:page-sequenceをいわば分割して途中にfo:page-sequenceを作るので、①のfo:page-sequenceのinitial-page-numberプロパティがautoでない、つまり親のページシーケンスが特定のページ番号から始まっていても、②と③のinitial-page-number属性はautoにしてくれます.こうしないとつじつまが合わなくなってしまうからです.でももし②の前にコンテンツがなくて最初にpsmi:page-sequenceが現れた場合はそのinitial-page-numberの値を継承します.
このあたりは実際にどのような場合にページシーケンスの調停を取るかでいろいろとカスタマイズが必要でしょう.
私もこのスタイルシートには非常にお世話になっています.DITAでbooklists/indexlistを二段組みでやろうとしたらほぼ必須のアイテムと言って過言ではないでしょう.