schild/kifschild.cls

235 lines
7.1 KiB
OpenEdge ABL
Raw Normal View History

2019-06-09 14:04:32 +02:00
%vim:ft=tex
\ProvidesClass{kifschild}[2019/06/09 Poster auf der KIF]
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions\relax
\LoadClass{scrartcl}
% packages
\usepackage[landscape, left=.0cm, bottom=0.3cm, top=.3cm, right=1.25cm]{geometry}
\usepackage{qrcode}
\usepackage{xcolor}
\definecolor{kifgray}{HTML}{595959}
\usepackage{montserrat}
% \usepackage{raleway}
\usepackage{fontspec}
\setmainfont[Color=kifgray]{[Bungee-Regular.ttf]}
%\setmainfont{Montserrat}
% \setmainfont{Raleway}
\usepackage{background}
\backgroundsetup{scale = 1.0, angle = 0, opacity = 1.0,%
contents = {\includegraphics[width = \paperwidth, height = \paperheight,
keepaspectratio] {background}}}%
2019-06-09 19:41:10 +02:00
\usepackage{ifthen}
2019-06-09 14:04:32 +02:00
% fitbox stuff
\usepackage{environ}% http://ctan.org/pkg/environ
\newdimen\fontdim%
\newdimen\upperfontdim%
\newdimen\lowerfontdim%
\newif\ifmoreiterations%
\fontdim12pt
\newbox\trialbox%
\newbox\linebox%
\global\newcount\maxbad%
\newcount\linebad%
\newcount\currenthbadness%
\makeatletter
\NewEnviron{fitbox}[2]{% \begin{fitbox}{<width>}{<height>} stuff \end{fitbox}
% Store environment body
\def\stuff{%
\BODY%
}%
% prepare badness box
\def\badnessbox{%
\global\maxbad=0\relax%
\currenthbadness=\hbadness% save old \hbadness
\hbadness=10000000\relax% make sure, TeX reports overfull boxes
\message{Starting measureline recursion with width #1^^J}%
\setbox\trialbox=\vbox{%
\hsize#1\relax%
\fontsize{\fontdim}{1.2\fontdim}%
\selectfont%
\stuff\par%
\measurelines% start recursion
}%
% \noindent\usebox\trialbox\par
\hbadness=\currenthbadness% restore old \hbadness
}
% prepare recursion to measure line badness
\def\measurelines{%
\message{Iteration of measurelines^^J}%
\begingroup%
\setbox\linebox=\lastbox% get the last line
\setbox0=\hbox%
to \hsize{\unhcopy\linebox}% put the last line into box0 to provoke badness calculation
\linebad=\the\badness\relax% \badness now reflects the last typeset box, i.e. box0
\message{Badness: \the\badness\space\the\linebad\space with max \the\maxbad\space at Fontsize: \the\fontdim\space^^J}%
\ifnum\linebad>\maxbad% store the maximum badness
\global\maxbad=\linebad% Uncomment this line to ignore overfull hboxes!
\fi%
\ifvoid% end of recursion
\linebox%
\else%
\unskip\unpenalty\measurelines% do the recursion
\ifhmode%
\newline%
\fi%
\noindent\box\linebox% do the output
\fi%
\endgroup%
}%
% Prepare measurement box
\def\buildbox{%
\badnessbox% measure badness
\setbox0\vbox{% measure height
\hbox{%
\fontsize{\fontdim}{1.2\fontdim}%
\selectfont%
\minipage{#1}%
\vbox{%
\stuff\par%
}%
\endminipage%
}%
}%
\message{Measured badness: \the\maxbad\space at Fontsize: \the\fontdim\space^^J}%
\dimen@\ht0
\advance\dimen@\dp0
\message{Measured box height: \the\dimen@\space^^J}%
}%
\def\shrinkheight{%
\loop%
\fontdim.5\fontdim% Reduce font size by half
\buildbox%
\message{Shrinking, new box height: \the\dimen@\space at Fontsize: \the\fontdim\space^^J}%
\ifdim\dimen@>#2 \repeat%
\lowerfontdim\fontdim%
\upperfontdim2\fontdim%
\fontdim1.5\fontdim%
}%
\def\shrinkwidth{%
\loop%
\fontdim.5\fontdim% Reduce font size by half
\buildbox%
\ifnum\maxbad>10000 \repeat%
\lowerfontdim\fontdim%
\upperfontdim2\fontdim%
\fontdim1.5\fontdim%
}%
\def\growheight{%
\loop%
\fontdim2\fontdim% Double font size
\buildbox%
\message{Growing, new box height: \the\dimen@\space at Fontsize: \the\fontdim\space^^J}%
\ifdim\dimen@<#2 \repeat%
\upperfontdim\fontdim%
\lowerfontdim.5\fontdim%
\fontdim.75\fontdim%
}%
\buildbox%
% Compute upper and lower bounds
\ifdim\dimen@>#2
\message{Need to shrink box height: \the\dimen@\space^^J}%
\shrinkheight%
\else
\message{Need to grow box height: \the\dimen@\space to target: #2^^J}%
\growheight%
\fi
\message{Max font: \the\upperfontdim\space^^J}%
\message{Min font: \the\lowerfontdim\space^^J}%
% Potentially further reduce bounds for overfull box
\ifnum\maxbad>10000
\shrinkwidth%
\fi
\message{Max font adjusted: \the\upperfontdim\space^^J}%
\message{Min font adjusted: \the\lowerfontdim\space^^J}%
% Now try to find the optimum height and width
\loop%
\buildbox%
\message{Height: \the\dimen@\space^^J}%
\ifdim\dimen@>#2
\moreiterationstrue%
\upperfontdim\fontdim%
\advance\fontdim\lowerfontdim%
\fontdim.5\fontdim%
\else
\ifnum\maxbad>10000
\moreiterationstrue%
\upperfontdim\fontdim%
\advance\fontdim\lowerfontdim%
\fontdim.5\fontdim%
\else
\advance\dimen@-#2
\ifdim\dimen@<10pt
\lowerfontdim\fontdim%
\advance\fontdim\upperfontdim%
\fontdim.5\fontdim%
\dimen@\upperfontdim%
\advance\dimen@-\lowerfontdim%
\ifdim\dimen@<.2pt
\moreiterationsfalse%
\else
\moreiterationstrue%
\fi
\else
\moreiterationsfalse%
\fi
\fi
\fi
\ifmoreiterations\repeat%
\message{Selected font: \the\fontdim\space^^J}%
\vbox%
to #2{\box0\hbox{}}% Typeset content
}%
\makeatother
\usepackage[hidelinks]{hyperref}
% pagestyle
\pagestyle{empty}
2019-06-09 20:32:35 +02:00
\newcommand{\schild}[5]{
2019-06-09 19:41:10 +02:00
\begin{minipage}[b][\textheight][b]{.25\textwidth}%
\centering
% QR code url is 3rd argument
\ifthenelse{\not{\equal{#3}{}}}{
% qrcode
\qrcode[height=.95\textwidth]{#3}
\begin{fitbox}{.95\textwidth}{1cm}
\url{#3}
\end{fitbox}
}{\hfill}
% pictogram is 4th argument
\ifthenelse{\not{\equal{#4}{}}}{
% pictogram
\includegraphics[width=\textwidth, keepaspectratio]{#4}%
}{\hfill}
\vspace{10px}
\end{minipage}
%
\hspace{.05\textwidth}
%
\begin{minipage}[b][\textheight][c]{.65\textwidth}
\begin{fitbox}{\textwidth}{.5\textheight} % adjust textheight here if too big
\centering
#1
\end{fitbox}
2019-06-09 20:32:35 +02:00
\ifthenelse{\not{\equal{#5}{}}}{\vspace{#5}}{}
2019-06-09 19:41:10 +02:00
\begin{fitbox}{\textwidth}{.22\textheight}
\centering
#2
\end{fitbox}
\end{minipage}
}
2019-06-09 14:04:32 +02:00