
GitHub ActionsでRe:VIEWの印刷用モノクロPDFと電子版カラーPDFを1原稿からビルドしてみた
Re:VIEWで書いた1つの原稿から、印刷用のモノクロPDFと電子版のカラーPDFをビルドする仕組みを作りました。
Re:VIEW自体にはPDF全体をモノクロ化する機能がありません。そこでビルド後にGhostscriptでグレースケール変換する構成にしています。GitHub Actions上でビルドを完了させたので、その内容をまとめます。
config.ymlだけでモノクロにできるか調べた
最初に、Re:VIEWの設定ファイルだけで印刷用PDFをモノクロにできないか調べました。
Re:VIEWの公式ガイド「LaTeX と review-pdfmaker について」を確認しましたが、カラーやモノクロに関するオプションはありませんでした。
そのため、ビルド後のPDFをGhostscriptでグレースケール変換する方式にしました。
ワークフロー全体
GitHub Actionsのワークフローは次の構成です。
name: Build print and ebook PDFs
on: [push, pull_request, workflow_dispatch]
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
container: vvakame/review:5.9
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Build print and ebook PDFs
run: sh scripts/build.sh
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: pdfs
path: dist/
if-no-files-found: error
アクションはpinactでコミットSHAに固定しています。
スクリプトで紙版と電子版のPDFを生成しています。
生成したPDFはGitHub Actionsのアーティファクトからダウンロードできます。

それぞれ出力されるPDFは以下です。


ビルドスクリプトと設定ファイルの継承
メインのビルドスクリプトはscripts/build.shです。
#!/bin/sh
set -eu
cd "$(dirname "$0")/.."
mkdir -p dist
review-pdfmaker --version
gs --version
(
cd articles
review-pdfmaker config-print.yml
review-pdfmaker config-ebook.yml
)
cp articles/ReVIEW-Template-ebook.pdf dist/ReVIEW-Template-ebook.pdf
sh scripts/grayscale-pdf.sh articles/ReVIEW-Template-print.pdf dist/ReVIEW-Template-print-gray.pdf
config-print.ymlとconfig-ebook.ymlは共通のconfig.ymlを継承しています。差分だけを上書きするファイルです。
# 紙版本文。既存テンプレートのB5紙面を継承する。
inherit: ["config.yml"]
bookname: ReVIEW-Template-print
texdocumentclass: ["review-jsbook", "media=print,paper=b5,serial_pagination=true,openany,fontsize=10pt,baselineskip=15.4pt,line_length=40zw,number_of_lines=35,head_space=30mm,headsep=10mm,headheight=5mm,footskip=10mm"]
両方ともbooknameを上書きしています。生成されるPDFのファイル名は、それぞれReVIEW-Template-print.pdf、ReVIEW-Template-ebook.pdfです。電子版はそのままdist/にコピーし、紙版だけ後続のグレースケール変換を通します。
Ghostscriptでグレースケール変換する
メインの変換スクリプトはscripts/grayscale-pdf.shです。
#!/bin/sh
set -eu
if [ "$#" -ne 2 ] || [ "$1" = "$2" ]; then
echo "Usage: sh scripts/grayscale-pdf.sh INPUT.pdf OUTPUT.pdf (different paths)" >&2
exit 2
fi
test -f "$1"
gs -dBATCH -dNOPAUSE -dSAFER -sDEVICE=pdfwrite \
-sColorConversionStrategy=Gray -sOutputFile="$2" "$1"
-sColorConversionStrategy=Grayで色空間をグレーに変換します。
引数が2個でない場合と、入出力が同じパスの場合はエラーで止まるようにしています。
おわりに
Ghostscriptを挟むことで、紙版(モノクロ)と電子版を1つの原稿から出し分けられるようになりました。グレースケール変換スクリプトは、他のテンプレートでもそのまま流用できそうです。






