xcolorとトンボで版面が切れる

xcolorとトンボで版面が切れる

- 本田 知亮 の投稿
返信数: 5
以下のソースを処理します.

これ,以前のgraphics packageの更新で
勝手に発行されることになった
papersizeの\specialの影響で
トンボ付きの版面が切断されます.

xcolorだけでも同じことになるのは
知られているのでしょうか?

\documentclass[a5j,tombow,dvipdfmx]{jarticle}
\usepackage{xcolor}
\begin{document}
A
\end{document}

こちらではTeX Live 2018で処置していますが
例のgraphicsがpagesize specialを出し始めた
以降のものであればたぶん同じ結果になると思います.

しかも対処方法として知られている
nosetpagesizeを\documentclassのオプションに与える
というのは使えません.

原因は,
・実際に\specialが定義されているdvipdfmx.def(dvipsオプションのときはdvips.def)をxcolorが呼ぶこと
・xcolorには(no)setpagesizeのオプションがないこと
(colorには(no)setpagesizeオプションがあるので問題なし)
・graphic(s|x) packageが(x)colorよりも前に呼ばれていなければ,
よろしくないpagesize specialがほぼ無条件に発行されること
ということです.

なお,xcolor単体で使うことは
あんまりないとは思いますが
単体ではなく,その後にgraphic(s|x)を読み込んでも
nosetpagesizeをどこにいれても
NGなので,順番にも注意です(前に入れてあればOK).

対処としては,
(1) xcolorの方でcolorのように(no)setpagesizeの
オプションを入れてくれること
(2) nosetpagesizeが指定された場合の動作をxcolorを呼び出す前に実行しておくこと
(3) xcolorを使わずにcolorを使うこと
といったあたりでしょうか.

(2)は具体的には
\newif\ifGin@setpagesize\Gin@setpagesizefalse
をxcolorの呼び出し前にいれればいいのです.

私としては,xcolorでの対処がいいとは思いますが,
dvips/dvipdfmx.deだけでなく,
pdftex.defとかほかのgraphics-defも同じですが

\ifGin@setpagesize
...
\AtBeginDvi{%
...
\special{}%
...
\fi

じゃなくって

...
\AtBeginDvi{%
...
\ifGin@setpagesize
\special{}%
\fi
...
\fi

の方がまだいいように思いますけど,
何か意図があるんでしょうか.

本田 知亮 への返信

Re: xcolorとトンボで版面が切れる

- 本田 知亮 の投稿
>の方がまだいいように思いますけど,
>何か意図があるんでしょうか.

よくないです・・・
\stockwidth/\stockheight
がうまく使えるようにしてるんですね
本田 知亮 への返信

Re: xcolorとトンボで版面が切れる

- aminophen の投稿
> (1) xcolorの方でcolorのように(no)setpagesizeのオプションを入れてくれること

が一見よいと思いますが,問題は
「xcolor 以外にも \Gin@driver.def を読み込むパッケージはある」
ということです(\Gin@driver は dvipdfmx, dvips, pdftex など)。
xcolor 以外にも pict2e パッケージで同様の問題が起こります。

さて,pict2e を試していて
・\documentclass のオプションに nosetpagesize としても効果なし
・\usepackage[nosetpagesize]{pict2e} とした場合は p2e-\Gin@driver.def もろとも読込まれず
という問題のありそうな挙動が判明しました。原因はまだ詰めていません。
aminophen への返信

Re: xcolorとトンボで版面が切れる

- 本田 知亮 の投稿
遅れました

>xcolor 以外にも pict2e パッケージで同様の問題が起こります

そうですね.texlive/2018/texmf-distフォルダで
Gin@driverでgrepしました.


cfg/defファイルや
styから呼び出されるであろうtexファイルを除いて
nosetpagesizeの有無で
ずれない・ずれるを調べてみました

結果,問題がでるのは三つ,
そのうちよく使うであろうものが二つ,
pict2eとxcolor.
ただ当然ながら
三つともgraphic{s,x}と併用する可能性が
とても高いと思われるので,
結果としては大きな問題には
ならないようには思います.

(ただミニマムなものをbottom upで作っていくと
突然起こってびっくりする・・・)


ファイル名:nosepagesizeあり:なし
NGがずれる・OKがずれないです.

eso-pic NG NG
pict2e NG NG
xcolor NG NG

bxtexlogo OK OK
colorinfo OK OK

trimclip NG OK
crop NG OK
color NG OK
graphics NG OK
graphicx-psmin NG OK
nccpic NG OK \let\tstrut\relaxしないとplatexではコンパイル不可
bmpsize NG OK
epstopdf-base NG OK 事前にgrahic{s,x}要
pdflscape NG OK
pgfplots NG OK
psfrag NG OK
pxtatescale NG OK 事前にgrahic{s,x}要

そのほか,
cd-cover.cls
leaflet.cls
sesamanuel.cls
のクラスファイルも該当しますが,clsなので
無視しています.

参考までに
grepの結果は以下の通りです

./tex/latex/adjustbox/trimclip.sty
./tex/latex/bxtexlogo/bxtexlogo.sty
./tex/latex/cd-cover/cd-cover.cls
./tex/latex/colorinfo/colorinfo.sty
./tex/latex/crop/crop.sty
./tex/latex/eso-pic/eso-pic.sty
./tex/latex/graphics/color.sty
./tex/latex/graphics/graphics.sty
./tex/latex/graphics-cfg/color.cfg
./tex/latex/graphics-cfg/graphics.cfg
./tex/latex/graphicx-psmin/graphicx-psmin.sty
./tex/latex/leaflet/leaflet.cls
./tex/latex/ncctools/nccpic.sty
./tex/latex/oberdiek/bmpsize.sty
./tex/latex/oberdiek/epstopdf-base.sty
./tex/latex/oberdiek/pdflscape.sty
./tex/latex/pdfpages/ppdvipdfmx.def
./tex/latex/pdfpages/pppdftex.def
./tex/latex/pdfpages/ppvtex.def
./tex/latex/pdfpages/ppxetex.def
./tex/latex/pgfplots/pgfplots.sty
./tex/latex/pict2e/pict2e.sty
./tex/latex/psfrag/psfrag.sty
./tex/latex/pxtatescale/pxtatescale.sty
./tex/latex/sesamanuel/sesamanuel.cls
./tex/latex/xcolor/xcolor.sty
./tex/generic/pgf/utilities/pgfutil-latex.def
./tex/generic/pst-graphicx/pst-graphicx.tex
./tex/plain/graphics-pln/color.tex
./tex/plain/graphics-pln/graphicx.tex



本田 知亮 への返信

Re: xcolorとトンボで版面が切れる

- aminophen の投稿
> ・\usepackage[nosetpagesize]{pict2e} とした場合は p2e-\Gin@driver.def もろとも読込まれず

これは pict2e パッケージが「未定義のパッケージオプションが一つでも指定されると,
ドライバオプションを無視して original モードに入る」という挙動のせいですね。
(typo する可能性とか考えると不親切な気も…)
> Unknown options default to mode “original.”
> 83 \DeclareOption*{\ExecuteOptions{original}}

----

さて,仮に何か改善行動を起こすとすれば,
・LaTeX team に「graphics / graphicx / color のいずれかを読んだ時だけ setpagesize 有効」に変更してもらう
・\Gin@driver.def を自ら \input する全パッケージのメンテナに (no)setpagesize オプションを実装してもらう
のどちらが良いのでしょうか。

※ 「全パッケージのメンテナ」の数は,
【\Gin@driver.def がコードに登場するからといって,ファイルを本当に \input するとは限らない】
ことを加味すると,grep していただいた数よりは多分少ないでしょうけど…。
aminophen への返信

Re: xcolorとトンボで版面が切れる

- 本田 知亮 の投稿
>grep していただいた数よりは多分少ないでしょうけど…

取りこぼしをできるだけ避けてますので
実際はそうですよね.

そして,grepにひっかかった全styを単体で
状況に応じてドライバオプションを
dvips|dvipdfmxを切り替えて

\documentclass[a5j.tombow,(,nosetpagesize)]{jarticle}
\usepackage{xxx}
\begin{document}

\end{document}

としたら,結果として
xcolor,pict2e,eso-pic
の三つがまずかったわけです.

主観では

>パッケージのメンテナに (no)setpagesize オプションを実装してもらう

こっちに手を挙げます.

\Gin@driver.defの中に

\@ifundefined{ifGin@setpagesize}
{\expandafter\let\csname ifGin@setpagesize\expandafter\endcsname
\csname iftrue\endcsname}
{}

があるので,LaTeX側(graphics側)としては
画像とか色が関わるとき(ほぼすべてのケースでしょうが)には
setpagesizeをいかしたいんでしょうね,たぶん.