pdfpages on (u)platex

pdfpages on (u)platex

- Akira Kakuto の投稿
返信数: 11
pdfpages 最新版が release されました。dvi モードでは
将来のためドライバ dvips もサポートしたいということで,
dvipdfmx の場合は,

%
% (u)platex + dvipdfmx
%
\documentclass[dvipdfmx]{jsarticle}
\usepackage{pdfpages}
\begin{document}
\includepdf[pages={3,5,7},lastpage=9]{foo.pdf}
\end{document}

のように class option を dvipdfmx にしてくれということです。

%
% (u)platex + dvipdfmx
%
\documentclass{jsarticle}
\usepackage[dvipdfmx]{pdfpages}
\begin{document}
\includepdf[pages={3,5,7},lastpage=9]{foo.pdf}
\end{document}

でも動作しますが,graphics package に関して warning が出ます。

%
% (u)platex
%
\documentclass{jsarticle}
\usepackage{pdfpages}
\begin{document}
\includepdf[pages={3,5,7},lastpage=9]{foo.pdf}
\end{document}

とした場合は,将来のための dvips モードとなります。

lastpage は不要の場合もありますが,指定するようにした
ほうが良いでしょう。(これが pdfTeX の場合とちがって少し不便な点)。
Akira Kakuto への返信

Re: pdfpages on (u)platex

- Akira Kakuto の投稿
ページごとに BoundingBox が違うようなことが無ければ,
あらかじめ .xbb ファイルを作成しておくと,外部プログラム
extractbb を呼ばなくなるので,performance がよくなります。
lastpage については,あべのりさんが現在改善したパッチを
著者に送っておられますので,これが採用され次第,dvipdfmx
でも指定不要になります。これも .xbb があれば extractbb
を呼ばないので performance があがります。
Akira Kakuto への返信

Re: pdfpages on (u)platex

- Akira Kakuto の投稿
あべのりさんのパッチを含むものとなり,(u)platex + dvipdfmx の場合も
lastpage の指定は不要になりました。

使用上の注意:

o ページごとに BoundingBox が異なる PDF を採りこむ場合には,
  .xbb ファイルを作らないこと。
  この場合は,パフォーマンスがかなり落ちます。
  理由は,外部プログラム extractbb を多数回呼ぶため。

o 各ページが同じ BoundingBox を持つことがわかっている場合には
  .xbb ファイルを予め作成しておくと,パフォーマンスが劇的に
  上がります。pdfTeX や XeTeX の場合と同程度と思ってよいでしょう。
  理由は, 外部プログラム extractbb を呼ばないで済むからです。
  pdfTeX や XeTeX の場合にパフォーマンスが良いのは,TeX エンジン
  自身が各ページのサイズを取得できるからです。
Akira Kakuto への返信

Re: pdfpages on (u)platex

- 阿部 紀行 の投稿
> この場合は,パフォーマンスがかなり落ちます。
> 理由は,外部プログラム extractbb を多数回呼ぶため。

BoundingBoxをキャッシュさせてみる,という実験をしてみました.ただ,通常の\includegraphicsの場合は一度しか呼び出されないのが普通だと思うので,あまり意味が無いかもしれません…….一応手元で5ページのpdfを\includepdfしてみた限りでは,6.7秒→2.6秒となりました.
阿部 紀行 への返信

Re: pdfpages on (u)platex

- Akira Kakuto の投稿
どうもありがとうございます。 extractbb 使用の場合も,
殆ど遅さが気にならなくなりました。
Akira Kakuto への返信

Re: pdfpages on (u)platex

- Akira Kakuto の投稿
現在の BoundingBox cache は,pagebox オプションとは両立
しないので,pagebox オプションがある場合は,素通りする
よう,時間があるときお願い致します。
Akira Kakuto への返信

Re: pdfpages on (u)platex

- Akira Kakuto の投稿
pdf@bbox@cache\Gin@page @sep@#1

pdf@bbox@cache\Gin@page\GPT@pagebox @sep@#1
で両立するみたいですが,よいでしょうか?
\expandafter\expandafter\expandafter\xdef\expandafter\csname\@tempa\endcsname{\@gtempa}

\expandafter\expandafter\expandafter\xdef\expandafter\csname\@tempa\endcsname{\@gtempa}%
のように % を付けないと,スペースが入ることがあるようです。
Akira Kakuto への返信

Re: pdfpages on (u)platex

- 阿部 紀行 の投稿
pageboxのことを忘れていました.それで大丈夫かと思います.%の付け忘れもありがとうございます.うっかりしました.
阿部 紀行 への返信

Re: pdfpages on (u)platex

- 阿部 紀行 の投稿
一応patchの形式にしてみました.(ちょっとキャッシュ用マクロ名を変更してあります.)W32TeXのものに対してです.TeX Liveのものにそのまま当てると\GPT@pageboxが定義されていないのでエラーになるようです.
阿部 紀行 への返信

Re: pdfpages on (u)platex

- Akira Kakuto の投稿
ありがとうございます。今更新しておきました。
TeX Live での (u)platex + dvipdfmx, xelatex
における pagebox サポートは,おそらく TL2016
になると思います。
Akira Kakuto への返信

Re: pdfpages on (u)platex

- Dora TeX の投稿
新しい dvipdfmx.def ですが,\@tempx がグローバルに

\let\@tempx\ltx@empty

と定義されており,\includegraphics 実行時にこの定義が保持されていることが仮定されています。
そのため,他のパッケージなどが \@tempx を再定義してしまうと,extractbb 実行時におかしな引数が渡ってしまうことに気づきました。

【例】

\documentclass{article}
\usepackage[dvipdfmx]{graphicx}
\makeatletter
\def\@tempx{"}
\makeatother
\begin{document}
\includegraphics{hoge.pdf}
\end{document}

この例の場合,

\immediate\openin\@inputcheck="|extractbb \@tempx \@tempc -O \Gin@base\Gin@ext"

の部分が

"|extractbb " -O hoge.pdf"

となってしまい,おかしなことになります。

\@tempx を,\GPT@pagebox@option のように,他とぶつかりにくい名称に変更しておくとよいと思います。
Dora TeX への返信

Re: pdfpages on (u)platex

- Akira Kakuto の投稿
> \@tempx を,\GPT@pagebox@option のように,
> 他とぶつかりにくい名称に変更しておくとよいと思います。

ありがとうございます。そのようにします。