%# -*- coding: utf-8 -*-
\ifx\epTeXinputencoding\undefined\else % defined in e-pTeX (> TL2016)
  \epTeXinputencoding utf8    % ensure utf-8 encoding for platex
\fi

\documentclass[a4paper]{jsarticle}
\usepackage{doc}
\usepackage{longtable}
\usepackage{pxgentombow}
\usepackage{bounddvi}
\GetFileInfo{pxgentombow.sty}
\title{Package \textsf{pxgentombow} \fileversion}
\author{Hironobu Yamashita}
\date{\filedate}
\begin{document}

\maketitle

日本の出版では、たとえば版面がA4サイズの場合、一回り大きなB4サイズの用紙
の中央にトンボ付きで印刷するということがなされることがあるようです。
このドキュメントは、実際にA4用紙をB4用紙の中央にトンボ付きで
配置している事例です。

\textsf{pxgentombow}パッケージは、クラスファイルなどが想定している用紙
サイズ情報（\verb+\paperwidth+, \verb+\paperheight+）を検知し、それより
一回り大きなサイズの用紙の中央にトンボ付きで出力するために必要な機能を
提供します。ただし、このパッケージはpapersize specialを発行しませんので、
\verb+\special+と\textsf{bounddvi}パッケージを併用するとよいでしょう。

使い方の例は
\begin{verbatim}
  \documentclass[a4j]{jarticle}
  \usepackage{pxgentombow}
  \usepackage{bounddvi}
  \begin{document}
  …本文…
  \end{document}
\end{verbatim}
です。p\LaTeX における横組と縦組の両方で使え、また\textsf{jsclasses}の
ような版面拡大(\verb+\mag+)が使われた場合にも対応しています。
なお、現時点ではp\LaTeX とup\LaTeX のみで動作します。

本パッケージは、\textsf{platex-tools}バンドルの一部として
配布されています：
\begin{verbatim}
  https://github.com/aminophen/platex-tools
\end{verbatim}

\section*{用紙サイズの自動検知による出力サイズ決定}

パッケージにはあらかじめA系列(a0--a10)、B系列(b0--b10), C系列(c0--c10)と
letter, legal, executiveの用紙サイズが定義されています。
ここで、B系列はISOではなくJISです。また、変形版としてa4var（a4の変形）と
b5var（b5の変形）も定義されています。

これらのうちいずれか（ただしa0, b0, c0を除く）の用紙サイズを検知すると、
出力サイズが次の規則で自動的に決定されます\footnote{なお、
C系列とletter, legal, executiveについては日本での慣習が不明の
ため、現時点ではA系列のサイズで出力することにしています。}。
\begin{itemize}
\item 用紙サイズがA系列のとき：
        出力サイズは一回り大きなB系列
\item 用紙サイズがB, C系列またはletter, legal, executiveのとき：
        出力サイズは一回り大きなA系列
\end{itemize}
この場合、パッケージを読みこんだだけでトンボが付きます。
なお、用紙サイズが横長の場合は自動的に出力も横長になり、
縦長の場合は自動的に縦長になります。

よく使われる用紙サイズの例を挙げます。
\begin{longtable}[c]{cc}
  \hline
  用紙サイズ & 出力サイズ \\
  \hline
  a6 & b6 \\
  b6 & a5 \\
  a5 & b5 \\
  b5 & a4 \\
  a4 & b4 \\
  b4 & a3 \\
  a3 & b3 \\
  b3 & a2 \\
  \hline
  c6 & a5 \\
  c5 & a4 \\
  c4 & a3 \\
  c3 & a2 \\
  \hline
  letter    & a3 \\
  legal     & a3 \\
  executive & a4 \\
  \hline
\end{longtable}

\section*{用紙サイズの自動検知に失敗した場合の出力サイズ決定}

仮に用紙サイズが定義済みのいずれとも異なる場合は、デフォルトでは
用紙の天地左右に1インチずつのノビを付けたサイズで出力します。
たとえば、幅$100\,\mathrm{mm}$、高さ$200\,\mathrm{mm}$の用紙の場合、
出力サイズは幅$100\,\mathrm{mm}+2\,\mathrm{in}$、
高さ$200\,\mathrm{mm}+2\,\mathrm{in}$になります。

\section*{オプションによる出力サイズの明示指定}

自動決定されるサイズと異なるサイズに出力したい場合、
パッケージオプションで明示的に指定することができます。たとえば
\begin{verbatim}
  \documentclass[a4j]{jarticle}
  \usepackage[tombow-a3]{pxgentombow}
  \begin{document}
  …本文…
  \end{document}
\end{verbatim}
とすると、出力サイズは（自動決定のb4は無視されて）a3に変わります。
指定可能なサイズは、定義済みの用紙サイズと同じものです。
すなわち、A系列(a0--a10)、B系列(b0--b10), C系列(c0--c10)と
a4var, b5var, letter, legal, executiveです。
なお、ここでも用紙サイズが横長の場合は自動的に出力も横長になり、
縦長の場合は自動的に縦長になります。

オプションの書式は、トンボ形式とサイズをハイフン(-)で結びます。
トンボ形式は、p\LaTeX の標準クラスと同じで
\verb+tombow+, \verb+tombo+, \verb+mentuke+のいずれかを選びます
（\verb+tombow+はジョブ情報を表示し、\verb+tombo+は表示しません。
また、\verb+mentuke+はトンボの線を表示しません）。

\section*{トンボに表示するジョブ情報の有無}

用紙サイズの自動検知によって出力サイズが決まる場合、デフォルトでは
\makeatletter\texttt{\the\@bannertoken}\makeatother
のようにトンボにジョブ情報が出力されます。これを無効化するには
\begin{verbatim}
  \documentclass[a4j]{jarticle}
  \usepackage[notombowdate]{pxgentombow}
  \begin{document}
  …本文…
  \end{document}
\end{verbatim}
とします。

\section*{雑記}

発端はこの話です。
\begin{itemize}
\item 齋藤修三郎 (@psi\_tau) on Twitter, 2017年2月9日\\
  \texttt{https://twitter.com/psi\_tau/status/829873082911248386}
\end{itemize}

また、現在検討中の事項を挙げておきます。
\begin{itemize}
\item 現状では、用紙の横長・縦長がそのまま出力に反映されるので、
  これを逆転させるオプションの実装。また、任意の出力サイズを
  指定できるインタインタフェースの実現。
\item 自動で決定できる出力サイズの拡張。現状では用紙サイズが
  定義値に完全一致する場合のみ自動決定されるが、中間のサイズでも
  その一回り大きなサイズに出力することは可能と思われる。
\item 出版用途ではカラー印刷の場合に、CMYKの版ごとにトンボを作る
  必要がある。\textsf{color}パッケージが読み込まれている場合に、
  オプション次第でCKなど必要に応じた色を選べるようにするとよい
  のではないか\footnote{ただし作者の本業は出版ではないので、
  商用を含む実用には程遠いかもしれない。}。
\item $\verb+\mag+ \ne 1000$の場合について、\textsf{jsclasses}以外での
  動作は未確認。特に、\textsf{geometry}とは共存しない可能性が高い。
\item \verb+\stockwidth+/\verb+\stockheight+が
  \verb+\paperwidth+/\verb+\paperheight+より小さい場合の動作。
  現在は警告を出すだけとしているが、さらに天地左右1inに
  フォールバックしたほうが無難だろうか。
\item p\LaTeX/up\LaTeX 以外のサポート。直近ではLua\TeX-jaは容易なはず。
\end{itemize}

\section*{変更履歴}

\begin{itemize}
  \item 2017/02/10 v0.1 最初の公開版
  \item 2017/03/01 v0.4 トンボ形式の修正など
  \item 2017/05/05 v0.5 \textsf{jsclasses}の$\verb+\mag+ \ne 1000$に対応、
                        最初のCTANリリース版
\end{itemize}

\end{document}
