前記事に引き続き,\mag
の話です。
追記(2016/09/06):本記事で述べた「開発版 jsclasses」は,正式版としてリリースされ TeX Live 2016 のレポジトリに収録されました。
前記事で述べたように,開発版 jsclasses に搭載されている nomag
または nomag*
オプションによって \mag
を使用しない版面設計を行えば,\mag
に対応しないパッケージを正しく使用することができるようになります。
一方,パッケージの中身に手を入れる,開発元に意見するなどして,パッケージを \mag
に対応させる,という方向性の解決策もあり得ます。最近では,graphicx パッケージの改修によって \mag
使用時にページサイズ設定がおかしくなる事案が発生しました。graphicx パッケージのバージョンアップに伴うdvips.def
や dvipdfmx.def
の修正によって,デフォルトで用紙サイズ設定の special が発行されるようになったのですが,それが \mag
の使用を想定していないがために,jsclasses で 10pt 以外を使用すると用紙サイズ設定がおかしくなるという問題でした。この問題は,現在の最新版 graphicx パッケージでは修正されています。
(u)pLaTeX + preview パッケージ + dvipdfmx での \mag
使用
以前の記事で,図版サイズギリギリにPDFページサイズを切り詰める preview パッケージを紹介しました。
この記事で紹介したように,preview パッケージはそのままでは dvipdfmx に対応していないものの,ZRさん作のドライバファイル prdvipdfmx.def を手に入れれば, (u)pLaTeX + dvipdfmx のワークフローで preview パッケージが使えるようになります。
ただし,preview パッケージ自体は \mag
に対応しているものの,この prdvipdfmx.def は \mag
に対応していないようです。そこで,\mag
を使用している際にも正しく機能するよう修正を試みました。
修正版 prdvipdfmx.def
% % prdvipdfmx.def % %% Avoids duplicate loading. \csname bxpw@prdvipdfmx@loaded\endcsname \def\bxpw@prdvipdfmx@loaded{\endinput} %% If the engine is XeTeX or pdfTeX/LuaTeX then quits. \@tempswatrue \ifx\XeTeXversion\@undefined\else \@tempswafalse \fi \ifx\pdfoutput\@undefined\else \ifnum\pdfoutput>\z@ \@tempswafalse \fi \fi \if@tempswa\else \expandafter\endinput\fi\relax %% If prtightpage.def is already loaded, it's too late. \ifx\pr@bbadjust\@undefined\else \PackageError{preview}% {'dvipdfmx' must be specified earlier}\@ehc \expandafter\endinput\fi\relax %% Sets \pr@graphicstype. \let\pr@graphicstype\m@ne %% Interrupts the process of 'tightpage' option. \let\bxpw@default@ds\default@ds \def\default@ds{% \ifnum\pr@graphicstype=\m@ne \def\bxpw@tightpage{tightpage}% \fi \ifx\CurrentOption\bxpw@tightpage \bxpw@dispatch \else \bxpw@default@ds \fi} %% \bxpw@dispatch % Dispatched when 'tightpage' option is found. \def\bxpw@dispatch{% % \typeout{Preview: (dvipdfmx)}% %% Same as in prtightpage.def \ifx\PreviewBorder\@undefined \newdimen\PreviewBorder \PreviewBorder=0.50001bp \fi \ifx\PreviewBbAdjust\@undefined \def\PreviewBbAdjust{-\PreviewBorder -\PreviewBorder \PreviewBorder \PreviewBorder} \fi %% if active \ifPreview\bxpw@dispatch@active \fi % } \def\bxpw@dispatch@active{% % %% Same as in prtightpage.def \def\pr@nextbb{\edef\next{\next\space\number\dimen@}% \expandafter\xdef\csname pr@bb@% \romannumeral\count@\endcsname{\the\dimen@}% \advance\count@\@ne\ifnum\count@<5 \afterassignment\pr@nextbb\dimen@=\fi}% \global\let\pr@bbadjust\@empty \pr@addto@front\pr@ship@end{\begingroup \let\next\@gobble \count@\@ne\afterassignment\pr@nextbb \dimen@\PreviewBbAdjust \ifx\pr@bbadjust\next \else \global\let\pr@bbadjust\next \typeout{Preview: Tightpage \pr@bbadjust}% \fi\endgroup}% %% post-shipout process for dvipdfmx \g@addto@macro\pr@ship@end{\dimen@\ht\pr@box \ifdim\dimen@<\z@ \dimen@\z@\fi \advance\dimen@\pr@bb@iv \dimen@ii=\dimen@ \voffset=-1truein %% in → truein に変更 \advance\voffset\dimen@ \advance\voffset-\ht\pr@box \dimen@\dp\pr@box \ifdim\dimen@<\z@ \dimen@\z@\fi \advance\dimen@-\pr@bb@ii \advance\dimen@\dimen@ii \paperheight\dimen@ \dimen@\wd\pr@box \ifdim\dimen@<\z@ \dimen@=\z@\fi \advance\dimen@-\pr@bb@i \advance\dimen@\pr@bb@iii \paperwidth\dimen@ \divide\paperwidth\@m\relax %% 追加 \divide\paperheight\@m\relax %% 追加 \multiply\paperwidth\mag\relax %% 追加 \multiply\paperheight\mag\relax %% 追加 \setbox\pr@box\hbox{% \special{papersize=\the\paperwidth,\the\paperheight}% \box\pr@box}% \hoffset=-1truein %% in → truein に変更 \advance\hoffset-\pr@bb@i \let\pr@offset@override\@empty}% % } %% all done \endinput
検証ソース
ZRさんの記事にあるサンプルを,10pt 以外で使用してみます。
% pLaTeX 文書 \documentclass[a4paper,17pt]{jsarticle} \usepackage{plext} \usepackage[active,dvipdfmx,tightpage]{preview} \begin{document} \begin{preview}\begin{minipage}<t>{6zw} 難波津に\\ 咲くやこの花\\ 冬籠り\\ 今を春辺と\\ 咲くやこの花 \end{minipage}\end{preview} \end{document}
オリジナル版 prdvipdfmx.def での出力結果
改変版 prdvipdfmx.def での出力結果
うまく \mag
対応させることができたようです!☃