Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

デフォルトの原稿ファイルを、選択した theme の example から取得したい #27

Closed
yamasy1549 opened this issue Apr 10, 2021 · 9 comments
Assignees
Labels
enhancement New feature or request
Milestone

Comments

@yamasy1549
Copy link
Member

現状はどの theme を選んでも templates/default/manuscript.md がデフォルトの原稿になっている。theme に合わせた原稿がデフォルトなら、それをもとにユーザーが出版物を作りやすいはず。

@akabekobeko akabekobeko self-assigned this Apr 10, 2021
@akabekobeko akabekobeko added this to the 1.0.0 milestone Jul 5, 2021
@akabekobeko akabekobeko added the enhancement New feature or request label Jul 5, 2021
@akabekobeko
Copy link
Member

akabekobeko commented Oct 11, 2021

調査メモ。

create-book のダウンロードとその後のプロジェクト構築処理は uetchy/create-create-app に依存している。

  1. 選択されたテーマを npm としてインストール
  2. manuscript.md は自身の templates/default/manuscript.md で構築

本件に対応するとしたら node_modules/@vivliostyle/THEMENAME/example/ 内の Markdown ファイルを検出して manuscript.md を上書きすればよい。ただし

に公開されている各種テーマの example を見ると Markdown ファイル名は統一されていない。また複数ファイルのものもある。

Theme example/
theme-academic fet.md, microcomputer.md
theme-bunko bunko.md
theme-slide slide.md
theme-techbook techbook.md

よって manuscript.md を上書きするファイルをどのように特定するを決める必要あり。

@akabekobeko
Copy link
Member

akabekobeko commented Oct 11, 2021

例えば以下の方法が考えられる

  1. themes 側で create-book による manuscript.md 用のファイルを統一された名前や階層とする
    • example/manuscript.md とか
    • theme-academic のように複数ファイルがある場合はどれかを manuscript.md にする
    • example/ と分けて create-book 想定の create-book/manuscript.md を用意するか、プロジェクトのルートに manuscript.md を置く手もある
  2. テーマの example/ で最初に見つかった *.md を対象とする
    • 順番は fs.readdir 任せ

create-book としてもテーマ作者的にも 1 のほうがファイルの目的を明示するという観点から好ましい。このファイルを配置しなければ create-book としては現状どおり自身の manuscript.md を利用する。テーマ作者として既定ファイルにしたい Markdown があるなら 1 に基づいて配置 = 明示、となるだろう。

@akabekobeko
Copy link
Member

manuscript.md というファイル名について。Markdown と同名の HTML ファイルが出力されることえを考慮すると index.md に変更して index.html へ対応するほうが好み。ただし既に manuscript.md でリリースしており、create-book 関連の資料やユーザーにとってこの名前が既定であると周知されているだろう。

よって themes 側でこれを上書きするためのファイルを用意してもらうにしても、同名を前提としたほうが混乱を避けられる。

@akabekobeko
Copy link
Member

@yamasy1549
create-book で対応するための調査と検討をしてみた結果、↑のような見解となりました。themes 担当としてのコメントをお願いします。

@yamasy1549
Copy link
Member Author

manuscript.md というファイル名について。Markdown と同名の HTML ファイルが出力されることえを考慮すると index.md に変更して index.html へ対応するほうが好み。ただし既に manuscript.md でリリースしており、create-book 関連の資料やユーザーにとってこの名前が既定であると周知されているだろう。

Vivliostyleの自動目次作成機能を使うと、デフォルトではindex.htmlという名前で目次ページが出力されるようになっています。index.{html, md}はわかりやすいですが、目次ページとバッティングしてしまうので別の名前のほうがよいかもしれません。

@yamasy1549
Copy link
Member Author

基本はmanuscript.mdのような名前にしておいて、themeのpackage.jsonで次のように指定するのもありかなと思っています。

  "vivliostyle": {
    "theme": {
      "name": "Academic",
      "category": "academic",
      "style": "./theme_common.css",
      "createbook": "./example/awesome.md", // ここ
      "topics": [
        "Academic",
        "Report"
      ]
    }
  }

@akabekobeko
Copy link
Member

よい案ですね。ファイル名の縛りより設定ファイルのほうが柔軟性もあります。

現状の themes そのままなら ./node_modules/@vivliostyle/theme-xxxx/vivliostyle.config.jsentry を参照すればいけそうな気がします。

  1. プロジェクトの vivliostyle.config.js からテーマのパッケージ名を取得
  2. node_modules/@vivliostyle/ からパッケージ名でテーマを探す、見つかれば次へ
  3. テーマの vivliostyle.config.jsentry があれば次へ
  4. entry に定義されているファイル群をプロジェクのルートにコピー
  5. プロジェクトの vivliostyle.config.jsentry をコピーしたファイル群の相対パスに置き換える

この案で試しに実装してみます。将来は↑で提案されているとおり専用の設定を検討するかもしれません。

@akabekobeko
Copy link
Member

覚書。

本件に #44 で対応してそれを反映したバージョンもリリース済みである。その旨をコメントして close する予定だったが、テーマ情報の取得に利用している api.npms.ip の Web API が 2021/10/21 時点の私の環境だと 500 エラーを返すようになった #47 ため、これが回復するまで保留としておく。

@akabekobeko
Copy link
Member

最新版である v0.5.0 に本件が反映されていますので close します。

なお #49 の問題により過去に create-book を実行したことのある環境だと古い npm が取得されて動作確認できない可能性があります。こちらについては別途対策します。

最新版を確認したい場合は以下のように最新版が確実にインストールされるプロジェクトを用意して

{
  "scripts": {
    "start": "create-book sample"
  },
  "dependencies": {
    "create-book": "latest"
  }
}

npm start を実行すると確実です。本プロジェクトを git clone しているなら examples/ にこの環境があるので

$ cd examples
$ npm i
$ npm start

を実行すると最新版 create-book が起動されます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants