180 lines
5.0 KiB
TeX
180 lines
5.0 KiB
TeX
%% Copyright (C) 2017 Achim D. Brucker, https://www.brucker.ch
|
|
%%
|
|
%% License:
|
|
%% This program can be redistributed and/or modified under the terms
|
|
%% of the LaTeX Project Public License Distributed from CTAN
|
|
%% archives in directory macros/latex/base/lppl.txt; either
|
|
%% version 1.3c of the License, or (at your opinion) any later version.
|
|
%% OR
|
|
%% The 2-clause BSD-style license.
|
|
%%
|
|
%% SPDX-License-Identifier: LPPL-1.3c+ OR BSD-2-Clause
|
|
\NeedsTeXFormat{LaTeX2e}[1994/06/01]
|
|
\ProvidesPackage{beamerboxeslhframed}
|
|
[2017/05/01 v0.0 Framed boxes for Beamer.]
|
|
|
|
\usepackage{ifthen}
|
|
\newboolean{lh@framed@rounded}
|
|
\setboolean{lh@framed@rounded}{false}
|
|
%\setboolean{lh@framed@rounded}{true}
|
|
|
|
\newlength{\lh@frame@linewidth}
|
|
\setlength{\lh@frame@linewidth}{2pt}
|
|
\newcommand{\setlhframedlinewidth}[1]{\setlength{\lh@frame@linewidth}{#1}}
|
|
|
|
\newlength{\lh@frame@margin}
|
|
\setlength{\lh@frame@margin}{3pt}
|
|
\newcommand{\setlhframedmargin}[1]{\setlength{\lh@frame@margin}{#1}}
|
|
|
|
\newlength{\lh@bmb@width}
|
|
|
|
|
|
|
|
\newcommand\beamerboxesframed[2][]{%
|
|
\global\let\beamer@firstlineitemizeunskip=\relax%
|
|
\vbox\bgroup%
|
|
\setkeys{beamerboxes}{upper=block title,lower=block body,width=\textwidth}%
|
|
\setkeys{beamerboxes}{#1}%
|
|
{%
|
|
\usebeamercolor{\bmb@lower}%
|
|
\globalcolorstrue%
|
|
\colorlet{lower.bg}{bg}%
|
|
}%
|
|
{%
|
|
\usebeamercolor{\bmb@upper}%
|
|
\globalcolorstrue%
|
|
\colorlet{upper.bg}{bg}%
|
|
}%
|
|
%
|
|
% Typeset head
|
|
%
|
|
\lh@bmb@width=\bmb@width%
|
|
\advance\lh@bmb@width-\lh@frame@margin%
|
|
\advance\lh@bmb@width-\lh@frame@margin%
|
|
\vskip4bp
|
|
\setbox\bmb@box=\hbox{#2}%
|
|
\ifdim\wd\bmb@box=0pt%
|
|
\relax%
|
|
\else
|
|
\setbox\bmb@box=\hbox{%
|
|
\hspace{\lh@frame@margin}\begin{minipage}[b]{\lh@bmb@width}%
|
|
\usebeamercolor[fg]{\bmb@upper}%
|
|
{\vskip\lh@frame@margin}#2{\vspace{\lh@frame@margin}}%
|
|
\end{minipage}}%
|
|
\fi%
|
|
\ifdim\wd\bmb@box=0pt%
|
|
\setbox\bmb@box=\hbox{}%
|
|
\ht\bmb@box=0pt%
|
|
\bmb@prevheight=-4.5pt%
|
|
\else%
|
|
\wd\bmb@box=\bmb@width%
|
|
\bmb@temp=\dp\bmb@box%
|
|
\ifdim\bmb@temp<1.5pt%
|
|
\bmb@temp=1.5pt%
|
|
\fi%
|
|
\setbox\bmb@box=\hbox{\raise\bmb@temp\hbox{\box\bmb@box}}%
|
|
\dp\bmb@box=0pt%
|
|
\bmb@prevheight=\ht\bmb@box%
|
|
\fi%
|
|
\bmb@temp=\bmb@width%
|
|
\bmb@dima=\bmb@temp\advance\bmb@dima by2.2bp%
|
|
\bmb@dimb=\bmb@temp\advance\bmb@dimb by4bp%
|
|
\hbox{%
|
|
\begin{pgfpicture}{0bp}{+-\ht\bmb@box}{0bp}{+-\ht\bmb@box}
|
|
\pgfsetlinewidth{\lh@frame@linewidth}
|
|
\ifdim\wd\bmb@box=0pt%
|
|
\color{lower.bg}%
|
|
\else%
|
|
\color{upper.bg}%
|
|
\fi%
|
|
\pgfpathqmoveto{-4bp}{-1bp}
|
|
%% <corner>
|
|
\ifthenelse{\boolean{lh@framed@rounded}}{%
|
|
\pgfpathqcurveto{-4bp}{1.2bp}{-2.2bp}{3bp}{0bp}{3bp}
|
|
}{%
|
|
\pgfpathlineto{\pgfpoint{-4bp}{3bp}}
|
|
}
|
|
%% </corner>
|
|
\pgfpathlineto{\pgfpoint{\bmb@temp}{3bp}}
|
|
%% <corner>
|
|
\ifthenelse{\boolean{lh@framed@rounded}}{%
|
|
\pgfpathcurveto%
|
|
{\pgfpoint{\bmb@dima}{3bp}}%
|
|
{\pgfpoint{\bmb@dimb}{1.2bp}}%
|
|
{\pgfpoint{\bmb@dimb}{-1bp}}%
|
|
}{%
|
|
\pgfpathlineto{\pgfpoint{\bmb@dimb}{3bp}}
|
|
}
|
|
%% </corner>
|
|
\bmb@dima=-\ht\bmb@box%
|
|
\advance\bmb@dima by-2pt%
|
|
\pgfpathlineto{\pgfpoint{\bmb@dimb}{\bmb@dima}}
|
|
\pgfpathlineto{\pgfpoint{-4bp}{\bmb@dima}}
|
|
\pgfpathclose
|
|
\pgfsetstrokecolor{black}\pgfusepath{stroke, fill}
|
|
\end{pgfpicture}%
|
|
\copy\bmb@box%
|
|
}%
|
|
\nointerlineskip%
|
|
\ifdim\wd\bmb@box=0pt
|
|
\else
|
|
\vskip2.4pt%
|
|
\fi%
|
|
\nointerlineskip%
|
|
\setbox\bmb@colorbox=\hbox{{\pgfpicturetrue\pgfsetcolor{lower.bg}}}%
|
|
\setbox\bmb@box=\hbox\bgroup\hspace{\lh@frame@margin}\begin{minipage}[b]{\lh@bmb@width}%
|
|
\usebeamercolor[fg]{\bmb@lower}%
|
|
\colorlet{beamerstructure}{upper.bg}%
|
|
{\smallskip\vskip\lh@frame@margin}%
|
|
\colorlet{structure}{upper.bg}%
|
|
%\color{.}%
|
|
}
|
|
|
|
|
|
\def\endbeamerboxesframed{%
|
|
{\vskip\lh@frame@margin}%
|
|
\end{minipage}\egroup%
|
|
\wd\bmb@box=\bmb@width%
|
|
\bmb@temp=\dp\bmb@box%
|
|
\advance\bmb@temp by\lh@frame@margin%
|
|
\setbox\bmb@box=\hbox{\raise\bmb@temp\hbox{\box\bmb@box}}%
|
|
\dp\bmb@box=0pt%
|
|
\bmb@temp=\wd\bmb@box%
|
|
\bmb@dima=\bmb@temp\advance\bmb@dima by2.2bp%
|
|
\bmb@dimb=\bmb@temp\advance\bmb@dimb by4bp%
|
|
\hbox{%
|
|
\begin{pgfpicture}{0bp}{0bp}{0bp}{0bp}
|
|
\pgfsetlinewidth{\lh@frame@linewidth}
|
|
\unhbox\bmb@colorbox%
|
|
\pgfpathmoveto{\pgfpoint{-4bp}{\ht\bmb@box}}
|
|
\pgfpathlineto{\pgfpoint{-4bp}{1bp}}
|
|
%% <corner>
|
|
\ifthenelse{\boolean{lh@framed@rounded}}{%
|
|
\pgfpathqcurveto{-4bp}{-1.2bp}{-2.2bp}{-3bp}{0bp}{-3bp}
|
|
}{%
|
|
\pgfpathlineto{\pgfpoint{-4bp}{-3bp}}
|
|
}
|
|
%% </corner>
|
|
\pgfpathlineto{\pgfpoint{\the\bmb@temp}{-3bp}}
|
|
%% <corner>
|
|
\ifthenelse{\boolean{lh@framed@rounded}}{%
|
|
\pgfpathcurveto%
|
|
{\pgfpoint{\the\bmb@dima}{-3bp}}%
|
|
{\pgfpoint{\the\bmb@dimb}{-1.2bp}}%
|
|
{\pgfpoint{\the\bmb@dimb}{1bp}}%
|
|
}{%
|
|
\pgfpathlineto{\pgfpoint{\the\bmb@dimb}{-3bp}}
|
|
}
|
|
%% </corner>
|
|
{
|
|
\bmb@dima=\ht\bmb@box%
|
|
\pgfpathlineto{\pgfpoint{\bmb@dimb}{\bmb@dima}}
|
|
\pgfsetstrokecolor{black}\pgfusepath{stroke, fill}
|
|
}
|
|
\end{pgfpicture}%
|
|
\box\bmb@box%
|
|
}%
|
|
\vskip2bp%
|
|
\egroup% of \vbox\bgroup
|
|
}
|