3rd semester files
This commit is contained in:
211
3rd-Semester-Fall-2022/SEC I/Humanities Project/scalerel.sty
Executable file
211
3rd-Semester-Fall-2022/SEC I/Humanities Project/scalerel.sty
Executable file
@ -0,0 +1,211 @@
|
||||
\ProvidesPackage{scalerel}
|
||||
[2016/12/29 v1.8
|
||||
Routines for constrained scaling and stretching of objects,
|
||||
relative to a reference object or in absolute terms]
|
||||
%
|
||||
% 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.3c 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 Steven B. Segletes.
|
||||
|
||||
% V1.01-Correct typos in documentation
|
||||
% V1.1 -Corrected usepackage dependencies; Significant doc rewrite.
|
||||
% V1.2 -Added \scaleleftright and \stretchleftright; revised docs.
|
||||
% V1.3 -Corrected missing % in stretch routines, added \hstretch and
|
||||
% \vstretch commands; fixed version number in .sty file
|
||||
% V1.4 -Auto-detect mathmode and style; use the proper math display
|
||||
% style; Allow \ignoremathstyle and \discernmathstyle to
|
||||
% revert to former approach in rare cases and return to new
|
||||
% approach.
|
||||
% -Added \Isnextbyte as a supplemental routine
|
||||
% -Added \scaleobj (like \scalebox, but defaults to math mode
|
||||
% using current display style).
|
||||
% V1.5 -Eliminated mathstyle package because of incompatibilites with
|
||||
% many other packages. Implemented \mathchoice approach instead.
|
||||
% V1.6 -Made available \LMex and \LMpt lengths (Local Math ex and
|
||||
% Local Math pt), usable inside \ThisStyle arguments (1ex/pt in
|
||||
% \textstyle and \displaystyle, 0.7ex/pt in \scriptstyle, and
|
||||
% 0.5ex/pt in \scriptscriptstyle).
|
||||
% -Revised/shortened/improved \Isnextbyte.
|
||||
% -Replaced ifthen package calls with etoolbox calls.
|
||||
% V1.7 -Note that the V1.5 implementation with \mathchoice seemed to
|
||||
% have made the use of \ignoremathstyle and \discernmathstyle
|
||||
% vestigial. Thus, \ignoremathstyle was revised to be used
|
||||
% for the purpose of streamlining package efficiency when
|
||||
% only textstyle (or displaystyle with \ignoremathstyle[D])
|
||||
% processing is required.
|
||||
% -Fixed use of dot {.} as null argument in \scaleleftright{}{}{}
|
||||
% and \stretchleftright{}{}{}, which had been causing overflow.
|
||||
% -Made \hstretch and \vstretch routines more efficient, using
|
||||
% optional arguments of \scalebox, instead of \scalerel.
|
||||
% V1.8 -Fixed divide by 0 bugs that would arise when object to be
|
||||
% scaled fell completely below the baseline (zero height).
|
||||
% Required revisions to \scalerelplain, \stretchrelplain,
|
||||
% \scaleto, and \stretchto.
|
||||
% -Fixed aspect-ratio bug, that calculated aspect for stretched object
|
||||
% based only upon portion above baseline
|
||||
|
||||
\usepackage{calc}
|
||||
\usepackage{graphicx}
|
||||
\usepackage{etoolbox}
|
||||
\global\newlength\thesrwidth
|
||||
\global\newlength\thesrheight
|
||||
\global\newlength\srblobheight
|
||||
\global\newlength\srblobdepth
|
||||
\global\newlength\mnxsrwidth
|
||||
\newlength\LMex
|
||||
\newlength\LMpt
|
||||
\def\scriptstyleScaleFactor{.7}
|
||||
\def\scriptscriptstyleScaleFactor{.5}
|
||||
|
||||
\newcommand\scalerel{\@ifstar{\scalerelplain}{\scalerelplus}}
|
||||
|
||||
\newcommand\scalerelplain[3][99in]{\ThisStyle{%
|
||||
\setbox0\hbox{\@obj{#3}}%
|
||||
\setlength\srblobheight{\ht0+\dp0}%
|
||||
\setlength\srblobdepth{\dp0}%
|
||||
\setbox2\hbox{\@obj{#2}}%
|
||||
\setbox0\hbox{\raisebox{\dp2}{\@obj{#2}}}%
|
||||
\setlength\thesrwidth{\wd0*\ratio{\srblobheight}{\ht0}}%
|
||||
\setlength\thesrheight{\ht0*\ratio{\srblobheight}{\ht0}}%
|
||||
\setlength\mnxsrwidth{#1}%
|
||||
\ifdim\thesrwidth>\mnxsrwidth\setlength\thesrwidth{\mnxsrwidth}\fi%
|
||||
\raisebox{-\srblobdepth}{\resizebox{\thesrwidth}{\thesrheight}{\copy0}}%
|
||||
}%
|
||||
}
|
||||
|
||||
\newcommand\scalerelplus[3][99in]{\scalerelplain[#1]{#2}{#3}#3}
|
||||
|
||||
\newcommand\stretchrel{\@ifstar{\stretchrelplain}{\stretchrelplus}}
|
||||
|
||||
\newcommand\stretchrelplain[3][10000]{\ThisStyle{%
|
||||
\setbox0\hbox{\@obj{#3}}%
|
||||
\setlength\srblobheight{\ht0+\dp0}%
|
||||
\setlength\srblobdepth{\dp0}%
|
||||
\setbox2\hbox{\@obj{#2}}%
|
||||
\setbox0\hbox{\raisebox{\dp2}{\@obj{#2}}}%
|
||||
\setlength\thesrwidth{\wd0}%
|
||||
\setlength\thesrheight{\ht0*\ratio{\srblobheight}{\ht0}}%
|
||||
\setlength\mnxsrwidth{\thesrheight*100/#1}%
|
||||
\ifdim\thesrwidth<\mnxsrwidth\setlength\thesrwidth{\mnxsrwidth}\fi%
|
||||
\raisebox{-\srblobdepth}{\resizebox{\thesrwidth}{\thesrheight}{\copy0}}%
|
||||
}%
|
||||
}
|
||||
|
||||
\newcommand\stretchrelplus[3][10000]{\stretchrelplain[#1]{#2}{#3}#3}
|
||||
|
||||
\newcommand\scaleto[3][99in]{\ThisStyle{%
|
||||
\setlength\srblobheight{#3}%
|
||||
\setbox2\hbox{\@obj{#2}}%
|
||||
\setbox0\hbox{\raisebox{\dp2}{\@obj{#2}}}%
|
||||
\setlength\thesrwidth{\wd0*\ratio{\srblobheight}{\ht0}}%
|
||||
\setlength\thesrheight{\ht0*\ratio{\srblobheight}{\ht0}}%
|
||||
\setlength\mnxsrwidth{#1}%
|
||||
\ifdim\thesrwidth>\mnxsrwidth\setlength\thesrwidth{\mnxsrwidth}\fi%
|
||||
\setlength\srblobdepth{\dp2*\ratio{\srblobheight}{\ht0}}%
|
||||
\raisebox{-\srblobdepth}{\resizebox{\thesrwidth}{\thesrheight}{\copy0}}%
|
||||
}%
|
||||
}
|
||||
|
||||
\newcommand\stretchto[3][10000]{\ThisStyle{%
|
||||
\setlength\srblobheight{#3}%
|
||||
\setbox2\hbox{\@obj{#2}}%
|
||||
\setbox0\hbox{\raisebox{\dp2}{\@obj{#2}}}%
|
||||
\setlength\thesrwidth{\wd0}%
|
||||
\setlength\thesrheight{\ht0*\ratio{\srblobheight}{\ht0}}%
|
||||
\setlength\mnxsrwidth{\thesrheight*100/#1}%
|
||||
\ifdim\thesrwidth<\mnxsrwidth\setlength\thesrwidth{\mnxsrwidth}\fi%
|
||||
\setlength\srblobdepth{\dp2*\ratio{\srblobheight}{\ht0}}%
|
||||
\raisebox{-\srblobdepth}{\resizebox{\thesrwidth}{\thesrheight}{\copy0}}%
|
||||
}%
|
||||
}
|
||||
|
||||
\newcommand\scaleleftright[4][99in]{%
|
||||
\ifx.#2#3\else\scalerel[#1]{#2}{#3}\fi%
|
||||
\ifx.#4\else\scalerel*[#1]{#4}{#3}\fi%
|
||||
}
|
||||
\newcommand\stretchleftright[4][10000]{%
|
||||
\ifx.#2#3\else\stretchrel[#1]{#2}{#3}\fi%
|
||||
\ifx.#4\else\stretchrel*[#1]{#4}{#3}\fi%
|
||||
}
|
||||
|
||||
\newcommand\hstretch[2]{%
|
||||
\ThisStyle{\scalebox{#1}[1]{\@obj{#2}}}}
|
||||
|
||||
\newcommand\vstretch[2]{%
|
||||
\ThisStyle{\scalebox{1}[#1]{\@obj{#2}}}}
|
||||
|
||||
\newcommand\scaleobj[2]{%
|
||||
\ThisStyle{\scalebox{#1}{\@obj{#2}}}}
|
||||
|
||||
% DETERMINE IF THE SCALEREL ROUTINE WAS CALLED IN MATH MODE.
|
||||
% IF SO, USE THE PROPER MATH DISPLAY STYLE FOR THE CALL,
|
||||
% *UNLESS* THE FIRST CHARACTER OF THE ARGUMENT IS A $ SIGN,
|
||||
% SIGNIFYING A DESIRED ESCAPE FROM MATH MODE FOR THE ARGUMENT.
|
||||
\newcommand\@obj[1]{%
|
||||
\if T\@mmode%
|
||||
\Isnextbyte[q]{$}{#1}%
|
||||
\if F\theresult%
|
||||
$\SavedStyle#1$%
|
||||
\else%
|
||||
$#1$%
|
||||
\fi%
|
||||
\else%
|
||||
$#1$%
|
||||
\fi%
|
||||
}
|
||||
|
||||
\def\@mstyleD{\displaystyle}
|
||||
\def\@mstyleT{\textstyle}
|
||||
\def\@mstyleS{\scriptstyle}
|
||||
\def\@mstyles{\scriptscriptstyle}
|
||||
%
|
||||
\def\SavedStyle{\csname @mstyle\m@switch\endcsname}
|
||||
%
|
||||
\newcommand\ThisStyle[1]{%
|
||||
\ifmmode%
|
||||
\def\@mmode{T}\mathchoice%
|
||||
{\edef\m@switch{D}\LMex=1ex\relax\LMpt=1pt\relax#1}%
|
||||
{\edef\m@switch{T}\LMex=1ex\relax\LMpt=1pt\relax#1}%
|
||||
{\edef\m@switch{S}\LMex=\scriptstyleScaleFactor ex\relax%
|
||||
\LMpt=\scriptstyleScaleFactor pt\relax#1}%
|
||||
{\edef\m@switch{s}\LMex=\scriptscriptstyleScaleFactor ex\relax%
|
||||
\LMpt=\scriptscriptstyleScaleFactor pt\relax#1}%
|
||||
\else%
|
||||
\def\@mmode{F}%
|
||||
\edef\m@switch{T}\LMex=1ex\relax\LMpt=1pt\relax#1%
|
||||
\fi%
|
||||
}
|
||||
%
|
||||
|
||||
\let\sv@ThisStyle\ThisStyle
|
||||
|
||||
\newcommand\discernmathstyle{\let\ThisStyle\sv@ThisStyle}
|
||||
|
||||
% \ignoremathstyle WOULD BE USED TO SPEED UP DEEPLY NESTED
|
||||
% ROUTINES OF scalerel PACKAGE, WHEN LIMITED TO textstyle MATH
|
||||
\newcommand\ignoremathstyle[1][T]{%
|
||||
\renewcommand\ThisStyle[1]{%
|
||||
\edef\m@switch{#1}\LMex=1ex\relax\LMpt=1pt\relax%
|
||||
\ifmmode\def\@mmode{T}\else\def\@mmode{F}\fi##1}%
|
||||
}
|
||||
|
||||
% THIS CAN REPLACE \isnextbyte IN STRINGSTRINGS PACKAGE
|
||||
% BECAUSE IT WORKS ON CHARS THAT CAN'T BE \edef'ED (\dag, ETC.)
|
||||
\newcommand\Isnextbyte[3][v]{%
|
||||
\def\SR@Letter@A{#2}%
|
||||
\SR@nextbyte{\SR@Letter@B}#3\relax\relax\relax%
|
||||
\ifdefstrequal{\SR@Letter@A}{\SR@Letter@B}%
|
||||
{\edef\theresult{T}}{\edef\theresult{F}}%
|
||||
\if q#1\else\theresult\fi%
|
||||
}
|
||||
\def\SR@nextbyte#1#2#3\relax{\def#1{#2}}
|
||||
|
||||
\endinput
|
Reference in New Issue
Block a user