160 lines
5.8 KiB
TeX
160 lines
5.8 KiB
TeX
\NeedsTeXFormat{LaTeX2e}
|
|
\ProvidesPackage{awesomebox}[2019/07/27 v0.6]
|
|
|
|
% Awesome Box has been written by Étienne Deparis and is released under
|
|
% the WTFPL (http://www.wtfpl.net/txt/copying/).
|
|
% A copy of this license is distributed in this package.
|
|
%
|
|
% Contributors:
|
|
% v0.2: Vincent Goulet https://github.com/vigou3
|
|
% v0.3: Gilbert Fuerer https://github.com/foreachthing
|
|
% * Remove xelatex/luatex requirement and add pdflatex compatibility
|
|
% v0.4: Marcel Krüger https://github.com/zauguin
|
|
% * Fontawesome5 compatibility
|
|
% Gilbert Fuerer
|
|
% * Custom vertical rule color
|
|
% v0.5: Georger Araújo https://github.com/georgerbr
|
|
% * Horizontal rules at top and bottom, title
|
|
% v0.6: Vincent Goulet https://github.com/vigou3
|
|
% * Improving table cell rendering
|
|
|
|
% https://ctan.org/pkg/fontawesome5
|
|
\RequirePackage{fontawesome5}
|
|
|
|
% Compatibility with old version of this package
|
|
\def\abIconCheck{\faCheck}
|
|
\def\abIconInfoCircle{\faInfoCircle}
|
|
\def\abIconFire{\faBomb}
|
|
\def\abIconExclamationCircle{\faExclamationCircle}
|
|
\def\abIconExclamationTriangle{\faExclamationTriangle}
|
|
\def\abIconCogs{\faCogs}
|
|
\def\abIconThumbsUp{\faThumbsUp}
|
|
\def\abIconThumbsDown{\faThumbsDown}
|
|
\def\abIconCertificate{\faCertificate}
|
|
\def\abIconLightBulb{\faLightbulb[regular]}
|
|
\def\abIconTwitter{\faTwitter}
|
|
\def\abIconGithub{\faGithub}
|
|
|
|
% https://ctan.org/pkg/xcolor
|
|
\RequirePackage{xcolor}
|
|
% Some basic colors
|
|
\definecolor{abnote}{RGB}{25,64,122}
|
|
\definecolor{abcaution}{RGB}{245,0,0}
|
|
\definecolor{abwarning}{RGB}{255,215,0}
|
|
\definecolor{abimportant}{RGB}{220,0,0}
|
|
\definecolor{abvrulecolor}{RGB}{221,221,216}
|
|
|
|
% Customizable length
|
|
\newlength{\aweboxleftmargin}
|
|
\newlength{\aweboxcontentwidth}
|
|
\newlength{\aweboxvskip}
|
|
\setlength{\aweboxvskip}{5mm}
|
|
\newlength{\aweboxsignraise}
|
|
\setlength{\aweboxsignraise}{-5mm}
|
|
\newlength{\aweboxrulewidth}
|
|
\setlength{\aweboxrulewidth}{2pt}
|
|
|
|
\AtBeginDocument{%
|
|
\setlength{\aweboxleftmargin}{0.12\linewidth}%
|
|
\setlength{\aweboxcontentwidth}{0.88\linewidth}}
|
|
|
|
\RequirePackage{array}
|
|
|
|
% To allow for more than one optional argument
|
|
\RequirePackage{xparse}
|
|
|
|
% Horizontal rule definitions used with second optional argument [hrule]
|
|
\def\abShortLine{\cline{2-2}}
|
|
\def\abLongLine{\hline}
|
|
|
|
% The following commands are used to adjust and restore awesome boxes
|
|
% content width in respect to the current environment (e.g. lists).
|
|
\RequirePackage{ifthen}
|
|
\newlength{\aweboxlinewidthvar}
|
|
\setlength{\aweboxlinewidthvar}{0pt}
|
|
\newlength{\aweboxlinewidthref}
|
|
\AtBeginDocument{\setlength{\aweboxlinewidthref}{\linewidth}}
|
|
\newcommand{\awesomeboxadjustcontentwidth}{%
|
|
\ifthenelse{\lengthtest{\linewidth=\aweboxlinewidthref}}{}{%
|
|
\setlength{\aweboxlinewidthvar}{\dimexpr\aweboxlinewidthref-\linewidth}%
|
|
\setlength{\aweboxcontentwidth}{\dimexpr\aweboxcontentwidth-\aweboxlinewidthvar}}}%
|
|
%\aweboxdebug}}
|
|
\newcommand{\awesomeboxrestorecontentwidth}{%
|
|
\ifthenelse{\lengthtest{\linewidth=\textwidth}}{}{%
|
|
\setlength{\aweboxcontentwidth}{\dimexpr\aweboxcontentwidth+\aweboxlinewidthvar}%
|
|
\setlength{\aweboxlinewidthvar}{0pt}}}
|
|
|
|
% Commands API
|
|
% \awesomebox[vrulecolor][hrule][title]{vrulewidth}{icon}{iconcolor}{content}
|
|
\NewDocumentCommand \awesomebox { O{abvrulecolor} O{} o m m m +m }{%
|
|
{\vskip \aweboxvskip}\noindent\awesomeboxadjustcontentwidth%
|
|
\begin{tabular}%
|
|
{@{}>{\centering\arraybackslash}%
|
|
p{\aweboxleftmargin}@{}!{\color{#1}\vrule width #4}%
|
|
p{\dimexpr\aweboxcontentwidth-#4-\tabcolsep}@{}}
|
|
\IfValueTF {#3}
|
|
{ & #3 \\ #2 \raisebox{\aweboxsignraise}{\textcolor{#6}{\Huge#5}} & #7 \\ #2}
|
|
{ #2 \raisebox{\aweboxsignraise}{\textcolor{#6}{\Huge#5}} & #7 \\ #2}
|
|
\end{tabular}{\vskip \aweboxvskip}\awesomeboxrestorecontentwidth}
|
|
|
|
\newcommand{\notebox}[1]{%
|
|
\awesomebox[abnote]{\aweboxrulewidth}{\abIconInfoCircle}{abnote}{#1}}
|
|
|
|
\newcommand{\tipbox}[1]{%
|
|
\awesomebox{\aweboxrulewidth}{\abIconLightBulb}{black}{#1}}
|
|
|
|
\newcommand{\warningbox}[1]{%
|
|
\awesomebox[abwarning]{\aweboxrulewidth}{\abIconExclamationTriangle}{abwarning}{#1}}
|
|
|
|
\newcommand{\cautionbox}[1]{%
|
|
\awesomebox[abcaution]{\aweboxrulewidth}{\abIconFire}{abcaution}{#1}}
|
|
|
|
\newcommand{\importantbox}[1]{%
|
|
\awesomebox[abimportant]{\aweboxrulewidth}{\abIconExclamationCircle}{abimportant}{#1}}
|
|
|
|
% Environments API
|
|
% \begin{awesomeblock}[vrulecolor][hrule][title]{vrulewidth}{icon}{iconcolor}
|
|
% content
|
|
% \end{awesomeblock}
|
|
\NewDocumentEnvironment{awesomeblock}{ O{abvrulecolor} O{} o m m m }
|
|
{{\vskip \aweboxvskip}\noindent\awesomeboxadjustcontentwidth%
|
|
\begin{tabular}%
|
|
{@{}>{\centering\arraybackslash}%
|
|
p{\aweboxleftmargin}@{}!{\color{#1}\vrule width #4}%
|
|
p{\dimexpr\aweboxcontentwidth-#4-\tabcolsep}@{}}
|
|
\IfValueTF {#3}
|
|
{ & #3 \\ #2 \raisebox{\aweboxsignraise}{\textcolor{#6}{\Huge#5}} &}
|
|
{ #2 \raisebox{\aweboxsignraise}{\textcolor{#6}{\Huge#5}} &}}
|
|
{\\ #2 \end{tabular}{\vskip \aweboxvskip}\awesomeboxrestorecontentwidth}
|
|
|
|
\newenvironment{noteblock}%
|
|
{\begin{awesomeblock}[abnote]{\aweboxrulewidth}{\abIconInfoCircle}{abnote}}
|
|
{\end{awesomeblock}}
|
|
|
|
\newenvironment{tipblock}%
|
|
{\begin{awesomeblock}{\aweboxrulewidth}{\abIconLightBulb}{black}}
|
|
{\end{awesomeblock}}
|
|
|
|
\newenvironment{warningblock}%
|
|
{\begin{awesomeblock}[abwarning]{\aweboxrulewidth}{\abIconExclamationTriangle}{abwarning}}
|
|
{\end{awesomeblock}}
|
|
|
|
\newenvironment{cautionblock}%
|
|
{\begin{awesomeblock}[abcaution]{\aweboxrulewidth}{\abIconFire}{abcaution}}
|
|
{\end{awesomeblock}}
|
|
|
|
\newenvironment{importantblock}%
|
|
{\begin{awesomeblock}[abimportant]{\aweboxrulewidth}{\abIconExclamationCircle}{abimportant}}
|
|
{\end{awesomeblock}}
|
|
|
|
\newcommand{\aweboxdebug}{%
|
|
\typeout{**************************}%
|
|
\typeout{Line width: \the\linewidth}%
|
|
\typeout{Reference line width: \the\aweboxlinewidthref\space(text width: \the\textwidth)}%
|
|
\typeout{Width difference: \the\aweboxlinewidthvar}%
|
|
\typeout{Margin width: \the\aweboxleftmargin}%
|
|
\typeout{Content width: \the\aweboxcontentwidth}%
|
|
\typeout{**************************}}
|
|
|
|
\endinput
|