Folio Writer

ひとりでに再生成される図:
Quarto、Python、R による動的なプロット

原稿の中でいちばん危険な図は、三つ前の改訂で手作業で作った図です。解析が変わっても PNG が変わらなければ、論文は静かに嘘をつきます。解決策:コードを原稿の中に置き、コンパイルのたびにデータからプロットを再生成させること——Quarto が実行し、Folio Writer が取りまとめます。

ひとつのブロックで見るアイデア

Folio Writer の文書のどこにでも、画像を貼り付ける代わりに実行可能なセルを書きます。

```{python}
#| label: fig-eos
#| fig-cap: "Third-order Birch–Murnaghan fit to the P–V data."
import pandas as pd, matplotlib.pyplot as plt
d = pd.read_csv("Research/pv-data.csv")
plt.plot(d.V, d.P, "o"); plt.plot(d.V, fit(d.V))
plt.xlabel("V (ų)"); plt.ylabel("P (GPa)")
```

レンダラー = Quarto でコンパイルするとセルが実行されます:CSV が読み込まれ、当てはめが描かれ、完成した図が PDF に——あるいは Word ファイルや HTML に——収まります。番号とキャプションが付き、他の図と同じく @fig-eos で参照できます。R もまったく同じように動きます。

{python} セルと、その実行結果の図をプレビューでライブ表示。
{python} セルと、その実行結果の図をプレビューでライブ表示。
```{r}
#| label: fig-spectra
#| fig-cap: "Raman spectra by pressure step."
library(ggplot2)
ggplot(read.csv("Research/spectra.csv"),
       aes(shift, intensity, color = factor(P))) + geom_line()
```

データファイルを更新して再コンパイルすれば、すべての図が最新になります。書き出しの手順も、「図 3 はどのスクリプトで作った?」も、古いプロットもありません——原稿そのものがパイプラインなのです。

同じ原稿が R も話します——knitr エンジン、echo: false、番号付きの図。
同じ原稿が R も話します——knitr エンジン、echo: false、番号付きの図。

セットアップ

  1. Quarto をインストールし(quarto.org、または brew install quarto)、無料の Folio Helper も入れます。これで、サンドボックス化された App Store 版アプリからローカルのツールチェーンを実行できます。
  2. Python セル:Jupyter の入った Python が必要です(pip install jupyter matplotlib pandas)。Folio Writer は Quarto を Jupyter 対応のインタプリタへ自動的に向けるので、セルは実際にそれを実行できる Python で実行されます——PATH の先頭にたまたまある python3 ではなく。
  3. R セル:R と、Quarto の標準 R エンジンである knitr と rmarkdown をインストールします。
  4. データと解析スクリプトはプロジェクトの Research フォルダに置いておけば、パイプライン全体が原稿と一緒に移動し(同期され)ます。
プランについて:コードセルの実行は、コンパイルと並んで買い切りの Pro のロック解除に含まれます(7 日間のフル試用付き)。セルを書くことと、実行を伴わない通常の Quarto レンダリングには不要です。
実行のタイミング:ライブプレビューは設計上、即座に表示されるままです——テキストと数式は組版しますが、コードは実行しません。セルが実行されるのはコンパイル時、Quarto が縫い合わされた原稿を描画するときです。図をさっと確認したいときは、作業中のセクションだけをコンパイルしましょう(範囲 ▸ 選択中の書類)。

原稿にとって重要なセルオプション

Quarto のセルオプションは #| のコメント行として添えます。原稿に必要なことは、ほぼ次の五つでまかなえます。

```{python}
#| label: fig-eos          # cite it as @fig-eos
#| fig-cap: "Compression curve with third-order fit."
#| echo: false             # figure in the paper, code not
#| fig-width: 6.5          # inches, match the journal column
#| warning: false          # keep library chatter out of the PDF
...
```

コードを一切出力したくない原稿全体には、セルごとではなく「メタデータ」文書で一度だけ設定します。

execute:
  echo: false
  warning: false
解析が遅い?重いセルに #| cache: true を追加すると、Quarto はセルのコードが変わったときだけ再実行します——文章を編集した後に再コンパイルしても、モデルを当てはめ直すことはありません。
実際のワークフロー:Research 内の .xlsx から読み込んだ P–V データを、Birch–Murnaghan で当てはめ、コンパイル時に注記と番号を付ける。
実際のワークフロー:Research 内の .xlsx から読み込んだ P–V データを、Birch–Murnaghan で当てはめ、コンパイル時に注記と番号を付ける。

セルが実行されないときは

ほとんどの場合、原因は三つのどれかです。レンダラーが違う:コードが実行されるのは、コンパイルシートのレンダラーが Quarto のときだけです——pandoc や Typst では、セルはそのままのコードブロックとして渡されます(意図的な仕様です。これらのパイプラインは何も実行しません)。エンジンがない:コンパイル ▸ 外部ツールを設定… でツールチェーンを確認できます。Python セルにはインタプリタに Jupyter(pip install jupyter)が、R には knitr + rmarkdown が必要です。パスの前提:セルはプロジェクトを作業ディレクトリとして実行されるので、データは別のマシンの絶対パスではなく Research/pv-data.csv として読み込んでください——パスをプロジェクトからの相対パスにしておくことは、共著者にとって原稿を再現可能に保つことでもあります。

必要なときは静的に、大事なときは動的に

実行可能なセルと通常の図は共存できます。写真や手描きの模式図は普通の Markdown 画像のままで、データから導いたプロットがセルになります。Folio Writer の原稿チェックは静的な図も見張っていて、それを描くスクリプトより古い図に印を付けます——どちらの経路の図でも、知らないうちに古くなることはありません。

学術誌品質の出力も

Quarto レンダラーは学術誌フォーマットを支えるものと同じなので、動的な図は出版社のテンプレートでも機能します。学術誌の拡張(AGU、Elsevier、Copernicus…)を追加し、メタデータに quarto-to: を設定すれば、コンパイルされた投稿原稿には生きた解析から生成された図が入ります——プロジェクト内のプレーンファイルから、誰でも、コマンド一つで再現できます。

Folio Writer を無料でダウンロード →  ·  ほかのガイド