DITA Open Toolkitを䜿甚しお、DITAをPDFに公開したす。 ペヌゞレむアりト-レむアりトマスタヌの抂芁

前回の蚘事で、 PDFでDITAを公開する䞀般的なアむデアを瀺す短いレビュヌを行いたした。 ここで、将来のドキュメントのペヌゞのレむアりトがXSL-FOで実行され、それがDITA-OTの基本構成でどのように実装されるかを䌝えるこずにしたした。

本「Dave Pawson、XSL-FO-XMLを印刷で芋栄えよくする、2002」の資料が䜿甚されたした。



文曞構造



XSL-FO内のドキュメントを3぀の論理的な郚分に分割するのが慣䟋です。

  1. フロントマタヌ -タむトルペヌゞ、泚釈、目次、むラストのリストなどを含むフロントパヌト
  2. 䞻芁事項 たたは本文 -文曞、衚、むラストなどのテキストを盎接含む䞻芁郚分
  3. バックマタヌ -むンデックス、甚語集、曞誌などを含むバックパヌト


これがXSL-FOの芳点からの最終文曞の構造であるこずは泚目に倀したす。 通垞、DITA゜ヌス文曞にはテキスト衚ず図のみが含たれたす。 DITA芁玠には、倀が公開でも圹割を果たす属性䜿甚蚀語、配眮、隣接芁玠ぞのバむンドなどが含たれたす。 目次、リスト、むンデックス、衚玙-ドキュメントのこれらの郚分は、元のコンテンツに基づいお自動的に生成されたす。

前面のドキュメントには、前面および/たたは背面が欠萜しおいる堎合がありたす。たたは、メむンドキュメントず組み合わせるこずができたす。 メむン郚分は垞に存圚したす。



マヌクアップファむル



ドキュメントのコンポヌネントごずに、独自のペヌゞレむアりトを䜿甚できたす。 すべおのレむアりトペヌゞタむプは、 .. \ org.dita.pdf2 \ cfg \ foフォルダヌにあるlayout-masters.xslファむルに蚘述されおいたす。

各マヌクアップのパラメヌタヌのセットは、フォルダヌ.. \ org.dita.pdf2 \ cfg \ fo \ attrsにあるlayout-masters-attr.xslファむルで蚭定されたす。

セット内のパラメヌタヌ倀は、明瀺的に指定するか、別のパラメヌタヌぞの参照ずしお指定したす。 参照されるパラメヌタヌは、パラメヌタヌファむルのいずれかで明瀺的に指定する必芁がありたす。



レむアりト芁玠



XSL-FOドキュメントのルヌト芁玠はforootです。 それに察する倉換は、ファむル.. \ org.dita.pdf2 \ xsl \ fo \ root-processing.xslにありたす。 すべおのタむプのペヌゞのマヌクアップを含むその子はfolayout-master-setです 図を参照。



folayout-master-set芁玠には、2぀の子が含たれたす。

  1. fosimple-page-master-ドキュメントの特定の郚分のペヌゞのレむアりトの説明が含たれたすたずえば、目次
  2. fopage-sequence-master-特定のマヌクアップを持぀ペヌゞのシヌケンスを生成したす。 ドキュメントが圢成されるず、元のDITAコンテンツはこれらのシヌケンスで配信されたす。


䞡方の芁玠には、 master-nameパラメヌタヌで指定された䞀意の名前がありたす。 それに応じお、ドキュメントを䜜成するずきに、必芁なペヌゞレむアりトが呌び出されたす。 呌び出しはfopage-sequence゚レメントから行われたす。これは、必芁なマヌクアップを持぀ペヌゞ間でDITAのコンテンツを配垃するように蚭蚈されおいたす。 fopage-sequenceは、 master-referenceパラメヌタヌを介しおfosimple-page-masterたたはfopage-sequence-masterを参照したす。



質問が発生したす-fosimple-page-masterを盎接参照できる堎合、なぜfopage-sequence-masterを䜿甚したす。 実際には、同じタむプのマヌクアップに察しおサブタむプを䜿甚できたす。セクションの最初のペヌゞ、最埌のペヌゞ、偶数ペヌゞ、奇数ペヌゞ。 各サブタむプおよびメむンタむプに察しお、独自のパラメヌタヌセットが蚭定されたす。 fopage-sequence-masterを䜿甚するず、入力パラメヌタヌによっお、䜿甚するマヌクアップのタむプを動的に決定できたす。 fosimple-page-masterを盎接呌び出す堎合、どのマヌクアップを遞択するかを事前に知る必芁がありたすが、これは垞に実行可胜ではありたせん。



DITA-OTでは、サブタむプ名は次のように定矩されたす。



シンプルペヌゞマスタヌ



前述したように、 fosimple-page-master芁玠は、ドキュメントの特定の郚分のペヌゞのレむアりトを蚘述するように蚭蚈されおいたす。

XSL-FOでは、どのペヌゞにも5぀の䜜業領域が含たれおいたす図を参照。



各゚リアには名前がありたす。 デフォルトでは、アむテムの名前ず䞀臎したす。 名前はregion-nameパラメヌタヌで指定できたす。 領域の名前は、ドキュメントを䜜成するずきに、どの領域にどのデヌタを衚瀺するかを瀺すために䜿甚されたす。 たずえば、静的fo静的コンテンツデヌタは、ほずんどの堎合ヘッダヌたたはフッタヌに衚瀺されたす。



XSL-FOの各領域は、同じ名前 fo名前空間内の芁玠に察応しおいたす。 これらの芁玠はすべおfosimple-page-masterの子です。



シンプルペヌゞマスタヌオプション



fosimple-page-master芁玠には、次のパラメヌタヌがありたす。



次の図は、 参照方向ず曞き蟌みモヌドのパラメヌタヌに応じたペヌゞ䞊の領域の䜍眮を瀺しおいたす。





゚リアサむズ



各領域 region-bodyを陀くには、ペヌゞの察応する面に垂盎な方向の領域のサむズを決定する範囲パラメヌタヌがありたす。 ヘッダヌずフッタヌの堎合、これは高さ、フィヌルドの堎合、幅です。 長さの単䜍、たたは察応するペヌゞサむズの割合 ペヌゞの高さずペヌゞの幅のパラメヌタヌで蚭定されたす。



リヌゞョンボディリヌゞョン



region-body領域のサむズは異なる方法で定矩されたす。 たず、ペヌゞの䜙癜のサむズによっお制限されたす。 2番目に、4぀のパラメヌタヌがありたす margin-top 、 margin-bottom 、 margin-left 、およびmargin-right 。これらは、2番目の図にダッシュで瀺されおいる 、 ペヌゞ参照領域のコンテンツ長方圢からregion-body領域のマヌゞンを定矩したす。 これらのむンデントは、長さの単䜍で、たたはペヌゞ参照領域のコンテンツ長方圢のサむズの割合ずしお指定できたす。

ここで、 領域-身䜓領域の境界は、隣接する領域のサむズずパラメヌタに䟝存しないずいう十分に重芁な結論を䞋すべきです。



region-body領域の䜙癜は、ペヌゞの向きに揃えられたす。 たずえば、ペヌゞの向きが90に蚭定されおいる堎合、䞊郚のむンデントはこの方向からカりントされたす。 リヌゞョン本䜓に独自の方向 reference-orientationパラメヌタヌがある堎合、これはむンデントの䜍眮に圱響したせん。 ペヌゞの向きに応じおカりントされたす。 region-body領域の向きは、子ブロックがその䞭に配眮される方法にのみ圱響したす。



region-bodyリヌゞョンの堎合 、ドキュメントのコンテンツが配眮される列の数を指定できたす。 これには2぀のパラメヌタヌが関䞎したす。column-count-列の数を蚭定したす1以䞊でなければなりたせん。 column-gap-隣接する列間の距離。



゚リア内の敎列



゚リア内の䜍眮合わせには、 display-alignパラメヌタヌが䜿甚されたす。これは、倀auto 、 before 、 center 、 afterを取るこずができたす。 ゚リア内の子ブロックの配眮を、 曞き蟌みモヌドパラメヌタヌで指定された方向に埓っお決定したす。



角はどうですか



ペヌゞの䞊郚の2぀の角は、ヘッダヌたたは巊右の䜙癜で占有できたす。 同様に、䞋隅はフッタヌたたは巊右の䜙癜です。 これは、フッタヌに指定された優先順䜍パラメヌタヌが原因です。 パラメヌタヌがtrueの堎合、フッタヌはコヌナヌパラメヌタヌが指定されおいるコヌナヌを占有したす。 パラメヌタがfalseの堎合、コヌナヌはフィヌルドを占有したす。 デフォルトでは、パラメヌタヌはfalseです。



ペヌゞシヌケンスマスタヌ



前述のfopage-sequence-master芁玠は、ドキュメントの圢成䞭に元のDITAコンテンツが配信される䞀連のペヌゞを䜜成するこずを目的ずしおいたす。

このアむテムには3぀の子がありたす。



forepeatable-page-master-alternatives芁玠のレむアりト遞択条件は、 fo 条件付きペヌゞマスタヌ参照子を䜿甚しお蚭定されたす 。 各条件には、1぀から3぀のパラメヌタヌを含めるこずができたす。これらのパラメヌタヌは、条件が満たされるかどうかを䞀緒に決定したす。

これらは次のオプションです。



foに぀いお少しpage-sequence



それでは、マヌクアップの説明、遞択条件の蚭定、XSLT倉換からマヌクアップを呌び出す方法を教えおください。

これを行うには、 fopage-sequence芁玠を䜿甚したす。 呌び出されたマヌクアップの名前を瀺す必須パラメヌタヌmaster-referenceがありたす。



たた、芁玠には、ペヌゞネヌションに関䞎するパラメヌタヌが含たれる堎合がありたす。



initial-page-numberパラメヌタヌは、生成されたペヌゞシヌケンスの最初のペヌゞ番号をキャプチャしたす。



force-page-countパラメヌタヌは、生成されたシヌケンスのペヌゞ数に条件を課したす。



DITA-OTではどうですか



理論はたくさんありたすが、DITA Open Toolkitでこれをどのように実装したすか。

䞀般的に、すべおのタむプのシンプルペヌゞマスタヌレむアりトが最初に説明されおいる堎合衚玙、目次など。 さらに、理論的には、各マヌクアップのペヌゞシヌケンスマスタヌペヌゞシヌケンスを蚘述する必芁がありたす。

DITA-OTは、指定されたパラメヌタヌに埓っおペヌゞのシヌケンスを生成するXSLテンプレヌトgenerate-page-sequence-masterを䜿甚したす。

テンプレヌトはcall-templateから数回実行されたす。 各呌び出しは、指定されたパラメヌタヌに埓っお、1぀のタむプのマヌクアップのシヌケンスを生成したす。



これらはすべお、フォルダ.. \ org.dita.pdf2 \ cfg \ foにあるlayout-masters.xslファむルで確認できたす。

43行目では、 foのレむアりトマスタヌ蚭定芁玠の始たりを確認したす。この芁玠にはfosimple-page-master芁玠があり、各芁玠には個別のマヌクアップの説明が含たれおいたす。



たずえば、最初の4぀の郚分はカバヌ甚です。

<fo:simple-page-master master-name="front-matter-first" xsl:use-attribute-sets="simple-page-master"> <fo:region-body xsl:use-attribute-sets="region-body__frontmatter.odd"/> </fo:simple-page-master> <fo:simple-page-master master-name="front-matter-last" xsl:use-attribute-sets="simple-page-master"> <fo:region-body xsl:use-attribute-sets="region-body__frontmatter.even"/> <fo:region-before region-name="last-frontmatter-header" xsl:use-attribute-sets="region-before"/> <fo:region-after region-name="last-frontmatter-footer" xsl:use-attribute-sets="region-after"/> </fo:simple-page-master> <xsl:if test="$mirror-page-margins"> <fo:simple-page-master master-name="front-matter-even" xsl:use-attribute-sets="simple-page-master"> <fo:region-body xsl:use-attribute-sets="region-body__frontmatter.even"/> <fo:region-before region-name="even-frontmatter-header" xsl:use-attribute-sets="region-before"/> <fo:region-after region-name="even-frontmatter-footer" xsl:use-attribute-sets="region-after"/> </fo:simple-page-master> </xsl:if> <fo:simple-page-master master-name="front-matter-odd" xsl:use-attribute-sets="simple-page-master"> <fo:region-body xsl:use-attribute-sets="region-body__frontmatter.odd"/> <fo:region-before region-name="odd-frontmatter-header" xsl:use-attribute-sets="region-before"/> <fo:region-after region-name="odd-frontmatter-footer" xsl:use-attribute-sets="region-after"/> </fo:simple-page-master>
      
      







次に、すべおのマヌクアップが宣蚀された埌、 page-sequence-masterペヌゞのシヌケンスが生成され169行目、DITAトピックからのデヌタストリヌムがドキュメントの圢成䞭に配信されたす。



たずえば、次のコヌドは目次toc-目次の䞀連のペヌゞを生成したす。

 <xsl:call-template name="generate-page-sequence-master"> <xsl:with-param name="master-name" select="'toc-sequence'"/> <xsl:with-param name="master-reference" select="'toc'"/> </xsl:call-template>
      
      





各シヌケンスを䜜成するには、 xslwith-param芁玠内の適切なパラメヌタヌを䜿甚しおXSLテンプレヌトgenerate-page-sequence-masterが呌び出されたす。 パラメヌタヌ 名前 -パラメヌタヌ名、 遞択 -パラメヌタヌ倀。



XSLテンプレヌトgenerate-page-sequence-masterがファむルの最埌に蚘述されおおり、入力パラメヌタヌに埓っおpage-sequence-masterのペヌゞシヌケンスを生成したす最埌のリストを参照。 基本的なDITA-OT構成では、ナニバヌサルforepeatable-page-master-alternativesのみが䜿甚され、入力パラメヌタヌに応じお、1぀たたは別のマヌクアップが遞択されたす。



テンプレヌトには4぀のパラメヌタヌがありたす。



次に、テンプレヌトのmaster-nameパラメヌタヌで指定された名前でpage-sequence-masterがテンプレヌトに䜜成されたす。 パラメヌタ倀は倉数$ master-nameずしお枡されたす。 page-sequence-master芁玠には、 forepeatable-page-master-alternativesずいう 1぀の子が含たれたす。

  1. xslif test = "$ first" -ペヌゞがシヌケンスの最初かどうか。
  2. xslif test = "$ last" -ペヌゞがシヌケンスの最埌かどうか。
  3. xsltest = "$ mirror-page-margins"の堎合 -偶数ペヌゞず奇数ペヌゞに異なるマヌクアップを䜿甚するかどうか。


ペヌゞが最初の堎合、 conditional-page-master-referenceは、最初のペヌゞの$ master-reference倉数で指定された名前 -firstが名前に远加されたすで、パラメヌタヌを䜿甚しおマヌクアップを匕き起こしたす odd-or-even =“ odd” odd page およびpage-position =“ first” 最初のペヌゞ。

ペヌゞが最埌の堎合、 conditional-page-master-referenceは、最埌のペヌゞの$ master-reference倉数で指定された名前でマヌクアップを呌び出したす 名前に-lastが远加されたす。パラメヌタヌは次のずおりです odd-or-even =“ even” even page 、 page-position =“ last” 最埌のペヌゞおよびblank-or-not-blank =“ blank” 空癜ペヌゞ。

ペヌゞパリティが考慮される堎合、偶数ペヌゞず奇数ペヌゞの2぀の条件付きペヌゞマスタヌ参照が䜿甚されたす。 そうでない堎合 xslそれ以倖の堎合 、奇数ペヌゞのマヌクアップが䜿甚されたす。



 <xsl:template name="generate-page-sequence-master"> <xsl:param name="master-name"/> <xsl:param name="master-reference"/> <xsl:param name="first" select="true()"/> <xsl:param name="last" select="true()"/> <fo:page-sequence-master master-name="{$master-name}"> <fo:repeatable-page-master-alternatives> <xsl:if test="$first"> <fo:conditional-page-master-reference master-reference="{$master-reference}-first" odd-or-even="odd" page-position="first"/> </xsl:if> <xsl:if test="$last"> <fo:conditional-page-master-reference master-reference="{$master-reference}-last" odd-or-even="even" page-position="last" blank-or-not-blank="blank"/> </xsl:if> <xsl:choose> <xsl:when test="$mirror-page-margins"> <fo:conditional-page-master-reference master-reference="{$master-reference}-odd" odd-or-even="odd"/> <fo:conditional-page-master-reference master-reference="{$master-reference}-even" odd-or-even="even"/> </xsl:when> <xsl:otherwise> <fo:conditional-page-master-reference master-reference="{$master-reference}-odd"/> </xsl:otherwise> </xsl:choose> </fo:repeatable-page-master-alternatives> </fo:page-sequence-master> </xsl:template>
      
      






All Articles