Created
August 5, 2014 10:41
-
-
Save zr-tex8r/02186cab79cb50b05132 to your computer and use it in GitHub Desktop.
LaTeX: dvipdfmx で mediabb できるかも知れないやつ
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
% tcxmediabb.sty | |
%% package declaration | |
\NeedsTeXFormat{LaTeX2e} | |
\ProvidesPackage{tcxmediabb}[2014/08/05 v0.1] | |
%% preparations | |
\def\tcqmb@pkgname{tcxmediabb} | |
\def\tcqmb@error{\PackageError\tcqmb@pkgname} | |
\def\tcqmb@warn{\PackageWarningNoLine\tcqmb@pkgname} | |
\newif\iftcqmb@g@ok | |
%----------------------------- environment check | |
\tcqmb@g@oktrue | |
% mediabb must not be loaded yet | |
\@ifpackageloaded{mediabb}{% | |
\tcqmb@error{Package 'mediabb' is already loaded}% | |
{Package loading will be aborted.}% | |
\tcqmb@g@okfalse | |
}{} | |
% driver must be for dvipdfmx | |
\def\tcqmb@tmpa{dvipdfmx.def}% | |
\ifx\Gin@driver\tcqmb@tmpa\else | |
\tcqmb@error{Driver setting is not for dvipdfmx}% | |
{Package loading will be aborted.}% | |
\tcqmb@g@okfalse | |
\fi | |
% mediabb must be present | |
\IfFileExists{mediabb.sty}{}{%else | |
\tcqmb@error{Package 'mediabb' is not installed}% | |
{Package loading will be aborted.}% | |
\tcqmb@g@okfalse | |
} | |
% if something goes wrong, quit now | |
\iftcqmb@g@ok\else | |
\expandafter\endinput\fi\relax | |
%% debug messages | |
\ifx\tcxmediabbdebug\@undefined | |
\let\tcqmb@debug\@gobble | |
\else | |
\def\tcqmb@debug#1{\typeout{>>\tcqmb@pkgname: #1}}% | |
\fi | |
%--------------------------------------- do mediabb | |
%% save original things | |
\let\tcqmb@O@Ginclude@pdf\Ginclude@pdf | |
\let\tcqmb@O@Gread@pdf\Gread@pdf | |
\let\tcqmb@O@Gread@bmp\Gread@bmp | |
%% load the package! | |
\RequirePackage{mediabb}[2004/10/21]% v1.8 or later | |
% save mediabb things | |
\let\tcqmb@M@Gread@pdf\Gread@pdf | |
%--------------------------------------- repair things | |
%% restore originals | |
\@namedef{Gin@rule@.pdf}#1{{pdf}{.xbb}{#1}} | |
\let\Ginclude@pdf\tcqmb@O@Ginclude@pdf | |
\let\Gread@pdf\tcqmb@O@Gread@pdf | |
\let\Gread@bmp\tcqmb@O@Gread@bmp | |
%%<*> \setebbdirectorypath | |
\let\setebbdirectorypath\@gobble | |
\let\Gread@ebb@path\@empty | |
%%<*> 'autoebb' option | |
\define@key{Gin}{autoebb}[]{\Gread@ebb@never} | |
\def\Gread@ebb@never{% | |
\tcqmb@warn{Option 'autoebb' is annihilated}% | |
\global\let\Gread@ebb@never\relax} | |
\let\if@Gread@ebb@always\iffalse | |
\let\if@Gread@ebb@never\iftrue | |
\let\Gread@ebb@always\relax | |
\let\Gread@ebb@true\relax | |
\let\Gread@ebb@false\relax | |
%% \Gread@pdf{<xbb-file-path>} | |
% Inspects the bbox of the image (stored to \Gin@llx etc). | |
\def\Gread@pdf#1{% | |
\global\tcqmb@g@okfalse | |
\if@usebb\else % if mediabb process is enabled | |
\begingroup | |
\tcqmb@debug{\Gin@base\Gin@ext: try shallow parse}% | |
\global\tcqmb@g@oktrue | |
\def\Gread@bmp##1{% this is invoked in failure | |
\global\tcqmb@g@okfalse | |
\gdef\@gtempa{0 0 1 1 }% dummy | |
}% | |
\tcqmb@M@Gread@pdf{\Gin@base\Gin@ext}% arg#1 is pdf file | |
\endgroup | |
\tcqmb@debug{\Gin@base\Gin@ext: | |
\iftcqmb@g@ok ok (\@gtempa)\else ng\fi}% | |
\expandafter\Gread@parse@bb\@gtempa\\% do it again | |
\fi | |
\iftcqmb@g@ok\else | |
\tcqmb@debug{\Gin@base\Gin@ext: try read #1}% | |
\tcqmb@O@Gread@pdf{#1}% | |
% this always tells (right or wrong) bbox | |
\fi | |
\tcqmb@debug{\Gin@base\Gin@ext: bbox=(\@gtempa)}% | |
} | |
%--------------------------------------- all done | |
\endinput | |
%% EOF |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
以下のように、
dvipdfmx
ドライバの graphicx パッケージを読み込んだ後に、mediabb の代わりに tcxmediabb パッケージを読み込む。
(tcxmediabb が内部で mediabb パッケージを読み込むので、mediabb.sty も必要。)
tcxmediabb パッケージを読み込むと、画像のbboxの取得の処理が以下のように変わる。
usebb
オプションが無効(かつbb
無指定)の場合、PDFを自力で読んでbboxを得ようと試みる。usebb
が有効の場合は、常に“通常の”処理を行う。autoebb
オプションの指定は無意味(警告が出る)。