その3からの続き。
休日なので、さくっとビルド環境のほうを紹介するに留めよう。
原稿についてはMarkdownかRe:VIEWがベストだけれども、早期であればScrapboxでもはてな記法でもWordでもGoogle Docsでも、任意の方法で受け付けるとしていた。とはいえ、声かけ相手の中心がエンジニアではあったので、自然にGitHubにまとめていくことになった(本当は総務や法務、営業などの方々からも幅広く集めたかったんだけど、outputのメリットがあまりないかもしれない)。
エンジニアははてなのGitHubにプライベートリポジトリを作成できるので、技術書典15のリポジトリを建立。作業フォルダ一式、サンプルRe:VIEWファイルとMarkdownファイル、手元ビルド用のdocker-compose.yml、ビルド手順のREADMEをpushしておいたところ、id:koudenpa さんがGitHub ActionsでCI化してくれた。サイコウ!
ところで、はてなのプライベートリポジトリになったということは、認証上、私物のDebianデスクトップ環境からはアクセスできなくなったということでもある。TeXのトライアンドエラーにはDebianデスクトップのほうが都合がよかったのだが、こればかりは仕方がないので業務環境のmacOSでも制作が全部完結できるようにツールを積み上げていく。
といっても紙面デザイン調整のほうはDebian上でだいたい済ませ、ビルド環境一式もDockerイメージとして実装し終えていたわけなので、あまり困ることはなかった。
ビルドPDFの確認については、Acrobatで半透明化部分などの再現正確性のための表示検証自体は必須。しかしビューアとしてはファイルを裏で更新しても反映されないのがたいへんにストレス。Linuxでは普通にEvinceを使って自動更新させているので、macOSでもHomebrewからEvinceを入れている。AutoRaiseとの相性がイマイチなのが玉に瑕だが、まぁ許容範囲。
あとはPDF差分表示がほしいんだよな。Debianのdiffpdfが最高ラヴなんだけどHomebrewにはない。Acrobatのはダルすぎる。p-typoさんがConfrontaPDFの日本語対応をされていたけど、その後どうなったんだっけか。
TeXいじりコーナー
Re:VIEWでは記事単位で章扱いとしているが、『Software Design』などの雑誌風に章見出しエリアの下地に背景を入れるようにしてみた。前職で『技術季報』の制作をしたときに実装していて、今回もほぼ同じ形で作っている。
まず、紙面+上下左右3mmずつの塗り足しがある背景PDFを用意する。私はIllustratorで作った。オフセット印刷の場合は塗り足し部にまで配置をすることで、フチなしの綺麗な表現ができる。それ以外の印刷の場合は塗り足しができるかどうかは印刷設備によるが、トンボ付きで入稿せよという条件が付いていればだいたい大丈夫だと思う。
今回の場合は章が左右どちらのページからも始まることを許容し、小口・ノドは同じ値にしているので、1つの背景PDFのみで済ませた。異なる値の場合は左右それぞれ用のを用意することになるだろう。
imagesフォルダにPDFを格納しておく。
次に、ページに配置するマクロを作る。ここは自分のTeX力が足りなすぎて、トンボありサイズの紙版と仕上がりサイズの電子版とでうまく共通化することができず、悲惨めなものになってしまった。A5だと違うかも。\includefullpagegraphics
の「中央に合わせる」挙動を本当はやりたかった(ので、次回あればこれはちゃんとやるか……)。
\def\hatena@headspace{\dimexpr\topmargin+1in+\headheight+\headsep} \newlength{\hatena@offsetxodd} \newlength{\hatena@offsetxeven} \newlength{\hatena@offsety} \setlength{\hatena@offsetxodd}{\if@pdftombo-24.5mm\else0.5mm\fi} \setlength{\hatena@offsetxeven}{\if@pdftombo-25mm\else1.2mm\fi} \setlength{\hatena@offsety}{\if@pdftombo-10mm\else-10mm\fi} % 全ページ貼り込み(塗り足し込み)で配置する見出し画像。#1には画像ファイル名 \def\hatena@headimage#1{ \vbox to \textheight{ \vskip-\dimexpr\hatena@headspace + \hatena@offsety\relax% \vbox to \paperheight{\vss \hbox to \textwidth{% \ifodd\c@page \hskip-\dimexpr\oddsidemargin + 1in + \hatena@offsetxodd\relax% \else \hskip-\dimexpr\evensidemargin + 1in + \hatena@offsetxeven\relax% \fi \hbox to \paperwidth{\hss \includegraphics{images/#1}% \hss}% \hss}% \vss}% \vss}% }
このマクロを使う新しいページスタイルを用意する。左右で違うものを使いたいときには、ここでそれぞれ指定すればよい。
%% 章見出しのページスタイル \NewPageStyle{hatenachapter}{ odd_head_format={\hatena@headimage{chapter-background.pdf}},% 章見出し背景画像貼り付け(右) even_head_format={\hatena@headimage{chapter-background.pdf}},% 章見出し背景画像貼り付け(左) ...(ノンブルや柱などの設定)... }
あとはページスタイルをどこで呼び出すかだが、今回は雑に以下のように呼び出した(fontを目的外使用するのがいかにも雑)。
\RenewBlockHeading{chapter}{0}{ font={\thispagestyle{hatenachapter}\sffamily\gtfamily\bfseries\fontsize{21Q}{24H}\selectfont}, ...(ほかいろいろな設定)... }
今回は見出しについてのみの背景としたが、このテクニック自体は普通のページのほうでもできるので、版面周囲に凝ったデザインをInDesign並みに配置するというのも可能ではある。ただし、状況によって細かく制御したいときには、別途用意しておいてpdftkでPDFスタンプ合成するなどしたほうが簡単に済むこともある。
2023/11/6追加
\RenewBlockHeadingにpagestyleオプションありますよー.
— abenori (@abenori) 2023年11月6日
おぉぉ。次回あればRenewBlockHeadingにpagestyleオプション使う!