mirror of
https://github.com/moparisthebest/xeps
synced 2024-11-29 20:52:29 -05:00
156 lines
5.3 KiB
TeX
156 lines
5.3 KiB
TeX
%% Copyright (C) 2011-2012 by Martin Scharrer <martin@scharrer-online.de>
|
|
%% ----------------------------------------------------------------------
|
|
%% 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<adjcalc>{pgfmath}{\adjcalc@pgfmath}
|
|
\DeclareOptionX<adjcalc>{etex}{\adjcalc@etex}
|
|
\DeclareOptionX<adjcalc>{calc}{\adjcalc@calc}
|
|
\DeclareOptionX<adjcalc>{none}{%
|
|
\let\adjcalc@atend\relax
|
|
\let\adjcalc@overwrite\relax
|
|
\def\adjsetlength{\setlength}%
|
|
\def\adjaddtolength{\addtolength}%
|
|
\def\adjsetcounter{\setcounter}%
|
|
\def\adjaddtocounter{\addtocounter}%
|
|
}
|
|
\DeclareOptionX<adjcalc>{overwrite}{\adjcalc@overwrite}
|
|
\DeclareOptionX<adjcalc>{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*<adjcalc>
|
|
\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'.
|