From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Mon, 2 Sep 2019 13:46:59 +0900
Subject: Initial commit

---
 macros/latex/contrib/tcolorbox/tcbfitting.code.tex | 397 +++++++++++++++++++++
 1 file changed, 397 insertions(+)
 create mode 100644 macros/latex/contrib/tcolorbox/tcbfitting.code.tex

(limited to 'macros/latex/contrib/tcolorbox/tcbfitting.code.tex')

diff --git a/macros/latex/contrib/tcolorbox/tcbfitting.code.tex b/macros/latex/contrib/tcolorbox/tcbfitting.code.tex
new file mode 100644
index 0000000000..7e32bdec72
--- /dev/null
+++ b/macros/latex/contrib/tcolorbox/tcbfitting.code.tex
@@ -0,0 +1,397 @@
+%% The LaTeX package tcolorbox - version 4.20 (2019/03/02)
+%% tcbfitting.code.tex: Code for fit boxes
+%%
+%% -------------------------------------------------------------------------------------------
+%% Copyright (c) 2006-2019 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot 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 `author-maintained'.
+%%
+%% This work consists of all files listed in README
+%%
+%\makeatletter
+\tcb@set@library@version{4.20}
+
+\newdimen\tcbfitdim
+\newdimen\tcb@lowerfitdim
+\newdimen\tcb@upperfitdim
+\newif\iftcb@continue
+
+\tcbset{%
+  fit/.style={capture=fitbox},%
+  fit to/.style args={#1 and #2}{capture=fitbox,width=#1,height=#2},%
+  fit to height/.style={capture=fitbox,height=#1},%
+  fit basedim/.code={\def\kvtcb@fit@basedim{#1}\tcbfitdim\kvtcb@fit@basedim},%
+  fit skip/.store in=\kvtcb@fit@skip,%
+  fit fontsize macros/.code={%
+    \renewcommand\tiny{\tcb@setfontsize\tiny{0.5}}%
+    \renewcommand\scriptsize{\tcb@setfontsize\scriptsize{0.7}}%
+    \renewcommand\footnotesize{\tcb@setfontsize\footnotesize{0.8}}%
+    \renewcommand\small{\tcb@setfontsize\small{0.9}}%
+    \renewcommand\normalsize{\tcb@setfontsize\normalsize{1}}%
+    \renewcommand\large{\tcb@setfontsize\large{1.2}}%
+    \renewcommand\Large{\tcb@setfontsize\Large{1.44}}%
+    \renewcommand\LARGE{\tcb@setfontsize\LARGE{1.728}}%
+    \renewcommand\huge{\tcb@setfontsize\huge{2.0736}}%
+    \renewcommand\Huge{\tcb@setfontsize\Huge{2.48832}}},%
+  fit height plus/.style={fit,height plus=#1},%
+  fit width plus/.dimstore in=\kvtcb@fit@plus@width,%
+  fit height from/.style args={#1 to #2}{fit,height from={#1} to {#2}},
+  fit width from/.style args={#1 to #2}{fit,width={#1},fit width plus={#2-#1}},
+  fit maxstep/.store in=\kvtcb@fit@maxstep,%
+  fit maxfontdiff/.store in=\kvtcb@fit@maxfontdiff,%
+  fit maxfontdiffgap/.store in=\kvtcb@fit@maxfontdiffgap,%
+  fit maxwidthdiff/.store in=\kvtcb@fit@maxwidthdiff,%
+  fit maxwidthdiffgap/.store in=\kvtcb@fit@maxwidthdiffgap,%
+  fit warning/.is choice,
+  fit warning/on/.code={\let\tcb@fit@warn@begin=\@empty%
+    \let\tcb@fit@warn@end=\@empty},
+  fit warning/off/.code={\def\tcb@fit@warn@begin{\hbadness=10000\relax}%
+    \let\tcb@fit@warn@end=\@empty},
+  fit warning/final/.code={\tcb@cur@hbadness=\hbadness\def\tcb@fit@warn@begin{\hbadness=10000\relax}%
+    \def\tcb@fit@warn@end{\hbadness=\tcb@cur@hbadness\relax\tcb@fit@@box}},
+  fit algorithm/.is choice,
+  fit algorithm/fontsize/.code={\let\tcbox@fitalgorithm=\tcbox@fitalgorithm@fontsize},
+  fit algorithm/fontsize*/.code={\let\tcbox@fitalgorithm=\tcbox@fitalgorithm@fontsize@star},
+  fit algorithm/areasize/.code={\let\tcbox@fitalgorithm=\tcbox@fitalgorithm@areasize},
+  fit algorithm/areasize*/.code={\let\tcbox@fitalgorithm=\tcbox@fitalgorithm@areasize@star},
+  fit algorithm/hybrid/.code={\let\tcbox@fitalgorithm=\tcbox@fitalgorithm@hybrid},
+  fit algorithm/hybrid*/.code={\let\tcbox@fitalgorithm=\tcbox@fitalgorithm@hybrid@star},
+  fit algorithm/squeeze/.code={\let\tcbox@fitalgorithm=\tcbox@fitalgorithm@squeeze},
+  spartan@fit/.style={fit algorithm=squeeze},
+}
+
+\def\tcb@@capture@fitbox{%
+  \let\endtcolorbox=\relax%
+  \Collect@Body\tcbox@inner@fitbox@collected%
+}
+
+\def\tcbfontsize#1{\fontsize{#1\tcbfitdim}{#1\dimexpr\kvtcb@fit@skip\tcbfitdim}\selectfont}
+
+\def\tcb@setfontsize#1#2{\@setfontsize#1{#2\tcbfitdim}{#2\dimexpr\kvtcb@fit@skip\tcbfitdim}}
+
+\long\def\tcbox@inner@fitbox@collected#1{%
+  \tcbox@inner@fitbox{#1}%
+  \tcb@finalize@environment%
+}
+
+\newcount\tcb@cur@hbadness
+
+\def\tcbox@fitalgorithm@fontsize{%
+  \tcb@continuetrue%
+  \loop%
+    \tcbfitdim.5\tcbfitdim%
+    \tcb@fit@@box%
+    \ifnum\count@=\kvtcb@fit@maxstep\relax%
+      \tcb@continuefalse%
+    \else%
+      \ifdim\dimexpr\tcb@fit@@h>\tcb@fit@@target\relax%
+        \ifdim\tcbfitdim<18000sp\relax%
+          \count@\kvtcb@fit@maxstep\relax%
+          \tcb@continuefalse%
+        \fi%
+      \else%
+        \tcb@continuefalse%
+      \fi%
+    \fi%
+  \iftcb@continue \repeat%
+  \ifnum\count@<\kvtcb@fit@maxstep\relax%
+    \tcbdimto\tcb@fit@@gap{\tcb@fit@@target-\tcb@fit@@h}%
+    \tcb@lowerfitdim\tcbfitdim%
+    \tcb@upperfitdim2\tcbfitdim%
+    \tcbfitdim1.5\tcbfitdim%
+    \loop%
+      \tcb@fit@@box%
+      \tcb@continuetrue%
+      \ifnum\count@<\kvtcb@fit@maxstep\relax%
+        \ifdim\dimexpr\tcb@upperfitdim-\tcb@lowerfitdim<\kvtcb@fit@maxfontdiff\relax%
+          \tcb@continuefalse%
+        \else%
+          \ifdim\dimexpr\tcb@upperfitdim-\tcb@lowerfitdim<\kvtcb@fit@maxfontdiffgap\relax%
+            \ifdim\dimexpr\tcb@fit@@gap<\tcb@fit@@line\relax%
+              \tcb@continuefalse%
+            \fi%
+          \fi%
+        \fi%
+      \else%
+        \tcb@continuefalse%
+      \fi%
+      \iftcb@continue%
+        \ifdim\dimexpr\tcb@fit@@h>\tcb@fit@@target\relax%
+          \tcb@upperfitdim\tcbfitdim%
+          \advance\tcbfitdim\tcb@lowerfitdim%
+          \tcbfitdim0.5\tcbfitdim%
+        \else%
+          \tcbdimto\tcb@fit@@gap{\tcb@fit@@target-\tcb@fit@@h}%
+          \tcb@lowerfitdim\tcbfitdim%
+          \advance\tcbfitdim\tcb@upperfitdim%
+          \tcbfitdim0.5\tcbfitdim%
+        \fi%
+      \else%
+        \ifdim\dimexpr\tcb@fit@@h>\tcb@fit@@target\relax%
+          \tcbfitdim\tcb@lowerfitdim%
+          \tcb@fit@@box%
+        \fi%
+      \fi%
+    \iftcb@continue \repeat%
+  \fi%
+}
+
+\def\tcbox@fitalgorithm@fontsize@star{%
+  \tcbox@fitalgorithm@fontsize%
+  \tcb@resize@box{\tcb@upperbox}{\tcb@w@upper}{\tcb@fit@@target}%
+  \tcbdimto\tcb@fit@@h{\ht\tcb@upperbox+\dp\tcb@upperbox}%
+}
+
+\def\tcbox@fitalgorithm@areasize@core{%
+  \pgfmathdivide{\tcb@fit@@h}{\tcb@fit@@target}%
+  \pgfmathsqrt{\pgfmathresult}%
+  \let\tcb@temp=\pgfmathresult%
+  \tcbdimto\tcb@w@upper@temp{\pgfmathresult\dimexpr\tcb@w@upper}%
+  \tcb@fit@@boxsave{\tcb@w@upper@temp}%
+  %
+  \tcbdimto\tcb@fit@@h{\ht\tcb@upperbox+\dp\tcb@upperbox}%
+  \pgfmathdivide{\tcb@fit@@h}{\tcb@fit@@target}%
+  \pgfmathdivide{\pgfmathresult}{\tcb@temp}%
+  \pgfmathsqrt{\pgfmathresult}%
+  \ifdim\dimexpr\pgfmathresult pt<0.98pt\relax
+    \tcbdimto\tcb@w@upper@temp{\pgfmathresult\dimexpr\tcb@w@upper@temp}%
+    \tcb@fit@@boxsave{\tcb@w@upper@temp}%
+  \else\ifdim\dimexpr\pgfmathresult pt>1.02pt\relax
+    \tcbdimto\tcb@w@upper@temp{\pgfmathresult\dimexpr\tcb@w@upper@temp}%
+    \tcb@fit@@boxsave{\tcb@w@upper@temp}%
+  \fi\fi%
+  %
+  \tcbdimto\tcb@fit@@h{\ht\tcb@upperbox+\dp\tcb@upperbox}%
+}
+
+\def\tcbox@fitalgorithm@areasize{%
+  \tcbox@fitalgorithm@areasize@core%
+  \pgfmathdivide{\tcb@w@upper}{\tcb@w@upper@temp}%
+  \tcbdimto\tcb@fit@@h{\pgfmathresult\dimexpr\tcb@fit@@h}%
+  \ifdim\dimexpr\tcb@fit@@h>\tcb@fit@@target\relax%
+    \let\tcb@fit@@h=\tcb@fit@@target%
+  \fi
+  \tcb@resize@box{\tcb@upperbox}{\tcb@w@upper}{\tcb@fit@@h}%
+  %
+  \tcbdimto\tcb@fit@@h{\ht\tcb@upperbox+\dp\tcb@upperbox}%
+}
+
+\def\tcbox@fitalgorithm@areasize@star{%
+  \tcbox@fitalgorithm@areasize@core%
+  \tcb@resize@box{\tcb@upperbox}{\tcb@w@upper}{\tcb@fit@@target}%
+  \tcbdimto\tcb@fit@@h{\ht\tcb@upperbox+\dp\tcb@upperbox}%
+}
+
+\def\tcbox@fitalgorithm@squeeze{%
+  \tcb@resize@box{\tcb@upperbox}{\tcb@w@upper}{\tcb@fit@@target}%
+  \tcbdimto\tcb@fit@@h{\ht\tcb@upperbox+\dp\tcb@upperbox}%
+}
+
+\def\tcbox@fitalgorithm@hybrid@core{%
+  \pgfmathdivide{\tcb@fit@@target}{\tcb@fit@@h}%
+  \pgfmathsqrt{\pgfmathresult}%
+  \tcbfitdim=\pgfmathresult\tcbfitdim%
+  \tcb@fit@@box%
+  %
+  \pgfmathdivide{\tcb@fit@@target}{\tcb@fit@@h}%
+  \pgfmathsqrt{\pgfmathresult}%
+  \ifdim\dimexpr\pgfmathresult pt<0.85pt\relax
+    \tcbfitdim=\pgfmathresult\tcbfitdim%
+    \tcb@fit@@box%
+  \else\ifdim\dimexpr\pgfmathresult pt>1.15pt\relax
+    \tcbfitdim=\pgfmathresult\tcbfitdim%
+    \tcb@fit@@box%
+  \fi\fi%
+}
+
+\def\tcbox@fitalgorithm@hybrid{%
+  \tcbox@fitalgorithm@hybrid@core%
+  \tcbox@fitalgorithm@areasize%
+}
+
+\def\tcbox@fitalgorithm@hybrid@star{%
+  \tcbox@fitalgorithm@hybrid@core%
+  \tcbox@fitalgorithm@areasize@star%
+}
+
+\def\tcb@fit@@box{%
+  \iftcb@hasTitle%
+    \tcbdimto\tcb@w@title{\kvtcb@width-(\kvtcb@left@rule)-(\kvtcb@right@rule)-(\kvtcb@boxsep)*2-(\kvtcb@lefttitle)-(\kvtcb@righttitle)}%
+    \begin{tcb@savebox}{\tcb@titlebox}{\tcb@w@title}\color{tcbcoltitle}\kvtcb@fonttitle\kvtcb@haligntitle\kvtcb@before@title\kvtcb@title\kvtcb@after@title\end{tcb@savebox}%
+    \tcbdimto\tcb@h@titletotal{\ht\tcb@titlebox+\dp\tcb@titlebox+\kvtcb@title@rule+(\kvtcb@boxsep)*2+\kvtcb@toptitle+\kvtcb@bottomtitle}%
+  \else%
+    \let\tcb@h@titletotal=\tcb@zpt%
+  \fi%
+  \tcbdimto\tcb@fit@@line{\kvtcb@fit@skip\tcbfitdim}%
+  \tcbdimto\tcb@w@upper{\kvtcb@width-(\kvtcb@left@rule)-(\kvtcb@right@rule)-(\kvtcb@boxsep)*2-(\kvtcb@leftupper)-(\kvtcb@rightupper)}%
+  \tcb@fit@@boxsave{\tcb@w@upper}%
+  \tcbdimto\tcb@fit@@h{\ht\tcb@upperbox+\dp\tcb@upperbox}%
+  \tcbdimto\tcb@fit@@target{\kvtcb@height@fixed-(\kvtcb@top@rule@stand)-(\kvtcb@bottom@rule@stand)-(\kvtcb@top)-(\kvtcb@bottom)-(\kvtcb@boxsep)*2-\tcb@h@titletotal}%
+}%
+
+\long\def\tcbox@inner@fitbox#1{%
+  \tcbset{breakable@false,sidebyside=false}%
+  \let\tcb@space\tcb@zpt%
+  \let\tcb@val@raisebase=\tcb@zpt%
+  \unless\ifdefined\kvtcb@height@fixed%
+    \tcbset{height=\kvtcb@width}%
+  \fi%
+  \tcb@hasLowerfalse%
+  %
+  \count@\z@%
+  \tcbfitdim\kvtcb@fit@basedim%
+  \tcb@fit@warn@begin%
+  %
+  \def\tcb@fit@@boxsave##1{%
+    \tcbdimto\tcb@innerwidth{\kvtcb@width-\kvtcb@left@rule-\kvtcb@right@rule}%
+    \colorlet{tcbcol@origin}{.}%
+    \tcb@set@color{tcbcolupper}%
+    \begin{tcb@savebox}{\tcb@upperbox}{##1}%
+      \kvtcb@fontupper\fontsize{\tcbfitdim}{\tcb@fit@@line}\selectfont%
+      \kvtcb@halignupper\tcb@insert@before@upper#1\tcb@insert@after@upper%
+    \end{tcb@savebox}%
+    \tcb@reset@color%
+    \advance\count@ 1\relax%
+  }%
+  %
+  \tcb@set@@phantom%
+  \tcb@set@@title%
+  \tcb@fit@@box%
+  %
+  % height fit
+  \ifdim\kvtcb@height@fixed@plus>0pt\relax%
+    \let\tcb@fit@@minheight=\kvtcb@height@fixed%
+    \ifdim\dimexpr\tcb@fit@@h>\tcb@fit@@target\relax%
+      \ifdim\dimexpr\tcb@fit@@h>\dimexpr\tcb@fit@@target+\kvtcb@height@fixed@plus\relax%
+        \tcbdimto\kvtcb@height@fixed{\kvtcb@height@fixed+\kvtcb@height@fixed@plus}%
+        \tcbdimto\tcb@fit@@target{\tcb@fit@@target+\kvtcb@height@fixed@plus}%
+      \else%
+        \tcbdimto\kvtcb@height@fixed{\kvtcb@height@fixed+\tcb@fit@@h-\tcb@fit@@target}%
+        \let\tcb@fit@@target=\tcb@fit@@h%
+      \fi%
+    \fi%
+  \fi%
+  %
+  % width fit
+  \ifdim\kvtcb@fit@plus@width>0pt\relax%
+    \ifnum\count@<\kvtcb@fit@maxstep\relax%
+      \ifdim\dimexpr\tcb@fit@@h>\tcb@fit@@target\relax%
+        \tcb@lowerfitdim\dimexpr\kvtcb@width\relax%
+        \tcb@upperfitdim\dimexpr\kvtcb@width+\kvtcb@fit@plus@width\relax%
+        \tcbdimto\kvtcb@width{\tcb@upperfitdim}%
+        \tcb@fit@@box%
+        \ifdim\dimexpr\tcb@fit@@h>\tcb@fit@@target\relax%
+        \else%
+          \ifnum\count@<\kvtcb@fit@maxstep\relax%
+            \tcbdimto\tcb@fit@@gap{\tcb@fit@@target-\tcb@fit@@h}%
+            \tcbdimto\kvtcb@width{(\tcb@lowerfitdim+\tcb@upperfitdim)/2}%
+            \loop%
+              \tcb@fit@@box%
+              \tcb@continuetrue%
+              \ifnum\count@<\kvtcb@fit@maxstep\relax%
+                \ifdim\dimexpr\tcb@upperfitdim-\tcb@lowerfitdim<\kvtcb@fit@maxwidthdiff\relax%
+                  \tcb@continuefalse%
+                \else%
+                  \ifdim\dimexpr\tcb@upperfitdim-\tcb@lowerfitdim<\kvtcb@fit@maxwidthdiffgap\relax%
+                    \ifdim\dimexpr\tcb@fit@@gap<\tcb@fit@@line\relax%
+                      \tcb@continuefalse%
+                    \fi%
+                  \fi%
+                \fi%
+              \else%
+                \tcb@continuefalse%
+              \fi%
+              \iftcb@continue%
+                \ifdim\dimexpr\tcb@fit@@h>\tcb@fit@@target\relax%
+                  \tcb@lowerfitdim\dimexpr\kvtcb@width\relax%
+                  \tcbdimto\kvtcb@width{(\tcb@lowerfitdim+\tcb@upperfitdim)/2}%
+                \else%
+                  \tcb@upperfitdim\dimexpr\kvtcb@width\relax%
+                  \tcbdimto\tcb@fit@@gap{\tcb@fit@@target-\tcb@fit@@h}%
+                  \tcbdimto\kvtcb@width{(\tcb@lowerfitdim+\tcb@upperfitdim)/2}%
+                \fi%
+              \else%
+                \ifdim\dimexpr\tcb@fit@@h>\tcb@fit@@target\relax%
+                  \tcbdimto\kvtcb@width{\tcb@upperfitdim}%
+                  \tcb@fit@@box%
+                \fi%
+              \fi%
+            \iftcb@continue \repeat%
+          \fi%
+        \fi%
+      \fi%
+    \fi%
+  \fi%
+  %
+  % (font) fit
+  \ifnum\count@<\kvtcb@fit@maxstep\relax%
+    \ifdim\dimexpr\tcb@fit@@h>\tcb@fit@@target\relax%
+    \tcbox@fitalgorithm%
+    \fi%
+  \fi%
+  %
+  \tcb@fit@warn@end%
+  %
+  % last height fit
+  \ifdim\kvtcb@height@fixed@plus>0pt\relax%
+    \ifdim\dimexpr\tcb@fit@@h<\tcb@fit@@target\relax%
+      \tcbdimto\tcb@temp{\kvtcb@height@fixed+\tcb@fit@@h-\tcb@fit@@target}%
+      \ifdim\dimexpr\tcb@temp<\tcb@fit@@minheight\relax%
+      \else%
+        \let\kvtcb@height@fixed=\tcb@temp%
+      \fi%
+    \fi%
+  \fi%
+  %
+  \edef\tcbfitsteps{\the\count@}%
+  \tcb@set@@dimensions%
+  \tcb@draw@color@box%
+}
+
+\newcommand{\tcboxfit}[2][]{%
+  \tcb@ox{capture=fitbox,#1}{#2}%
+}
+
+\long\def\tcb@newtcboxfit#1#2{\expandafter\tcb@newcommand\csname#1\endcsname{\tcboxfit[#2,options@for=#1]}}
+
+\long\def\tcb@newtcboxfit@#1[#2]#3{\expandafter\tcb@newcommand\csname#1\endcsname[#2]{\tcboxfit[#3,options@for=#1]}}
+
+\long\def\tcb@newtcboxfit@@#1[#2][#3]#4{\expandafter\tcb@newcommand\csname#1\endcsname[#2][#3]{\tcboxfit[#4,options@for=#1]}}
+
+\long\def\tcb@new@tcboxfit@#1[#2]{%
+  \@ifnextchar[{\tcb@newtcboxfit@@{#1}[#2]}{\tcb@newtcboxfit@{#1}[#2]}}
+
+\long\def\tcb@new@tcboxfit#1{%
+  \@ifnextchar[{\tcb@new@tcboxfit@{#1}}{\tcb@newtcboxfit{#1}}}
+
+\def\newtcboxfit{%
+  \let\tcb@newcommand\newcommand%
+  \let\tcb@process@newtcolorbox@continue\tcb@new@tcboxfit%
+  \tcb@process@newcommand}
+
+\def\renewtcboxfit{%
+  \let\tcb@newcommand\renewcommand%
+  \let\tcb@process@newtcolorbox@continue\tcb@new@tcboxfit%
+  \tcb@process@newcommand}
+
+\tcbset{%
+  reset@fitting/.style={%
+    fit algorithm=fontsize,%
+    fit basedim=10pt,fit skip=1.2,
+    height plus=0pt,fit width plus=0pt,
+    fit maxstep=20,fit maxfontdiff=0.1pt,fit maxfontdiffgap=1pt,
+    fit maxwidthdiff=1pt,fit maxwidthdiffgap=10pt,
+    fit warning=off
+  },
+  initialize@reset=reset@fitting,
+}
+
-- 
cgit v1.2.3

