diff options
Diffstat (limited to 'macros/latex/contrib/ppt-slides/ppt-slides.sty')
-rw-r--r-- | macros/latex/contrib/ppt-slides/ppt-slides.sty | 226 |
1 files changed, 226 insertions, 0 deletions
diff --git a/macros/latex/contrib/ppt-slides/ppt-slides.sty b/macros/latex/contrib/ppt-slides/ppt-slides.sty new file mode 100644 index 0000000000..6b05d25303 --- /dev/null +++ b/macros/latex/contrib/ppt-slides/ppt-slides.sty @@ -0,0 +1,226 @@ +% (The MIT License) +% +% Copyright (c) 2022 Yegor Bugayenko +% +% Permission is hereby granted, free of charge, to any person obtaining a copy +% of this software and associated documentation files (the 'Software'), to deal +% in the Software without restriction, including without limitation the rights +% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +% copies of the Software, and to permit persons to whom the Software is +% furnished to do so, subject to the following conditions: +% +% The above copyright notice and this permission notice shall be included in all +% copies or substantial portions of the Software. +% +% THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +% SOFTWARE. + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{ppt-slides}[2022/09/11 0.0.1 Slide Decks à la Power Point] + +\RequirePackage{pgfopts} +\makeatletter +\pgfkeys{ + /ppt-slides/.is family, + /ppt-slides, + template/.estore in = \ppt@template, + template/.default = 9x6, + scheme/.estore in = \ppt@scheme, + directory/.estore in = \ppt@directory, + directory/.default = ., + directory +} +\ProcessPgfOptions* +\makeatother + +\makeatletter\ifdefined\ppt@template + \input{\ppt@directory/ppt-templates/ppt-\ppt@template.tex} +\else + \message{^^Jppt: No template is loaded, because 'template' option is not specified} +\fi\makeatother + +\makeatletter\ifdefined\ppt@scheme + \RequirePackage{xcolor} + \input{\ppt@directory/ppt-schemes/ppt-\ppt@scheme.tex} +\else + \message{^^Jppt: No color scheme is loaded, because 'scheme' option is not specified} +\fi\makeatother + +\RequirePackage{pagecolor} +\RequirePackage{varwidth} +\RequirePackage{qrcode} +\RequirePackage{tikz} +\RequirePackage{tikzpagenodes} +\RequirePackage[inline]{enumitem} +\RequirePackage{crumbs} + +\newcommand\pptMiddle[1]{% + \vspace*{\fill}#1\vspace*{\fill}% +} + +\newcommand\pptBanner[2][green]{% + \par + {\setlength{\fboxsep}{6pt}\colorbox{#1}{\color{\thepagecolor}\large #2}} + \par +} + +\newcommand\pptChapter[2][]{% + \crumbection[#1]{#2}% + \pptMiddle{% + {\large\ttfamily Chapter \#\the\value{section}:}% + \newline% + \rotatebox{1}{\pptBanner[blue]{\LARGE#2}}% + }% +} + +\newcommand\pptSection[2][]{% + \subcrumbection[#1]{#2}% + \pptHeader{#2}% +} + +\newcommand\pptHeader[1]{% + \vspace*{-0.75in}\hspace*{-0.5in}% + \rotatebox{1}{\pptBanner[orange]{\Large #1}}\vspace*{0.15in}% + \par% +} + +\newcommand\pptTitle[2]{% + {\pptBanner{\Huge #1}}% + {\pptBanner{\large #2}}% +} + +\newcommand*\pptTOC{} +\newcommand\pptToc[1][]{% + \renewcommand*\pptTOC{}% + \print{% + \def\param{#1}% + \ifx\param\empty\else% + \pptBanner{#1}% + \fi% + \tikz{% + \node (z) {% + \begin{varwidth}{\textwidth}% + \ifx\pptTOC\empty\else% + \begin{itemize}[label={}] + \pptTOC + \end{itemize} + \fi% + \end{varwidth}% + };% + \path [draw=blue,line width=4pt] (z.north west) -- (z.south west);% + }% + }% + \begin{@empty}% + \renewcommand\crumb[2]{% + \ifx\pptTOC\empty\else\click[0]\fi + \gappto\pptTOC{\item ##2} + } + \crumbs + \end{@empty}% + \flush[1]% +} + +\RequirePackage{tabularx} +\newcommand\pptQuote[3]{% + \begin{tabularx}{\columnwidth}{c>{\raggedright\arraybackslash}X}% + \raisebox{\dimexpr-\height+\ht\strutbox}{\pptPic{0.25}{#1}}% + &% + ``#2''% + \def\param{#3}% + \ifx\param\empty\else% + \newline\newline% + \small% + --- #3 + \fi% + \\% + \end{tabularx}% +} + +\newcommand\pptPic[2]{% + {% + \setlength{\fboxsep}{0pt}% + \setlength{\fboxrule}{1pt}% + \fcolorbox{gray}{white}{% + \includegraphics[width=#1\columnwidth]{#2}% + }% + }% +} + +\RequirePackage{ifthen} +\newcommand\pptPin[2][right]{% + \begin{tikzpicture}[remember picture,overlay]% + \ifthenelse{\equal{#1}{left}} + { + \node[anchor=north east] at ($(current page text area.north west) - (24pt, 18pt)$) {% + \begin{minipage}{0.25\textwidth}% + \raggedleft #2 + \end{minipage}% + }; + } + { + \node[anchor=north east] at (current page text area.north east) {% + \begin{minipage}{0.25\textwidth}% + \raggedright #2 + \end{minipage}% + };% + } + \end{tikzpicture}% +} + +\newcommand\pptThought[1]{% + \pptMiddle{% + \tikz{% + \node [inner sep=18pt] (z) {% + \begin{varwidth}{0.8\textwidth} + \Large + #1 + \end{varwidth} + }; + \path [draw=green,line width=8pt] (z.north west) -- (z.south west); + } + } +} + +\newcommand\pptSnippet[2][\small]{% + \begin{samepage}% + #1\verbatiminput{#2}% + \end{samepage}% +} + +\newcommand\pptQR[2][2in]{% + \tikz{% + \node[draw=white]{% + \href{#2}{% + \qrcode[height=#1]{#2}% + }% + }% + } +} + +\RequirePackage{seqsplit} +\RequirePackage{hyperref} +\newcommand\pptPinQR[2][right]{% + \pptPin[#1]{% + \begin{minipage}{1.4in}% + \raggedleft% + \pptQR[1in]{#2}% + \\[3pt] + \ttfamily\fontsize{8pt}{10pt}\selectfont\seqsplit{#2} \href{#2}{$\rightarrow$} + \\ + \end{minipage}% + }% +} + +\newenvironment{pptWideOne} + {\begin{adjustwidth}{-2in}{-1in}} + {\end{adjustwidth}} +\newenvironment{pptWide}[1] + {\begin{pptWideOne}\begin{multicols}{#1}} + {\end{multicols}\end{pptWideOne}} + +\endinput |