mirror of https://github.com/moparisthebest/xeps
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
155 lines
5.3 KiB
155 lines
5.3 KiB
%% 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'.
|
|
|