はじめに
技術書典7に本を出すためにギリギリでバタバタな印刷申し込みをしたら
印刷所の人に本文フォーマットで5回くらいリテイクくらったのでメモとして残します。
とりあえず分かったところまでなので不備不足はありますが、
今後理解した際においおい更新していきたいと思います。
環境
本文・トンボ作成 : Re:VIEW 3.2.0
ノンブル出力 : node.js + cpdf + 下記記事のスクリプト
https://qiita.com/ukyo/items/4a0f697c332343d77659
本記事は上記記事の補足に近い気がします。
印刷所で印刷してもらうには
印刷所で印刷してもらうには色々と指定のフォーマットに従う必要があります。
というのもコピ本(コピー機で印刷して折ってホチキスで止めて作った本)と違い、
- 印刷する
- サイズに合わせて裁断する ★
- ページ通りに並べる ★
- 表紙を付ける
- 製本する
ぐらいの工程が必要になるためです(本当はもっと工程あると思います)
そのうち★を付けたところを印刷所に教える役割を持つのがトンボとノンブルです。
この辺の指定を間違えていると「こんなんじゃ印刷できねぇ!」とリテイクをくらいます。
私は日光企画様に頼みましたが、印刷所によっても違うことがあるようなので、
事前に確認するか余裕を持った入稿をしましょう。
トンボについて
大抵の印刷機は端っこの方に印刷ができないので、
端まで綺麗に印刷するために大きめの紙に印刷して裁断します。
その裁断する位置を示すのがトンボです。
詳しく知りたい場合は各々ググった方が確実だと思います。
B5サイズの時は、A4で印刷してB5サイズにカットしたり、
上下左右を+3mmぐらい大きめに印刷して裁ち落としたりすることが多いようです。
私はA4印刷のB5カットのトンボにしました。理由はRe:VIEWのデフォルトだったからです。
ノンブルについて
ノンブルは下の方に書いてるページ番号のことです。
技術書では前書きや目次にはローマ数字、本文ページはアラビア数字で書いてあるとカッコいいし、
扉や空白ページには振ってない方が綺麗ですね(個人の意見です)
でも印刷所の人は内容を知らないままページを並べる作業をするので、
全ページに連番で振る、というルールがあったりします。
日光企画様ではそのようなルールでした。振ってないと 電話で怒られます 優しく修正指示が来ます。
この相反する要望を叶える方法はないのでしょうか。いえ、あります。
本には綴じると綴じ側に重なって見えなくなる部分がありますね。
読者に見せる分とは別に、ここに印刷所の人が並べる用の連番のノンブルを印刷して、
綴じた時に隠れるようにすることで両方の要望を満たす冴えたやり方が隠しノンブルです。
正直印刷頼まないと一生知ることはなかった単語だと思います。
実際どうするかについて(トンボ)
トンボはRe:VIEW 3.2.0のデフォルトだと勝手に設定されています。
むしろ途中までセンスのよく分からないオシャレ模様だと思っていました。
細かい指定をどこでやるのかはまだ分かっていませんが、
電子書籍用にトンボを出さない場合はconfig.ymlで指定します。
「texdocumentclass」というパラメータを探して、
media=print でトンボあり
media=ebook でトンボなし(表紙とかも付くようになります)
です。トンボありの場合は
paper=b5 でA4で印刷してB5にカットする用のトンボ設定
paper=a5 でB5で印刷してA5にカットする用のトンボ設定
になっているようです。
今回の設定は下記です。peperをa5からb5にしました。
# LaTeX用のdocumentclassを指定する
# オプションについてはsty/README.mdを参照
# デフォルトは印刷用。電子配布版を作るには media=ebook とする
texdocumentclass: ["review-jsbook", "media=print,paper=b5"]
実際どうするかについて(隠しノンブル)
記事のリンクを再掲します。
https://qiita.com/ukyo/items/4a0f697c332343d77659
やることは3つです。
①記事のスクリプトを使うために、まずはnode.jsを導入します。
node.jsはざっくりいうとjavascriptをブラウザ上ではなくコマンドライン上で動かすためのもの、という認識です。
パラメータやページ数を指定するなど、pdf操作以外の部分をjavascriptで記述するために利用しているようです。
詳しい導入方法は「node.js (OS名) インストール」とかでググってください。
②次にPDFファイルを操作するためにcpdfを導入します。
コマンドラインからpdfを操作できるようになります。
PDFの原稿を1ページごとにバラシて、各ページに指定のページ数を入力し、最後にマージする操作をやっています。
詳しい導入方法は「cpdf (OS名) インストール」とかでググってください。
③環境に合わせたスクリプトを作成します。
まずは記事からコピペして「release.js」というファイルを作成します。
そのあと下記の部分を直していきます。
ページサイズとページ番号を指定するため、下記の部分を編集します。
// 環境に合わせて設定を変更する
// B5は WIDTH = 182; HEIGHT = 257;
const PAGE_START = 3;
const WIDTH = 182;
const HEIGHT = 257;
const MARGIN = 3;
PAGE_STARTは1にしても、3のままでも大丈夫です。印刷所に開始がその番号であることを伝えればよいです。
3なのは表紙とその裏のページを含んだページ数だからだと思います。
WIDTHとHEIGHTはページサイズに合わせますが、トンボを含めたサイズであることに注意してください
Re:VIEWが上記の「media=print,paper=b5」の設定だと「A4で印刷してB5にカットする用のトンボ設定」、つまりA4のサイズ(210×297)となります。
MARGINは大きめに印刷して裁ち落とす用の余白なので、トンボを指定している場合は不要です。0にします。
今回は最終的にこのような設定になりました。
const PAGE_START = 1;
const WIDTH = 210;
const HEIGHT = 297;
const MARGIN = 0;
次にノンブル位置を指定します。編集する箇所は下記です。
計算するにあたっては簡単に図を描くと分かりやすいと思います。
const pos = ["0mm 15mm",
${WIDTH - 1.3}mm 15mm
][i % 2];
記事のスクリプトはトンボなし、最後に3mmの断ち切りをスクリプト内で入れることを想定しているので、
左端から0mm、下から15mmの位置に隠しノンブルを入れています。
「${WIDTH - 1.3}mm 15mm」は右側に入れる用で、文字が1mmちょっとあるので、
右端から1.3mm、下から15mmの位置を指定しています。
今回は用紙サイズがA5ですが、ノンブルを入れるのはトンボの内側、つまりB5サイズに合わせる必要があります。
A4判 210 × 297 mm
B5判 182 × 257 mm
なので、トンボで切られる部分のサイズは
横が(210-182)/2で片側14mm、
縦が(297-257)/2で片側20mmとなります。
なので、位置指定にその分だけ足してやると、下記のようになります。
const pos = ["14mm 35mm",
${WIDTH - 15.3}mm 35mm
][i % 2];
これで隠しノンブル自体の設定は終わりですが、
あともう2か所直すところがあります。PDFのファイル名です。
1つ目は下記の「book.pdf」です。これを元のPDFのファイル名に変更します。
// バラして
execSync("cpdf -split book.pdf -o tmp/%%%.pdf");
2つ目は下記の最後の方の「book-release.pdf」です。これを最終的なファイル名に変更します。
別に変更しなくてもいいのですが「book-release.pdf」というファイル名になってしまいますので。
// 余白を入れる
execSync(cpdf -mediabox "-${MARGIN}mm -${MARGIN}mm ${WIDTH + MARGIN * 2}mm ${HEIGHT + MARGIN * 2}mm" tmp/merged.pdf -o book-release.pdf
);
あと私はWindows上で利用したので、下記も変更しました。
Windowsのmkdirコマンドにはpオプションがないので、「-p」というフォルダが作られ、
2回目以降にエラーを吐いてスクリプトが落ちるのです。
execSync("mkdir -p tmp");
↓
execSync("mkdir tmp");
あとはこのスクリプト「release.js」をPDFと同じディレクトリに置き、
コマンドラインから「node release.js」と叩いて少し待てば、
同じディレクトリに隠しノンブルの入ったPDFが作成されます。
以上で隠しノンブルも設定できました。
まとめ
リテイク食らってもいいように、余裕を持って入稿しましょう。
あとQiita記事を過信しすぎないようにしましょう。
PDF作成した後は全体チェックを忘れずに!