複数ページを一ページにまとめる方法

複数ページを一ページにまとめる方法

- myu myo の投稿
返信数: 22

TeXで出力したpdfファイルを
一ページに二ページ分まとめることが多いのですが
いつもは
acrobatの印刷で
一枚に複数ページを印刷
のオプションを使ってpdfに再変換を行っています。

できればtexから直接、複数ページを一ページにまとめて出力したいのですが
可能でしょうか?
あるいはバッチ処理できるソフトがあれば教えてください。



myu myo への返信

Re: 複数ページを一ページにまとめる方法

- aminophen の投稿
myu myo さんは Windows ユーザでしたっけ?
Unix 系(Cygwin 含む)なら pdfjam という TeX Live に入っているシェルスクリプトがオススメなのですが、
Windows でも pdfpages パッケージを pdfLaTeX で使えば似たようなことができると思います。
(ちなみに pdfpages は最近 pLaTeX や upLaTeX でも使える改修が施されています。)
aminophen への返信

Re: 複数ページを一ページにまとめる方法

- myu myo の投稿
ありがとうございます。
こちらはWindowsユーザーです。

早速試してみたのですが
\documentclass[uplatex]{article}
\usepackage{pdfpages}

\begin{document}

\includepdf[nup=2x1,pages=-]{test.pdf}

\end{document}

とやっても白紙のpdfページが出力されてしまいます。

\documentclass[dvipdfmx]{jsarticle}
\usepackage{pdfpages}
\begin{document}
\includepdf[pages={3,5,7},lastpage=9]{test.pdf}
\end{document}

とやるとpdfファイルすら出力されません。

一体何が原因でしょうか?

祝鳥はuplatexに設定してあります。

よろしくお願いいたします。

 
myu myo への返信

Re: 複数ページを一ページにまとめる方法

- aminophen の投稿
まずはじめに:
pdfpages は結局のところ graphicx に似た「画像とりこみ」パッケージなのでドライバ依存です。
したがって pLaTeX + dvipdfmx でも upLaTeX + dvipdfmx でもドライバオプションが必須です。
\documentclass[dvipdfmx]{jsarticle} % pLaTeX の場合
または
\documentclass[dvipdfmx,uplatex]{jsarticle} % upLaTeX の場合

「白紙の PDF が出る」「PDF が出ない」どちらも絶対になんらかの警告かエラーが出ているはずです。
それを見れば、上のドライバオプションの必要性にはまず気づくはずです。

もうひとつ、ごく最近まで pdfpages は dvipdfmx に非対応でした。
バージョン番号をお確かめください。
pdfpages が少なくともこの時点より古ければ、そもそも使うことができないでしょう。
# 個人的には pdfpages を使うなら dvipdfmx 経由でなく、pdfLaTeX を使うのが快適だと思います。

% pdflatex hoge.tex
\documentclass{article} % dvipdfmx オプションは付けない!
\usepackage{pdfpages}
\begin{document}
(あとは先ほどの例と同様)
\end{document}
aminophen への返信

Re: 複数ページを一ページにまとめる方法

- myu myo の投稿
ありがとうございます。

原因が分かりました。
なぜか祝鳥を使った時にuplatexでdvipdfmxを使えないようになっていました。
原因不明です。

バッチファイルを使うと普通にうまくいきました。

使っていて気になったのですが
元のpdfファイルにアルファチャンネルを含む画像が含まれていた場合
\special{pdf:put @thispage << /Group <</S /Transparency /I true /CS /DeviceRGB >> >>}
を入れていたとしても
pdfpagesでもそれぞれのページに入れないと
色がCMYKになってしまうようです。

となると毎回全ページ数を調べた上で
\special{pdf:put @thispage << /Group <</S /Transparency /I true /CS /DeviceRGB >> >>}
\includepdf[nup=1x2,landscape=true,pages=1-2]{test.pdf}
\special{pdf:put @thispage << /Group <</S /Transparency /I true /CS /DeviceRGB >> >>}
\includepdf[nup=1x2,landscape=true,pages=3-4]{test.pdf}
・・・

とforループで入れていくしかないでしょうか?
\special{pdf:put @thispage << /Group <</S /Transparency /I true /CS /DeviceRGB >> >>}
\includepdf[nup=1x2,landscape=true,pages=-]{test.pdf}
のようにして一括で入れる
ことはできないでしょうか?


myu myo への返信

Re: 複数ページを一ページにまとめる方法

- KUROKI Yusuke の投稿
bophook と \AtBeginPage を調べてみるといいですかね.
KUROKI Yusuke への返信

Re: 複数ページを一ページにまとめる方法

- myu myo の投稿


ありがとうございます。

検索して
http://oku.edu.mie-u.ac.jp/~okumura/texwiki/?dvipdfmx

ここの解説ページを見つけました。

早速bophook.styを

https://www.ctan.org/tex-archive/macros/latex/contrib/bophook

からDLして入手しました。

通常であればstyファイルは
C:\w32tex\share\texmf\tex\latex
に入れれば自動的に読み込めるのですが
なぜかbophook.styの場合には読み込ません。

texファイルと同じフォルダーに入れると読み込めたのですが
下記のエラーが出てpdfファイルが出力されません。

! Undefined control sequence.
\@begindvi ...box \ifHy@pageanchor \@hyperfixhead
\BH@originprint \global \l...
l.13 ...[nup=1x2,landscape=true,pages=-]{test.pdf}

?

texファイルは以下のようにしています。

\documentclass[dvipdfmx,uplatex]{jsarticle}
\usepackage[dvipdfmx]{hyperref}
\usepackage{pdfpages}
\usepackage{bophook}

\begin{document}

\AtBeginPage{
\special{pdf:put @thispage << /Group <</S /Transparency /I true /CS /DeviceRGB >> >>}
}
\includepdf[nup=1x2,landscape=true,pages=-]{test.pdf}


\end{document}

\AtBeginDocument{
も試してみましたが駄目でした。
何が問題でしょうか?


myu myo への返信

Re: 複数ページを一ページにまとめる方法

- aminophen の投稿
> 通常であればstyファイルは
> C:\w32tex\share\texmf\tex\latex
> に入れれば自動的に読み込めるのですが
> なぜかbophook.styの場合には読み込ません。

「mktexlsr」で Wiki を検索してください。
(もちろん TeX ファイルと同じ場所に入れる方法も別の正解です)
aminophen への返信

Re: 複数ページを一ページにまとめる方法

- myu myo の投稿

ありがとうございます。

「mktexlsr」を実行してみました

以下のメッセージが表示されて実行は成功したようなのですが

mktexlsr: Updating C:/w32tex/share/texmf-project/ls-R...
mktexlsr: Updated C:/w32tex/share/texmf-project/ls-R.
mktexlsr: Updating C:/w32tex/share/texmf-context/ls-R...
mktexlsr: Updated C:/w32tex/share/texmf-context/ls-R.
mktexlsr: Updating C:/w32tex/share/texmf-fonts/ls-R...
mktexlsr: Updated C:/w32tex/share/texmf-fonts/ls-R.
mktexlsr: Updating C:/w32tex/share/texmf-local/ls-R...
mktexlsr: Updated C:/w32tex/share/texmf-local/ls-R.
mktexlsr: Updating C:/w32tex/share/texmf-dist/ls-R...
mktexlsr: Updated C:/w32tex/share/texmf-dist/ls-R.
mktexlsr: Done.
続行するには何かキーを押してください . . .

やはりtexファイルと同じフォルダーにbophook.styをいれていないと

うまく読み込めません。

なぜでしょうか?

それとは別に、bophook.styを同じフォルダーに入れていたとしても

上記で説明したエラーが出てpdfファイルを出力することができないのですが

なぜでしょうか?

myu myo への返信

Re: 複数ページを一ページにまとめる方法

- Akira Kakuto の投稿
> C:/w32tex/share/texmf/tex/latex

に入れても,探しませんので

C:/w32tex/share/texmf-local/tex/latex/bophook/

に入れて下さい。
時間があるとき,配布物に追加しておきます。
myu myo への返信

Re: 複数ページを一ページにまとめる方法

- Akira Kakuto の投稿
> それとは別に、bophook.styを同じフォルダーに入れていたとしても
> 上記で説明したエラーが出てpdfファイルを出力することができないのですが
> なぜでしょうか?

不要な hyperref を読み込んでいるからだと思われます:
以下の場合,こちらでは成功しました。

\documentclass[dvipdfmx,uplatex]{jsarticle}
\usepackage{pdfpages}
\usepackage{bophook}
\AtBeginPage{
\special{pdf:put @thispage << /Group <</S /Transparency /I true /CS /DeviceRGB >> >>}
}
\begin{document}

\includepdf[nup=1x2,landscape=true,pages=-]{test.pdf}

\end{document}
Akira Kakuto への返信

Re: 複数ページを一ページにまとめる方法

- myu myo の投稿

お二方ありがとうございます。

うまくいきました。

かなり苦戦させられました。

ところで別の質問なのですが

どうもuplatexを使った時にバッチファイルだと

パスに全角文字を含む画像を取り込むことができるのですが

祝鳥だとうまくいかないようです。

恐らく

set COMMAND_LINE_ENCODING=utf8&

が入っていないためだと思います。

祝鳥でも全角文字のパスを扱えるようにするにはどうしたら良いですか?

myu myo への返信

Re: 複数ページを一ページにまとめる方法

- 阿部 紀行 の投稿
いずれかの方法を試してみてください.

(1) 祝鳥の,コンパイル時に環境変数を設定する機能を使う.メインメニュー→プログラム設定→環境にあります.
http://www.math.sci.hokudai.ac.jp/~abenori/soft/chm/fortex/compile/env.html
もご覧ください.

(2) Kpathsea の変数として設定する.
https://oku.edu.mie-u.ac.jp/~okumura/texwiki/?texmf.cnf%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB
をご覧ください.

(3) システムの環境変数としてCOMMAND_LINE_ENCODINGの値を設定する.
阿部 紀行 への返信

Re: 複数ページを一ページにまとめる方法

- Akira Kakuto の投稿
念のため,阿部 紀行さんの投稿に補足します。

まだ platex も使うことがある場合は,
(1) 祝鳥の,コンパイル時に環境変数を設定する機能を使う.

がお勧めです。

uplatex しか使わない場合は,配布状態の設定を打ち消すため
(2) Kpathsea の変数として設定する
を使う方法を説明します。

c:/w32tex/share/texmf-local/web2c/texmf.cnf
という名前のファイルを作って下さい。
そのファイルに次の 3 行を書いて,保存して下さい:

command_line_encoding = utf8
command_line_encoding.dvipdfmx = utf8
command_line_encoding.dvips = utf8


もちろん (3) の方法でシステムの環境変数を
COMMAND_LINE_ENCODING=utf8
に設定しても OK です。
Akira Kakuto への返信

Re: 複数ページを一ページにまとめる方法

- myu myo の投稿

ありがとうございます。

1番の方法でうまくいきました。

参考までにお聞きしたいのですが

3番の

システムの環境変数というのはどこで設定できるものなのでしょうか?

ここの操作方法を教えていただけないでしょうか?

myu myo への返信

Re: 複数ページを一ページにまとめる方法

- KUROKI Yusuke の投稿
Windows システムの環境変数
くらいのキーワードでWeb検索して調べるといいです.
KUROKI Yusuke への返信

Re: 複数ページを一ページにまとめる方法

- myu myo の投稿

 


ありがとうございます。

納得いきました。

連続質問してしまい、申し訳ありませんが
下記の二つに関しても教えていただけないでしょうか?


・いままで使ってきたstyファイルは
C:\w32tex\share\texmf\tex\latex
のフォルダーに入れることで使うことができました。
しかしbophook.styだけは例外で上記フォルダーでは認識されず
C:\w32tex\share\texmf-local\tex\latex
に入れると認識されました。
なぜbophook.styだけ例外なのでしょうか?
そしてどちらのフォルダーに入れれば良いかはどこを確認すれば分かることなのでしょうか?


・それと
pdfpages、bophookを同時に使う方法は分かったのですが
普通のtexファイルからpdfファイルへの変換でも
bophookを使いたいと考えています。

以下のようにプリアンブルを書いてみたのですが
エラーが出てしまいます。

恐らく、上記の問題と同様にdvipdfmxが被っているからだと思います。
しかしdvipdfmxを消してしまうと画像を取り込むことができなくなってしまいます。
どうすれば良いでしょうか?

\documentclass[uplatex]{jsarticle}
\usepackage[dvipdfmx]{graphicx}
\usepackage{geometry}
\usepackage[dvipdfmx,usenames]{color}
\usepackage{boxedminipage}
\usepackage{lastpage}
\usepackage[dvipdfmx]{hyperref}
\usepackage{ascmac}
\usepackage{pxjahyper}
\usepackage[space]{grffile}
\grffilesetup{
encoding,
inputencoding=utf8,
filenameencoding=utf8,
}

\usepackage{bophook}


\AtBeginPage{
\special{pdf:put @thispage << /Group <</S /Transparency /I true /CS /DeviceRGB >> >>}
}

\hypersetup{pdfstartview={XYZ null null 1.00}}
\geometry{left=20mm,right=20mm,top=6mm,bottom=18mm}

\makeatletter
\def\ps@plain{\let\@mkboth\@gobbletwo
\def\@oddfoot{\hfill ---\ \footnotesize{\thepage/\pageref{LastPage}}\ --- \hfill}
\def\@evenfoot{}\let\@evenfoot\@oddfoot}
\makeatother

myu myo への返信

Re: 複数ページを一ページにまとめる方法

- Akira Kakuto の投稿
> ・いままで使ってきたstyファイルは
> C:\w32tex\share\texmf\tex\latex
> のフォルダーに入れることで使うことができました。

理由: そのフォルダに入れたものは,実は他の,アクセス
      されるフォルダにも入っていたのです。
myu myo への返信

Re: 複数ページを一ページにまとめる方法

- Akira Kakuto の投稿
> ・それと

hyperref を最後に読んだらどうですか? 何だか知りませんが
以下はこちらでは通ります:


\documentclass[uplatex]{jsarticle}
\usepackage[dvipdfmx]{graphicx}
\usepackage{geometry}
\usepackage[dvipdfmx,usenames]{color}
\usepackage{boxedminipage}
\usepackage{lastpage}
\usepackage{ascmac}
\usepackage[space]{grffile}
\grffilesetup{
encoding,
inputencoding=utf8,
filenameencoding=utf8,
}
\usepackage{bophook}
%
%
\usepackage[dvipdfmx]{hyperref}
\usepackage{pxjahyper}
%
%
\AtBeginPage{
\special{pdf:put @thispage << /Group <</S /Transparency /I true /CS /DeviceRGB >> >>}
}

\hypersetup{pdfstartview={XYZ null null 1.00}}
\geometry{left=20mm,right=20mm,top=6mm,bottom=18mm}

\makeatletter
\def\ps@plain{\let\@mkboth\@gobbletwo
\def\@oddfoot{\hfill ---\ \footnotesize{\thepage/\pageref{LastPage}}\ --- \hfill}
\def\@evenfoot{}\let\@evenfoot\@oddfoot}
\makeatother
\begin{document}
This is a test.
\end{document}
Akira Kakuto への返信

Re: 複数ページを一ページにまとめる方法

- myu myo の投稿

 

ありがとうございます。

コンパイルの方はうまくいきました。

ディレクトリーの方に関してなのですが
例えば、pxjahyperですが
share/texmfに入れたつもりなのですが
検索するとなぜか
share/texmf-dist
にも入っていることがわかりました。

share/texmf-distに入っているファイルを削除すると
コンパイルに失敗しました。
これってどこかの段階で自動で
share/texmf-dist
にコピーする機能があるのでしょうか?

あと、以前から気になっていたのですが
TeXのフォルダーにはたくさん同じような名称のフォルダーが入っていますが
どのように使い分ければ良いですか?

http://vinelinux.org/docs/vine6/tex-guide/texmf.html

検索すると
・TeX 関連パッケージによる影響の有無
・updmap/texconfig による影響の有無

がそれぞれ異なるということは分かったのですが
いまいち使い分け方が分かりません。

もっとも最初に読み込まれるshare/texmf-configに入れておいた方が良いということはないのでしょうか?


myu myo への返信

Re: 複数ページを一ページにまとめる方法

- aminophen の投稿
> share/texmf-distに入っているファイルを削除すると
> コンパイルに失敗しました。
> これってどこかの段階で自動で
> share/texmf-dist
> にコピーする機能があるのでしょうか?

ないです。
texmf-dist は、TeX のディストリビューター(配布者)が標準で入れておきたいと考えたパッケージの置き場です。
myu myo さんがお使いの W32TeX の場合は Akira Kakuto さんが配布者ですので、Akira Kakuto さんが入れてくださっているパッケージは予め入っているのです。
ちょっと前には少数しか入っていない時代もありましたが、W32TeX も少しずつパッケージの標準収録数が増大し、前はなかったものがだんだん入ってきているのです。
pxjahyper もその中の一つでしょう。

texmf-dist は配布者以外が弄らないのが好ましいです。
ユーザの方は基本的に texmf-local をお使いください。

TeX Wiki の「TeX のディレクトリ構成」というページも参照してください。
myu myo への返信

Re: 複数ページを一ページにまとめる方法

- aminophen の投稿
> TeX Wiki の「TeX のディレクトリ構成」というページも参照してください。
というのと、もう一点ご参考までに:

TeX が実際にどこにあるファイルを読んだかは、ログファイルを見れば分かるようになっています。
読まれたファイルのバージョン番号などの情報は、TeX ソース冒頭に \listfiles という命令を入れてタイプセットすると、それらが読まれた順序も含めて詳細にログファイルに見えるようになります。