%% Copyright (C) 2011-2012 by Martin Scharrer %% ---------------------------------------------------------------------- %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 %% of this license or (at your option) any later version. %% The latest version of this license is in %% http://www.latex-project.org/lppl.txt %% and version 1.3 or later is part of all distributions of LaTeX %% version 2005/12/01 or later. %% %% This work has the LPPL maintenance status `maintained'. %% %% The Current Maintainer of this work is Martin Scharrer. %% %% This work consists of the files adjcalc.dtx, adjustbox.ins %% and the derived file adjcalc.sty. %% It is part of the larger adjustbox bundle. %% \ProvidesPackage{adjcalc}[% 2012/05/16 v1.1 Provides advanced setlength with multiple back-ends (calc, etex, pgfmath)] \RequirePackage{xkeyval} \def\adjcalc@atend{% \begingroup \expandafter\ifx\csname glueexpr\endcsname\relax \endgroup \RequirePackage{calc}% \adjcalc@calc \def\adjcalc@etex{\PackageError{adjcalc}{e-TeX not available for current compiler!}}% \else \endgroup \adjcalc@etex \fi } \def\adjcalc@pgfmath{\AtEndOfPackage{\RequirePackage{pgf}}\def\adjcalc@atend{\adjcalc@pgfmath}} \def\adjcalc@etex{\def\adjcalc@atend{\adjcalc@etex}} \def\adjcalc@calc{\AtEndOfPackage{\RequirePackage{calc}}\def\adjcalc@atend{\adjcalc@calc}} \def\adjcalc@overwrite{\AtEndOfPackage{\adjcalc@overwrite}} \def\adjcalc@defaultunit{bp}% \DeclareOptionX{pgfmath}{\adjcalc@pgfmath} \DeclareOptionX{etex}{\adjcalc@etex} \DeclareOptionX{calc}{\adjcalc@calc} \DeclareOptionX{none}{% \let\adjcalc@atend\relax \let\adjcalc@overwrite\relax \def\adjsetlength{\setlength}% \def\adjaddtolength{\addtolength}% \def\adjsetcounter{\setcounter}% \def\adjaddtocounter{\addtocounter}% } \DeclareOptionX{overwrite}{\adjcalc@overwrite} \DeclareOptionX{defaultunit}[bp]{% \begingroup \def\@tempa{#1}% \def\@tempb{none}% \ifx\@tempa\@tempb% 'none': \endgroup \def\adjsetlengthdefault{\adjsetlength}% \else \ifx\@tempb\adjcalc@defaultunit \endgroup % was 'none' before \let\adjsetlengthdefault\adjsetlengthdefault@ \else \endgroup \fi \fi \def\adjcalc@defaultunit{#1}% } \ProcessOptionsX* \disable@keys{adjcalc}{none} \def\adjcalcset{% \setkeys{adjcalc}% } \def\adjcalc@etex{% \protected\def\adjsetlength##1##2{% ##1=\glueexpr(##2)\relax }% \protected\def\adjaddtolength##1##2{% \advance##1 by \glueexpr(##2)\relax }% \protected\def\adjsetcounter##1##2{% \@ifundefined{c@##1}% {\@nocounterr{##1}}% {\global\csname c@##1\endcsname\numexpr(##2)\relax}% }% \protected\def\adjaddtocounter##1##2{% \@ifundefined{c@##1}% {\@nocounterr{##1}}% {\global\advance\csname c@##1\endcsname\numexpr(##2)\relax}% }% \def\adjsetlengthdefault@##1##2{% \@defaultunits##1=\glueexpr##2 \adjcalc@defaultunit\relax\@nnil }% \let\adjsetlengthdefault\adjsetlengthdefault@ } \newif\if@adjcalc@needsdefault \def\adjcalc@calc{% \DeclareRobustCommand\adjsetlength{\calc@assign@skip}% \DeclareRobustCommand\adjaddtolength[1]{\calc@assign@skip{\advance ##1}}% \DeclareRobustCommand\adjsetcounter[2]{\@ifundefined{c@##1}{\@nocounterr{##1}}{\calc@assign@count{\global\csname c@##1\endcsname}{##2}}}% \DeclareRobustCommand\adjaddtocounter[2]{\@ifundefined{c@##1}{\@nocounterr{##1}}{\calc@assign@count{\global\advance\csname c@##1\endcsname}{##2}}}% \def\adjsetlengthdefault@##1##2{% \begingroup \def\calc@post@scan####1!{% \def\@tempa{####1}% \ifx\@tempa\@empty \endgroup% to end calc processing % is number only \global\@adjcalc@needsdefaulttrue \else \endgroup% to end calc processing % full expression \global\@adjcalc@needsdefaultfalse \fi }% \calc@assign@skip{##1}{##2 \adjcalc@defaultunit}% \endgroup \if@adjcalc@needsdefault ##1=##2 \adjcalc@defaultunit\relax \else \calc@assign@skip{##1}{##2}% \fi }% \def\adjcalc@checkdefault##1\@nnil##2##3{% \ifx\relax##1\relax\else \calc@assign@skip{##2}{##3}% \fi }% \let\adjsetlengthdefault\adjsetlengthdefault@ } \def\adjcalc@pgfmath{% \DeclareRobustCommand\adjsetlength{\pgfmathsetlength}% \DeclareRobustCommand\adjaddtolength{\pgfmathaddtolength}% \DeclareRobustCommand\adjsetcounter{\pgfmathsetcounter}% \DeclareRobustCommand\adjaddtocounter{\pgfmathaddtocounter}% \def\adjsetlengthdefault@##1##2{% \edef\pgfmathresultunitscale{1\adjcalc@defaultunit}% \let\pgfmathpostparse\pgfmathscaleresult \pgfmathparse{##2}% ##1=\pgfmathresult pt\relax }% \let\adjsetlengthdefault\adjsetlengthdefault@ } \def\adjcalc@overwrite{% \let\setlength\adjsetlength \let\addtolength\adjaddtolength \let\setcounter\adjsetcounter \let\addtocounter\adjaddtocounter } \adjcalc@atend \endinput %% %% End of file `adjcalc.sty'.