スタイルシートを使う
スタイルシートは,ノートブックインターフェースにより提供される一部あるいはすべてのオプションに基づいて,ノートブックの外観や動作を制御するのにWolframシステムで使われるものである.基本的に,スタイルシートは別のノートブックで参照されたりあるノートブックのオプションとして適用されたりする,ノートブック中の特別なセルの集まりである.後者の場合,スタイルシートはプライベートあるいはローカルのスタイルシートとしてノートブックに「埋め込まれている」と言われる.
StyleDefinitions | ノートブックで使うことのできるスタイルの定義でファイルを指定するノートブックのオプション |
StyleData["style"] | スタイル定義セルの内容の低レベル表現 |
スタイルシートとはStyleDataセルを含むノートブックである.簡単なスタイルシートのノートブック式は以下のように単純である.
Notebook[{
Cell[StyleData["Section"],
FontColor->Gray],
Cell[StyleData["Subsection"],
FontFamily->"Helvetica"]
}]
上の例はSectionとSubsectionの2つのスタイルだけをそれぞれ1つのオプションで定義している.これ以上の情報はないので,現行のノートブックのSectionセルとSubsectionセルは互いにあまり違って見えない.両方とも同じサイズ(標準テキスト)で同じ余白を持つ.一方は灰色でもう一方は黒,また文字の大きさが違う.
あまり違いがないのは,書式の情報があまりないためである.通常このような書式の詳細は,メニューやダイアログボックスで「デフォルト」と呼ばれるデフォルトスタイルシートから来ており,ノートブック式ではStyleDefinitions->"Default.nb"と指定される.スタイルシートを編集するとき,デフォルトスタイルシートは,それが定義しているスタイルに加えられるすべての変更に対して,最初の参照ポイントとして常に加えられる.これはスタイルシート編集インターフェースおよび最初のセルとしてのスタイルシートノートブック式で見ることができるが,StyleDataの引数はスタイル名ではなくスタイルシートを示す.
Notebook[{
Cell[StyleData[StyleDefinitions -> "Default.nb"]],
Cell[StyleData["Section"],
FontColor->Gray],
Cell[StyleData["Subsection"],
FontFamily->"Georgia"]
}]
このスタイルシートで定義されるスタイルはすべて上部で指定されたスタイルシート(この場合はDefault.nb)からの名前付きのスタイルに対するオプションを継承する.複数のスタイルシートは同様の各セルの集まりとして指定することができ,オプション設定の継承は順に階層となる.うえの簡単な例でのこの設定では,SectionとSubsectionは新しく編集されたスタイル定義によって適用される灰色と別のフォントファミリ以外,デフォルトスタイルシートによって定義されているように,多数の点で異なっている.
次のセクションはスタイルシート編集インターフェースで新しいスタイルを編集および作成する方法を説明する.その後のセクションでは,継承,環境,高度なスタイルシート編集,スタイルシート開発者を特に対象とした高度なオプション設定について詳しく見ていく.
書式メニューから新しいスタイルを作成したり,既存のスタイルに変更を加えたりするプロセスは簡単である.次の例では,新規のデフォルトのフォーマットノートブックを使い,Sectionセルのスタイル形式を黒い文字で上部に線がないように変更する.
書式 ▶ スタイルシートの編集を選ぶ.ドキュメントにまだスタイルシートが含まれていなければ,これにより新しいスタイルシートが埋め込まれる.ここで加えられるスタイル変更は,このプライベートスタイルシートを含むノートブックにだけ影響する.次の画像は,スタイルシート,ツールバー,その下の編集エリアを示している.編集エリアは,Default.nbという既存のスタイルシートを参照するセルで始まる.
スタイルシートは,システムによりスタイル定義として認識される特殊なタイプのセルを含む一つのノートブックに過ぎない.ここで加えられるそのタイプのセルはすべて同じスタイル名に設定されている実際のドキュメントのセルの外観や動作に影響を及ぼす.この例で編集されるのは,スタイルを選択ポップアップメニューで利用できる一般的なスタイルであるSectionである.
メニューからSectionを選ぶと,そのスタイルセルが編集エリアに挿入される.ここでそれは「スタイルSectionの局所定義」とラベルがつく.局所定義というのは,このスタイルセルがアプリケーションのレイアウトから参照されるのではなく,ドキュメントに対して局所的なスタイルシートの一部であることを意味する.
スタイル定義セルを挿入する別の方法に,ツールバーフィールドに名前を入力するというものがある.これは既存のスタイル名と同じに正確に入力しなければならない.あるいは自分で選んだ新しいスタイル名でもよい.Enterキーを押すと,それが編集エリアに挿入される.
セルブラケットを選択すると,ドキュメントのインターフェースメニューから利用できる設定が直接適用され,そのスタイルのセルすべてに同様に適用される.テキストの色を変更するためには,書式 ▶ 文字の色 ▶ 黒を使う.
この方法は,同様のカスタム書式が既に適用されているドキュメントのセルには作用しない.それは,さまざまな参照レベルで得られる書式設定であるカスケードスタイルシートに関係のある概念,継承のためである.このスタイルシートの最初のセルはDefault.nbを参照している.それをクリックすると,Default.nbがCore.nbを参照していることが分かる.参照の連鎖により,新しいローカルのスタイルシートはDefaultと実際のドキュメントコンテンツとの間に置かれる.したがって,ドキュメント内のセルの変更はどれもスタイルシートの中の同種の設定をオーバーライドする.
ドキュメントインターフェースメニューの他,設定変更をより細かく行うにはオプションインスペクタを使うとよい.Sectionセルの上部の線が変更したい場合,これが唯一利用できるインターフェースである.スタイルセルを選んだままで書式 ▶ オプションインスペクタを選んでセル設定のCellFrameにアクセスする.
CellFrameオプションはリストのリストを取る.この場合,最後の値は1に設定されているが,これはセル上部のフレームのサイドが1ピクセルであることを意味する.
その値を0に変更してEnterを押すと,セル上部の線を削除することができる.このオプションの左側に"x"のマークが付きデフォルト設定から変更されたことを示す.この機能および制御できる設定の詳細は「オプションインスペクタ」を参照されたい.
Sectionの新しい設定が適用されたら,スタイルシートウィンドウを閉じ,ショートカットまたは書式 ▶ スタイル ▶ Sectionメニューを使ってドキュメントに新しいSectionセルを作りそこにタイプし始めると,テキストが黒になり上部の線がなくなっていることが分かる.
継承とは,さまざまなレベルの参照を介して得られる書式設定であるカスケードスタイルシートに関連した概念である.スタイルシートの最初のセルは通常Default.nb等の既存のスタイルシートを参照する.それをクリックすると,Default.nbが別のCore.nbを参照していることが分かる.特定のオプション設定が,参照されたスタイルシートやスタイルにあると,実際のドキュメントのコンテンツの最終的な結果を制御する.積み重なった効果の最後は作業中のドキュメントの実際のセルである.FontColor->Red等のオプションが適用されていると,そのオプションが継承スタックのすべてのFontColorの設定をオーバーライドする.
$FrontEnd | ノートブックインターフェースのすべてのオプションに対するデフォルト設定 |
Core.nb | 低レベルのセルの外観と動作を定義する基本スタイルシート |
Default.nb | ユーザが選択できるスタイルシート.通常新規ドキュメントのDefault.nb |
プライベートスタイルシート(ある場合) | ドキュメントのスタイルシート編集の結果 |
スタイルシートの"Notebook" 局所定義 | オプションをノートブックレベルで適用するスタイルシートの特殊なスタイル定義 |
スタイルシートのスタイル環境設定 | 環境は以下のセクションで説明する |
ノートブックレベルのオプション設定 | ノートブックレベルの範囲で適用される設定 |
セルレベルのオプション設定 | セルレベルで適用される設定 |
StyleData["style","environment"] | スタイル環境"environment"のスタイル定義セルのコンテンツを表す |
StyleDataの第2引数は,通常その設定が適用される環境名である.
スタイル環境は,スタイルシートを変更しなくてもドキュメントの設定を変える方法を提供する.一般的な環境にはSlideShowやPrintoutがある.特化された動作の多くは,ドキュメントの環境設定に依存するものが多い.例えば,スライドショーがスライドショーとして動作するのは,通常の作業用環境では対して意味のない改ページ設定があるためである.同様に,印刷は改ページの影響を受けるが,Printout環境は印刷されたページにより適したサイズになるよう,すべての内容を小さくする.フォントの基準も印刷用に高解像度に設定される.
環境は,書式 ▶ スクリーン環境およびファイル ▶ 印刷設定 ▶ 印刷環境の2つのメニューで印刷とスクリーン表示用が異なるよう設定することができる.デフォルトでは,ドキュメントインターフェースはスクリーン環境をWorkingに,印刷環境をPrintoutに設定している.したがって,これはWYSIWYG設定になっていないことに注意する必要がある.すべての状況において「What You See Is(見たもの)」が「What You Get(実際のもの)」ではないが,説明したメニューからユーザが変更することができる.
デフォルトスタイルシートを調べて,別の環境がどのように構成されているかを見てみる.新しいドキュメントのスタイルシートを編集するよう選び,編集インターフェースツールバーの下の最初のセルのDefault.nbのリンクをクリックする.Sectionのいずれかを開き,スタイル定義を見付ける.これはほとんどの場合セルグループでもある.それは,Working環境スタイル定義セル(環境がStyleDataで定義されていない)は,同じスタイル名のほかの環境のスタイル定義セルを常にグループ化するからである.
環境を使う面白いテクニックの一つに,特殊なセルを表示したい環境以外のすべての環境でCellOpen->Falseiを設定するというものがある.こうすることで,各言語に対して名前の付けられた環境間で切り換え可能な,同じ内容のいくつもの言語への翻訳のための環境を作成することができる.別の使い方として,スライドショーパレットで挿入されるスライドディバイダのようなユーティリティセルを表示したり隠したりするというものがある.これらのディバイダはSlideShow環境で離散的なスライドビューを作成する改ページ設定で定義される.一方CellOpen->False設定がそこでも適用されるため,同じビューモードで見えなくなる.
カスタムスタイルシートの開発は,どれほどのカスタマイズが必要かにより,素早く簡単なこともあれば,長く複雑なプロセスになることもある.スタイルシートが技術的な記事や教科書用のドキュメントデザインに使われる場合,配備の条件により,複数の環境となる可能性も考慮して,100以上のスタイル定義を開発し,それぞれにカスタマイズされたオプション設定ができるようにしておく必要がある.
このような場合まず,適切なスタイル名のついた,定義する必要のあるすべての種類のセルに対する例を含むノートブックを作成するとよい.そのノートブックはドキュメントインターフェースで現在使われているものと同じかもしれないが,所望の名前にすることもできる.完全なテンプレートノートブックで,スタイルシートの編集を始める.これはテンプレートノートブックに対してプライベートのままである.設定は,全体のドキュメントのコンテキストで,テンプレートノートブックですぐに見ることができる.
「基本的な編集プロセス」で説明してあるセルオプションを適用するためのメソッドの他,時折もっと効率的な方法は,セル ▶ セルを式で表示を使ってスタイル定義セルの式を見ることである.これによりセル式の根底にあるシンタックスを見ることができ,ノートブックプログラミングや一般的なセルオプションが分かる人はこのモードで作業し,オプション設定を速く積み上げることができる.
プライベートスタイルシートとして完成したら,編集インターフェースツールバーのスタイルシートをインストールボタンを使って,そのスタイルシートを自分のアプリケーションレイアウトに保存することができる.別の方法として,スタイルシートはこれらの特殊セルのノートブックに過ぎないので,スタイル定義セルすべてを選んでそれを新規ノートブックにコピーするというものがある.書式 ▶ スタイルシート ▶ その他メニューを使ってそのノートブックをすべてのドキュメントに適用できる場所に保存する.あるいは,フロントエンドを再起動したときにスタイルシートリストにリストされる特別なスタイルシートパスのいずれかに保存してもよい.
FrontEnd`FileName[{$UserBaseDirectory,"SystemFiles","FrontEnd","StyleSheets"}]
FrontEnd`FileName[{$InstallationDirectory,"SystemFiles", "FrontEnd","StyleSheets"}]
セルのグループ化動作は通常スタイルシートレベルで制御され,ドキュメント全体の階層構造に影響を及ぼす.テンプレートノートブックの内容にセル ▶ グループ化メニューの設定を実際に適用してみると,さまざまな可能な効果が実感できるだろう.カスタムスタイル定義に適用されるオプションのシンタックスにすぐにアクセスするためには,セル式を見ればよい.セルのグループ化について学ぶには,ヘルプシステムの「セルグループの制御」から始めるとよい.
自動番号付け機能もスタイルシートでよく定義される設定であり,特に技術ドキュメントで使われる.ファイル ▶ 新規作成 ▶ スタイル付きのノートブックから学術論文か原稿の新しいテンプレートを選んでそのスタイルシートの設定を調べてみるとよい.スタイルシートを編集することを選び,参照されたスタイルシートをクリックして次のセクションを開き,自動番号付けスタイルの例についての番号の付いたリスト項目にアクセスする.
スタイルが開発されている設定のほとんどは,オプションインスペクタのセルオプションカテゴリで見付かる.特に面白いものにCellFrameやCellFrameLabelsというオプションがある.後者はあらゆるセル式を取るという点でCellDingbatと同様であるが,セルのないようにラベルを付けたり飾ったりする方法を提供する.CellFrameLabelsの極端な使い方の例として,デモンストレーションスタイルシートがある.ここではテンプレートファイルで最初に表示されていた内容がスタイルシート設定から導かれている.ファイル ▶ 新規作成 ▶ デモンストレーションを選んですべてをセル式で見ると,内容がないことが分かる.
デモンストレーションスタイルシートも他の異なるスタイル定義から設定を継承する方法をハイライトする.StyleDataはスタイルシートの上部にリストされた参照スタイルシートと同じ形式の別の引数を取る.この引数はスタイルシートを指す代りに,設定を継承するもとになる異なるスタイルを指す.
Cell[StyleData["Section", StyleDefinitions->StyleData["Title"]],
FontColor->Gray]
Cell[StyleData["Section", "Printout", StyleDefinitions->StyleData["Title", "Printout"]],
FontColor->Gray]
セルオプションを指定する最も簡単で最も強力な方法は,式を使うことである.これは,フロントエンドがWolfram言語の関数の多くをサポートする,自身の計算カーネルを含んでいるから可能なのである.コマンド補完で提供されるものを見るために関数名をタイプしているときにFEPrivate`コンテキストを使うと分かる.例えば,FEPrivate`IfかFEPrivate`SameQを試してみるとよい.さらに,どのオプションに対しても別のオプション設定を動的に制御する式の一部としてCurrentValue[]を使うこともできる.このテクニックは次のような設定のスライドショースタイルシートに見ることができる.ここではウィンドウ幅の値が左側のセルマージン設定で0.135をかけることになっている.
CellMargins->{{
0.135 FrontEnd`AbsoluteCurrentValue[{WindowSize, 1}],
0.03 FrontEnd`AbsoluteCurrentValue[{WindowSize, 1}]},
{1.5 Inherited, 1.5 Inherited}}
注意事項:スタイルシートはドキュメントの編集や処理のいずれの間にもフロントエンドでパースされるので,オプション設定の式に注意することが大切である.特に式が効率よい計算となっている必要がある.Dynamic[]も使うことができるが,フロントエンドがスタイルシートをインタラクティブにパースするため,フォーマットオブジェクトをアーカイブするほかの手段がない場合以外は,使わない方がよい.