Themeの開発
Themeを作成する
create-vivliostyle-themeによる雛形生成
create-vivliostyle-theme CLIを使って、テーマプロジェクトの雛形を生成します。
npm create vivliostyle-theme <theme-name>
対話形式で以下の項目を入力します。
| 項目 | 説明 |
|---|---|
description |
テーマの説明 |
author |
作者名 |
email |
メールアドレス |
license |
ライセンス(MIT、Apache-2.0等) |
category |
テーマの分類(novel / magazine / journal / report / misc) |
実行後、vivliostyle-theme-<theme-name> ディレクトリが生成されます。
生成されるファイル構成
vivliostyle-theme-<name>/
├── .gitignore
├── package.json # パッケージ定義(vivliostyle.theme 設定を含む)
├── README.md # テーマの説明・使い方
├── theme.css # テーマのメイン CSS
├── vivliostyle.config.js # プレビュー用の設定ファイル
└── example/
└── default.md # サンプル原稿(VFM 形式)
各ファイルの役割:
| ファイル | 役割 |
|---|---|
package.json |
テーマのメタ情報。vivliostyle.theme プロパティでテーマ名・作者・メインCSS・カテゴリを定義 |
theme.css |
テーマのスタイル定義本体。theme-baseの @import とCSS変数のカスタマイズが初期設定済み |
vivliostyle.config.js |
vivliostyle preview でテーマの動作確認に使用。entryに example/default.md を指定 |
example/default.md |
テーマ適用例を示すサンプルMarkdown。VFM 記法に対応 |
雛形をカスタマイズする
theme.cssの編集
生成直後の theme.css にはtheme-baseの全モジュールインポートとCSS変数のカスタマイズ例が含まれています。
/* theme-base の全モジュールをインポート */
@import url(../@vivliostyle/theme-base/theme-all.css);
/* コードハイライト(Prism)を追加 */
@import url(../@vivliostyle/theme-base/css/lib/prism/base.css);
@import url(../@vivliostyle/theme-base/css/lib/prism/theme-okaidia.css);
:root {
/* 基本スタイル */
--vs-font-family: 'Times New Roman', serif;
--vs-font-size: 12px;
--vs--heading-line-height: 1.3;
--vs--h1-font-size: 2.5em;
/* 脚注 */
--vs-footnote--call-content: '[' counter(footnote) ']';
/* ページレイアウト */
--vs-page--mbox-content-bottom-center: counter(page);
--vs-page--mbox-content-top-left: env(doc-title);
/* 目次 */
--vs-toc--marker-margin-inline: 8rem;
}
独自のスタイルを追加するには、このファイルの末尾にルールを記述します。ページサイズの設定例:
@page {
size: A5;
margin: 20mm 15mm;
}
theme-baseのモジュール活用
theme-baseは機能ごとにモジュール分割されています。全モジュールが不要な場合は、theme-all.css の代わりに必要なモジュールのみをインポートできます。
/* 基本モジュールのみ */
@import url(../@vivliostyle/theme-base/css/common/meta-properties.css);
@import url(../@vivliostyle/theme-base/css/common/reset.css);
@import url(../@vivliostyle/theme-base/css/common/basic.css);
/* 必要な機能モジュールを追加 */
@import url(../@vivliostyle/theme-base/css/partial/toc.css);
@import url(../@vivliostyle/theme-base/css/partial/footnote.css);
利用可能なモジュール一覧:
| カテゴリ | モジュール | CSS変数プレフィックス |
|---|---|---|
| common | meta-properties.css — ドキュメント全体のメタプロパティ |
--vs- |
| common | reset.css — CSSリセット |
— |
| common | basic.css — 基本HTMLタグのスタイル |
--vs-- |
| partial | crossref.css — 図表・引用の相互参照 |
--vs-crossref-- |
| partial | endnote.css — 後注 |
--vs-endnote-- |
| partial | footnote.css — 脚注 |
--vs-footnote-- |
| partial | footnote-external-link.css — 外部リンクの脚注化 |
--vs-footnote-- |
| partial | page.css — ページメディア |
--vs-page-- |
| partial | section.css — 見出し番号・節参照 |
--vs-section-- |
| partial | toc.css — 目次 |
--vs-toc-- |
| partial | utility-classes.css — ユーティリティクラス |
— |
| lib | prism/base.css — コードハイライト基盤 |
--vs-prism-- |
| lib | prism/theme-prism.css — Prismデフォルトテーマ |
--vs-prism-- |
| lib | prism/theme-okaidia.css — Okaidiaテーマ |
--vs-prism-- |
詳細は theme-baseのREADME を参照してください。
CSS変数のオーバーライド
theme-baseや各テーマが公開するCSS変数を :root で上書きすることで、テーマをカスタマイズできます。
:root {
/* フォント設定 */
--vs-font-family: 'Noto Serif JP', serif;
--vs-font-size: 10.5pt;
/* 見出し */
--vs--h1-font-size: 2em;
--vs--heading-line-height: 1.4;
/* 相互参照のカウンタスタイル */
--vs-crossref--counter-style: upper-roman;
/* ページヘッダ・フッタ */
--vs-page--mbox-content-top-left: env(pub-title);
--vs-page--mbox-content-top-right: env(doc-title);
--vs-page--mbox-content-bottom-center: counter(page);
}
実際のテーマでの活用例として、theme-techbook はテーマ固有のCSS変数(--vs-theme--*)を公開しています:
:root {
--vs-theme--anchor-color-body: #3498db;
--vs-theme--blockquote-color-bg: #ecf0f1;
--vs-theme--inline-code-color-bg: #ecf0f1;
--vs-theme--image-resolution-for-figure-image: 300dpi;
--vs-theme--page-top-left-content: env(pub-title);
--vs-theme--page-bottom-content: counter(page);
}
example/ ディレクトリの編集
example/ にはテーマの適用例を示すサンプルMarkdownを配置します。
- 最低1つのMarkdownファイルが必要です
- VFM (Vivliostyle Flavored Markdown) 記法が利用できます
- テーマが対応する主要なスタイル(見出し、コードブロック、脚注、画像、数式等)を網羅する内容を推奨します
プレビューで動作確認:
npm run preview
Themeを公開する
事前検証
公開前に vivliostyle-theme-scripts validate を実行して、パッケージの妥当性を検証します。
npm run validate
検証項目:
| チェック | 種別 | 内容 |
|---|---|---|
| スタイルロケータ | エラー | vivliostyle.theme.style、style、main のいずれかが設定されていること |
| 作者情報 | 警告 | vivliostyle.theme.author または author が設定されていること |
プレビュー確認
npm run preview
vivliostyle.config.js の設定に基づき、example/ のサンプル原稿にテーマを適用した状態でプレビューが表示されます。
package.jsonの必須フィールド
{
"name": "vivliostyle-theme-<name>",
"main": "theme.css",
"keywords": ["vivliostyle", "vivliostyle-theme"],
"vivliostyle": {
"theme": {
"name": "Theme Display Name",
"author": "Author Name",
"style": "theme.css",
"category": "misc",
"topics": []
}
}
}
| フィールド | 必須 | 説明 |
|---|---|---|
vivliostyle.theme.style |
✅ | メインCSSファイルのパス |
vivliostyle.theme.author |
✅ | テーマの作者名 |
vivliostyle.theme.name |
— | テーマの表示名 |
vivliostyle.theme.category |
— | novel / magazine / journal / report / misc |
vivliostyle.theme.topics |
— | テーマの用途を示すトピックの配列 |
keywords |
— | "vivliostyle" と "vivliostyle-theme" を含めることを推奨 |
詳細な仕様は Vivliostyle Themeの仕様 を参照してください。
npmへの公開
npm publish
公開後、テーマは以下から検索可能になります:
公式テーマとして提案する
自作したテーマは、ぜひVivliostyle公式テーマとして提案してください。詳細は 公式Themeの採用 を参照してください。