概要
できるだけプレーンに近いMarkdownファイルから、それなりの見た目の日本語PDFを出力するためのQuartoテンプレートを作ってみました。GitHubに置いてあります。
単一のMarkdownファイルから技術資料を作るためのtechnoteと、複数のMarkdownファイルを各章とする技術書を作るためのbookの2種類を用意してあります。



Quartoについては、以下のリンクを参照してください。Quarto専用を含むMarkdownの表記方法も記載されています。
- https://quarto.org/
Quartoの他に以下が必要です。フォントはStaticフォントをインストールしてください。VariableフォントだとLaTeXのレンダリングに失敗する可能性が高いです。
- TinyTeX: Quartoインストール後に
quarto install tinytexを実行してください。 - サンセリフフォント
- セリフフォント
- Noto Serif (for book)
- Noto Serif JP (for book)
- 等角フォント
technote
tecnote/内は、bxjsarticleをもとにしたテクニカルノート用のテンプレートファイルセットです。Markdownファイル1つをPDF化します。
> quarto render <markdown file path> --to pdfでレンダリングしてください。
テンプレートのファイル構成は以下の通りです。
_metadate.yml: YAMLヘッダーの設定ファイル_preamble_technote.tex: LaTeXのプリンブルファイルquarto_template.md: Markdownファイルquarto_template_assets/: 画像やその他の素材を格納するフォルダthe-optical-society.cls: 参考文献のスタイルファイル
Markdownファイルを作成し、YAMLヘッダーでタイトルなどを指定します。imageファイルなどの素材は、各章ごとにquarto_template_assetsのようなフォルダを作成し、そこに配置して参照します。各章のMarkdownファイルと対応する素材フォルダを取り出せば、そのままbookテンプレートのひとつの章として使用できます。
全体の設定は_metadata.ymlで行いますが、基本的には変更不要です。
book
book/内はbxjsbookをもとにした技術書用のテンプレートファイルセットです。Chapterごとに複数のMarkdownファイルを用意してまとめてPDF化します。
> quarto renderでレンダリングしてください。
テンプレートのファイル構成は以下の通りです。
_quarto.yml: Quartoの設定ファイル_preamble_book.tex: LaTeXのプリンブルファイル***.md: 各章のMarkdownファイル***.qmd: メインコンテンツ以外のMarkdownファイル***_assets/: 各章の画像やその他の素材を格納するフォルダthe-optical-society.cls: 参考文献のスタイルファイル_book/: 出力フォルダ
章ごとにMarkdownファイルを作成し、YAMLヘッダーで章のタイトルを指定します。テンプレートでは、quarto_template_1.mdとquarto_template_2.mdの2つの章を用意しています。imageファイルなどの素材は、各章ごとにquarto_template_1_assetsやquarto_template_2_assetsのようなフォルダを作成し、そこに配置して参照します。各章のMarkdownファイルと対応する素材フォルダを取り出せば、そのままtechnoteテンプレートでも使用できます。
上記以外に、まえがきindex.qmdとあとがきpostface.qmdのMarkdownファイルも用意しています。index.qmdが無いとquarto renderが通らないので注意してください。参考文献と奥付はreferences.qmdで自動生成します。参考文献を使用しない場合は、このファイルを編集して参考文献部分をコメントアウトしてください。
全体の設定は_quarto.ymlで行います。必要箇所を変更して使用してください。
その他
LaTeXエンジンにはLuaLaTeXを使用しているのですが、コンパイルにはなかなか時間がかかってしまいます。XeLaTeXの方が速いらしいのですが、LuaLaTeXの方が日本語の組版が安定しているようなので、こちらを採用しました。将来的にはXeLaTeXに切り替えるとか、Typstを使うとか、あり得るかもしれません。