図4.13 article.xml(リスト3.2)のフォーマット例
まず用紙サイズを決定する必要がありますが、これは先の article.dsl(リスト3.3)と同じでよいでしょう。その後、タイトル、サブタイトル、著者名、日付が並び、いずれも単独の行で、それぞれ中央揃えになっています。これらは article.dsl で既に paragraph として指定していましたが、今回はそれに特質を追加することにします。文書のタイトルを例に挙げてみましょう。
例 4.9
(element (article title) (make paragraph quadding: ’center font-family-name: "Ryumin Light" font-weight: ’bold font-size: 18pt line-spacing: 18pt space-after: 10pt))
複雑な指定ではありませんから、書体や行揃えについて学んだ後で見ればすんなりと理解できると思います。また、space-after: を指定して paragraph の後に余白を追加していますが、この際に、font-size: を変更しているのであれば line-spacing: も適当に調整すべきです。特に font-size: に大きな値を指定した場合、line-spacing: が不適切だと折り返した行などが重なって表示される原因になります。
さて著者名と日付はそれぞれ単独の paragraph として指定されていますが、これらはフォーマット上ひとまとまりのグループと考えることができそうです。図4.13では日付の下に余白を多めに追加していますが、日付・著者名の順に表示したい場合は余白を著者名の後にしなければなりません。このような場合は、著者名と日付を display-groupでグループ化してしまい、余白の追加は display-group に対して行うとよいでしょう。article.xml の場合、幸いにも author タグと date タグは articleinfo タグの子になっていますので、articleinfo タグをdisplay-group とします。
例 4.10
(element articleinfo (make display-group space-after: 40pt))
section タグなども、articleinfo タグと同じように考えていくとよいでしょう。また、section タグの子である title タグや para タグの指定については、ひとつずつ取りあげるまでもなく、おわかりになるだろうと思います。
さて、emphasis タグは図4.13では書体の変更を行なって強調をあらわしています。このスタイル指定は次のようになります。
例 4.11
(element emphasis (make sequence font-family-name: "GothicBBB Medium"))
本章の説明にもあったように、強調表示の方法は様々ですので、色々と試してみてください。
さて、文中には引用(blockquote タグ)があり、インデントと余白を追加して独立した段落であることがはっきりわかるようにしてあります。ところで、この引用にあたる blockquote タグですが、引用情報を示す quoteinfo タグが para タグよりも先にあらわれるようになっています。このような場合は SDQL を用いて処理する順序を入れ換える必要があります。以下に例を示します。
例 4.12
(element blockquote (make display-group start-indent: 20pt space-before: 10pt space-after: 10pt (process-matching-children ’para) (process-matching-children ’quoteinfo)))
処理順を入れ換えるといっても難解なものではありません。make 式には contentexpression(p.30参照)が必要であり、この指定を省略した場合に限り暗黙のうちに (process-children) が補われるという特性、言い換えると、content-expression になんらかの式を記述するとその式だけが処理される( 明示的に記述しない限り (process-children) の処理は行なわれない)という特性を利用します。この場合は、(process-matching-children …) を処理順に合わせてcontent-expression に記述すればよいことになります。
他の要素についても、これまでに説明した内容を応用して色々な指定を行うことができます。スタイルシートの例としてリスト4.1を掲載しておきますので、必要に応じて参考にしてください。また、これまで学んだことを他の SGML/XML 文書などにも応用して、様々な文書に対するスタイル指定の練習を重ねるのもよいでしょう。
リスト4.1 [ article2.dsl ]
<!DOCTYPE style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN"> <style-sheet> <style-specification> <style-specification-body> (define *en-serif* "Times Roman") (define *en-sans* "Helvetica") (define *ja-serif* "Ryumin Light") (define *ja-sans* "GothicBBB Medium") (element article (make simple-page-sequence language: ’JA page-width: 210mm page-height: 297mm top-margin: 30mm bottom-margin: 40mm left-margin: 30mm right-margin: 30mm)) (element (article title) (make paragraph font-family-name: *ja-serif* font-weight: ’bold font-size: 18pt quadding: ’center line-spacing: 18pt space-after: 10pt)) (element (article subtitle) (make paragraph font-family-name: *ja-serif* font-size: 14pt quadding: ’center line-spacing: 14pt space-after: 20pt)) (element articleinfo (make display-group space-after: 40pt)) (element author (make paragraph font-family-name: *en-serif* font-size: 10pt quadding: ’center (process-matching-children ’firstname) (literal " ") (process-matching-children ’surname))) (element date (make paragraph font-family-name: *ja-serif* font-size: 10pt quadding: ’center (process-matching-children ’year) (literal "年") (process-matching-children ’month) (literal "月") (process-matching-children ’day) (literal "日"))) (element section (make display-group font-family-name: *ja-serif* font-size: 10pt line-spacing: 15pt quadding: ’justify space-after: 30pt)) (element (section title) (make paragraph font-family-name: *ja-sans* font-weight: ’bold font-size: 12pt quadding: ’start space-after: 10pt)) (element para (make paragraph first-line-start-indent: 10pt space-before: 0pt space-after: 0pt)) (element emphasis (make sequence font-family-name: *ja-sans*)) (element blockquote (make display-group start-indent: 20pt space-before: 10pt space-after: 10pt (process-matching-children ’para) (process-matching-children ’quoteinfo))) (element quoteinfo (make paragraph quadding: ’end space-before: 5pt (sosofo-append (process-matching-children ’title) (literal ", ") (process-matching-children ’author)))) (element (quoteinfo title) (make sequence (literal "『") (process-children) (literal "』"))) (element (quoteinfo author) (sosofo-append (make sequence font-family-name: *en-serif* (process-matching-children ’firstname) (literal " ") (process-matching-children ’surname)) (make sequence font-family-name: *ja-serif* (literal "著")))) </style-specification-body> </style-specification> </style-sheet>