コンテンツへスキップ

← 記事一覧に戻る

LaTeX なしで Markdown を PDF に変換する:ブラウザー印刷パイプラインの仕組み

Markdown を PDF に変換する方法を尋ねると、定番の答えは Pandoc に LaTeX エンジンを組み合わせる方法です。数ギガバイトの TeX のダウンロードから始まり、フォントエラーやテンプレートのデバッグで終わることも少なくありません。履歴書、レポート、会議のメモのために立ち上げるには、あまりに大掛かりな仕組みです。

そのどれも必要としない 2 つ目のルートがあります。Markdown を HTML にレンダリングし、ページ CSS でスタイルを整え、ブラウザー自身の印刷エンジンに PDF を出力させる方法です。この記事では、そのパイプラインの仕組み、出力がスクリーンショットではなく本物の文書である理由、LaTeX に勝る点、そして正直に及ばない点を説明します。

単純な仕事にかかる LaTeX 税

Pandoc はほとんどの文書変換で正しい答えですが、その PDF ライターは例外です。Pandoc 自身は PDF をレンダリングしません。文書を LaTeX ソースとして組版し、外部エンジン——pdflatex、xelatex、lualatex——を呼び出します。つまり、マシン上に動作する TeX ディストリビューションが必要です。フルインストールの TeX Live は数ギガバイトに上り、最小構成のものは容量を節約できますが、最初のパッケージ不足エラーでインストーラーに逆戻りします。

クラウドコンバーターはインストールを回避する代わりに、問題を移し替えます。ファイルは誰かのサーバーに送られ、キューで待ち、戻ってきます——サイズ制限を超えておらず、1 日の上限に達していなければ。機密の下書き、契約書、未発表の原稿では、アップロード自体が決定的な問題です。構造化テキストを印刷可能なページに変換するという仕事自体は、本質的には難しくありません。従来のツールが難しく見せているだけです。

ブラウザー印刷パイプラインが実際に行うこと

パイプラインは 3 つの段階からなり、すべてローカルで動きます。まず Markdown が HTML に変換されます。当サイトでは、ほかのすべての変換を駆動しているのと同じ Pandoc WASM エンジンが使われます。次に、その HTML を印刷スタイルシート付きの完全な文書に包みます。固定のページサイズ、実際の余白、見出し・リスト・コード・表のためのタイポグラフィ階層です。最後に、ブラウザーの印刷エンジンがページをレイアウトして PDF を書き出します。

3 つ目の段階は、見た目以上のことをしています。Chrome、Edge、Firefox、Safari はすべて成熟したページネーションエンジン——レシートや搭乗券を印刷するのと同じもの——を内蔵しており、「PDF として保存」の出力は本物の PDF です。テキストレイヤーを持つベクターグリフです。結果の文書では文を選択でき、検索でき、コピーでき、スクリーンリーダーに渡せます。文書の画像ではなく、ページ割りされた文書そのものです。

ページ CSS:文書らしく見せる部分

印刷したウェブページと文書の違いは、ほんの一握りの CSS ルールに宿ります。@page ルールが用紙を固定します——ここでは A4、余白 16 ミリ——ので、レイアウトがウィンドウサイズに依存しなくなります。フォントサイズはタイトルから見出しレベルへと段階的に下がり、余白は画面ではなく印刷の慣例に従います。

より繊細なルールが改ページを制御します。見出しには break-after: avoid が付くため、セクションタイトルがページの下端に孤立し、本文が次のページに始まることがありません。表、コードブロック、引用、画像には break-inside: avoid が付くため、レンダラーはそれらを真っ二つにする代わりに、まるごと次のページへ移します。これらはワープロソフトが黙って適用しているルールそのものです。それを明示的に適用することが、ブラウザーのタブを組版機に変えます。

LaTeX が依然として勝る領域

境界について正直であることは重要です。文書が 200 の相互参照を持つ学位論文、厳密なテンプレートを強制する学術誌への投稿論文、あるいは高度な数式だらけなら、TeX をインストールしてください。LaTeX ほど数式を美しく組版するものはなく、どの学術誌も体裁の「だいたい合っている」を受け入れません。文献ツール——BibTeX や機関別の厳密な CSL バリアント——も TeX の世界のほうが深いものがあります。

その境界の外側には、現実の文書の大半があります。レポート、履歴書、ドキュメント、請求書、会議のメモ、レビュー用の章。求められるのは、クリーンなタイポグラフィ、妥当な改ページ、ページをまたいで裂けない表です。この種の仕事において、印刷パイプラインは妥協ではありません。同じ目的地への短い道のりであり、インストールもコンパイルもデバッグもない分、反復ループは速くなります。

プライバシーとスピードという配当

すべての段階が自分のマシン上で動くため、文書はマシンから出ていきません。アップロードのプログレスバーがないのは、アップロードがないからです。キューの順番がないのは、キューがないからです。アカウントがないのは、計量するものがないからです。このパイプラインは、飛行機の中でも、現地のオフィスでも、ページを読み込んだ後は一度もネットに触れていないマシンでも動作します。

速さも同じ事実から生まれます。変換とページ割りは数秒で、フィードバックループは短いものです。Markdown を編集し、もう一度変換し、プレビューを眺め、印刷する。文書を反復する人にとって——そして PDF は通常、反復の最初ではなく最後のステップです——インストールとアップロードを取り除くことは、人々が PDF の作成自体を避ける原因になる摩擦を取り除きます。

印刷パイプラインで最高の結果を得るには

いくつかの習慣が効果を発揮します。文書の冒頭にはタイトルとして 1 つのレベル 1 見出しを置き、見出し階層は正直に保ちましょう。改ページルールは見出しを本文と一緒に保ちますが、それは構造が正しい場合に限ります。表は狭く保ちましょう。印刷段に収まる表は丸ごと生き残り、幅の広すぎる表はセルが折り返されます。画像には妥当な幅を指定し、ブラウザーはデフォルトで背景色を印刷しないことを覚えておきましょう。ここのスタイルシートは、あえて罫線と余白に依存する設計です。

最後に、印刷ダイアログを最後のチェックポイントとして使いましょう。プレビューは、何かを保存する前に実際のページ割りを見せてくれます。読者に合わせて A4 と Letter を切り替え、どの表も不恰好に配置されていないことを確認する瞬間です。30 秒のプレビュー確認は、送信後に作り直す PDF よりはるかに安くつきます。

続きを読む

Markdown を PDF に変換