pxgentombow.sty: pdfpages パッケージとトンボ
aminophen opened this issue · 5 comments
aminophen commented
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 が考慮していない気もするが、原因を調査したい。
aminophen commented
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 カーネルのトンボ生成法と相性が悪い」のか?
aminophen commented
Posted to texjporg/platex#58.
aminophen commented
なんとなく,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}}
aminophen commented
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}}