scifont — 科学出版向けフォント設定ライブラリ

Library

概要

scifontは、Matplotlibを用いた科学図作成でよく起きる2つの課題――(1)DockerやLinuxサーバで「Arial」「Times New Roman」などのフォントが存在せずプロットが意図しないフォントにフォールバックしてしまう問題、(2)エクスポート後にテキストがパス化されて編集不能になる問題――を解決するために設計された小さなライブラリです。rcParamsやフォントの検索/登録、フォールバックポリシー、PDF/SVG出力時のフォント処理設定などを簡潔なAPIで提供し、論文投稿用の「再現性のある(reproducible)」「編集可能な(editable)」図の生成をサポートします。

GitHub

リポジトリの統計情報

  • スター数: 9
  • フォーク数: 0
  • ウォッチャー数: 9
  • コミット数: 6
  • ファイル数: 9
  • メインの言語: Python

主な特徴

  • フォント欠如への耐性:典型的な英語系フォントがない環境でもフォールバックして見た目を保つ仕組み
  • テキストの編集性維持:SVG/PDF出力でテキストをパス化せず編集可能にする設定を提供
  • 再現性重視:rcParamsの一括適用やコンテキスト管理で設定を明示的にコントロール
  • 軽量で配布可能:小さなコードベースでCI/CDパイプラインへ組み込みやすい

技術的なポイント

scifontの技術的な肝は、Matplotlibのフォント管理と出力設定(rcParams)を適切に操作して「環境依存のずれ」を抑える点にあります。具体的には以下の要素が重要です。

  • フォント検出とフォールバック:Matplotlibのfont_managerを活用してシステム上のフォントを検索し、指定した主要フォント(例:Arial, Times)を見つけられない場合に代替フォント(DejaVuやLiberationなど)へマッピングする仕組みを提供します。これによりDockerやCI上で発生しがちな見た目の崩れを回避します。

  • rcParamsによる出力挙動制御:PDF/SVG出力時にテキストをパスに変換してしまう設定(過去にはType 3フォントやフォント埋め込みの有無が原因)を、rcParams(pdf.fonttype, ps.fonttype, svg.fonttype 等)を通じて制御します。例えば、pdf.fonttypeを42(TrueType)に設定したり、svg.fonttypeを’none’にすることで、テキストをフォント情報のまま保持してエディタで編集できるようにします。

  • コンテキストベースの設定適用:一時的にプロット設定を変えたい場合に備え、scifontは「コンテキストマネージャ」や「apply/undo」的なAPIでrcParamsをスコープ内だけ変更する運用を想定しています。これにより既存コードを壊さずに出版向け設定を適用できます。

  • 再現性と配布:MANIFEST.inやdistディレクトリが含まれていることから配布(wheelやsdist)を想定した構成になっています。ライブラリ自体は依存も少なめに保たれており、CI上での自動図生成に組み込みやすい軽量さが特徴です。

以上により、scifontは「どの環境でも同じ見た目を得る」「出力後に図のテキストを外部ツールで編集できる」といった要求に対して、実務的でシンプルなソリューションを提供します。特に論文準備や査読対応で図の細かな調整が必要になる場面で有用です。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .DS_Store: file
  • LICENSE: file
  • MANIFEST.in: file
  • README.md: file
  • dist: dir

…他 4 ファイル

(リポジトリは小規模で、配布用メタデータやドキュメントが揃っており、パッケージ化を前提とした構成です。)

まとめ

小さく実用的なライブラリで、論文向け図の再現性と編集性を簡単に確保できる点が魅力です。(約50字)

リポジトリ情報:

READMEの抜粋:

scifont

Professional, Reproducible, and Editable Figures for Scientific Publishing.

scifont is a lightweight Python library designed to solve the two most persistent headaches in scientific visualization with Matplotlib:

  1. Missing Fonts in Docker/Linux: “Arial” or “Times New Roman” are often missing in CI/CD environments or Linux servers, causing plots to fallback to default fonts.
  2. Non-Editable Text: Default Matplotlib settings often export text as paths (shapes), making …