aminophen/platex-tools

pxgentombow.sty: pdfpages パッケージとトンボ

aminophen opened this issue · 5 comments

pdfpages パッケージの「ページいっぱいに画像を取り込む」という機能が、トンボを付けたときに期待どおりにならない。(これは pxgentombow ではなく jsarticle などの tombow でも同じ。)

\def\target{0red.pdf}

\documentclass[dvipdfmx]{jsarticle}
\pagestyle{empty}
% graphicx が読み込まれて \stockwidth/\stockheight 分を考慮した
% papersize special を吐いてくれる
\usepackage{pdfpages}
% geometry と pdfpages の機能はほとんど互換
%\usepackage[margin=0pt]{geometry}
% トンボがうまくいかない
\usepackage{pxgentombow}

\begin{document}
% TeX の長方形
\noindent
\vrule width\textwidth height\textheight\par
% graphicx の機能でページいっぱいのサイズで取り込む
\noindent
\includegraphics[width=\textwidth,height=\textheight]{\target}\par
% pdfpages の機能で取り込んで独立ページ → トンボが付くと失敗
\includepdf[pages=1,width=\textwidth,height=\textheight]{\target}
\end{document}

\stockwidth/\stockheight を pdfpages が考慮していない気もするが、原因を調査したい。

pxgentombow.sty は pLaTeX/upLaTeX/LuaTeX-ja のカーネルの機能を使っているのでそれら専用…というわけで,そのカーネルのトンボ機能だけを切り出して gentombow.sty を作ってみた。

%#!pdflatex
\documentclass[landscape,a4paper]{article}
\usepackage{pdfpages}
\usepackage{gentombow}
\begin{document}
\includepdf[nup=2x1,pages=-]{input.pdf}
\end{document}

これが見開きにトンボを付けられると便利だが,pdfpages の貼り込み位置がずれているのでまだダメ。

このケースに限れば,どうやら

\AtBeginDocument{%
  \@ifpackageloaded{pdfpages}{%
    \edef\AM@xoffset{1in}\edef\AM@yoffset{-1in}}{}}

を入れれば pdfpages も問題なく使えるっぽい(signature=4 などの場合は内部処理として回転が行われるらしく,これでは問題が起こる)。これは「pdfpages の貼り込み位置の計算方法に問題がある」のか,それとも単に「pLaTeX カーネルのトンボ生成法と相性が悪い」のか?

なんとなく,pdfpages を読んだ後に以下のコードを足せばうまく動いていそうな気がします(jsclasses の \mag != 1000 も可)が,本当に大丈夫かどうかはよくわかっていません。

\patchcmd{\AM@output}{%
  \setlength{\@tempdima}{\AM@xmargin}%
  \edef\AM@xmargin{\the\@tempdima}%
  \setlength{\@tempdima}{\AM@ymargin}%
  \edef\AM@ymargin{\the\@tempdima}%
}{%
  \setlength{\@tempdima}{\AM@xmargin}%
  \edef\AM@xmargin{\the\dimexpr\@tempdima+1in}%
  \setlength{\@tempdima}{\AM@ymargin}%
  \edef\AM@ymargin{\the\dimexpr\@tempdima-1in}%
}{\message{Patch OK}}{\message{Patch NG}}

calc パッケージが自動で読まれていることを考慮すると,以下の方が \dimexpr せずに済んで綺麗ですね。

\patchcmd{\AM@output}{%
  \setlength{\@tempdima}{\AM@xmargin}%
  \edef\AM@xmargin{\the\@tempdima}%
  \setlength{\@tempdima}{\AM@ymargin}%
  \edef\AM@ymargin{\the\@tempdima}%
}{%
  \setlength{\@tempdima}{\AM@xmargin+1in}%
  \edef\AM@xmargin{\the\@tempdima}%
  \setlength{\@tempdima}{\AM@ymargin-1in}%
  \edef\AM@ymargin{\the\@tempdima}%
}{\message{OK}}{\message{NG}}

ac2d3d2 でとりあえず入れてみた。