191 lines
4.6 KiB
TeX
191 lines
4.6 KiB
TeX
% !TEX root = ../../Main.tex
|
|
|
|
% ==== Base Case ====
|
|
% Define a counter to track nesting level
|
|
\newcounter{coloredBoxLevel}
|
|
|
|
% Parameters:
|
|
\makeatletter
|
|
\define@key{coloredBox}{icon}{\def\coloredBoxIcon{#1}}
|
|
\define@key{coloredBox}{icon.prefix}{\def\coloredBoxIconPrefix{#1}}
|
|
\define@key{coloredBox}{icon.fontsize}{\def\coloredBoxIconSize{#1}}
|
|
\define@key{coloredBox}{icon.offset.x}{\def\coloredBoxIconOffsetX{#1}}
|
|
\define@key{coloredBox}{icon.offset.y}{\def\coloredBoxIconOffsetY{#1}}
|
|
\define@key{coloredBox}{icon.color}{\def\coloredBoxColor{#1}}
|
|
\define@key{coloredBox}{background.color}{\def\coloredBoxBackground{#1}}
|
|
\makeatother
|
|
% Define the environment
|
|
\NewEnviron{ColoredBox}[1][
|
|
icon={\faInfoCircle},
|
|
icon.color={blue},
|
|
icon.prefix={},
|
|
icon.fontsize={28pt},
|
|
icon.offset.x={0pt},
|
|
icon.offset.y={0pt},
|
|
background.color={blue}
|
|
]{
|
|
% Start of the environment
|
|
%% Setting the keys
|
|
\setkeys{coloredBox}{#1}
|
|
|
|
%% Set background opacity
|
|
|
|
% Increment the nesting level counter
|
|
\stepcounter{coloredBoxLevel}
|
|
|
|
% Set opacity based on the nesting level using a formula
|
|
\FPeval{\backgroundOpacityFloat}{0.05 + 0.075 * \arabic{coloredBoxLevel}}
|
|
|
|
% Convert the opacity to a percentage integer
|
|
\FPeval{\backgroundOpacity}{round(\backgroundOpacityFloat * 100, 0)}
|
|
|
|
% Always have the icon opacity 15% higher than the background
|
|
\FPeval{\iconOpacity}{\backgroundOpacity + 20}
|
|
|
|
%% === Content ===
|
|
\filbreak
|
|
\vspace*{0.5\baselineskip}
|
|
|
|
\noindent
|
|
\begin{minipage}{\linewidth}
|
|
\begin{mdframed}[
|
|
backgroundcolor={\coloredBoxBackground!\backgroundOpacity},
|
|
hidealllines=true,
|
|
skipabove=0.7\baselineskip,
|
|
skipbelow=0.7\baselineskip,
|
|
splitbottomskip=2pt,
|
|
splittopskip=4pt,
|
|
roundcorner=5pt
|
|
]
|
|
\tikzset{every picture/.style={opacity=1}}
|
|
\begin{tikzpicture}
|
|
% Icon area
|
|
\node[
|
|
% Middle Top
|
|
anchor=north,
|
|
inner sep=0pt,
|
|
outer sep=0pt,
|
|
align=center,
|
|
text width=1cm,
|
|
] at (0,0 |- current bounding box.north) {
|
|
\coloredBoxIconPrefix
|
|
\fontsize{\coloredBoxIconSize}{\coloredBoxIconSize}
|
|
\selectfont
|
|
\hspace*{\coloredBoxIconOffsetX-1.75cm}
|
|
\raisebox{\coloredBoxIconOffsetY}
|
|
{\color{\coloredBoxColor!\iconOpacity} \coloredBoxIcon}
|
|
};
|
|
|
|
% Content area
|
|
\node[
|
|
anchor=north west,
|
|
inner sep=10pt,
|
|
outer sep=0pt,
|
|
text width=\linewidth-0.7cm,
|
|
align=justify
|
|
] at (-0.5cm,0 |- current bounding box.north) {
|
|
\BODY
|
|
};
|
|
\end{tikzpicture}
|
|
\end{mdframed}
|
|
\end{minipage}
|
|
%% === /Content ===
|
|
|
|
% Reduce the nesting level counter
|
|
\addtocounter{coloredBoxLevel}{-1}
|
|
}
|
|
% ==== /Base Case ====
|
|
|
|
% ==== Info Box ====
|
|
% Derived from `ColoredBox`
|
|
\NewEnviron{InfoBox}[1][
|
|
icon={\faInfoCircle},
|
|
icon.color={blue},
|
|
icon.prefix={},
|
|
icon.fontsize={24pt},
|
|
icon.offset.x={0pt},
|
|
icon.offset.y={0pt},
|
|
background.color={blue}
|
|
]{
|
|
\let\iBODY\BODY
|
|
\begin{ColoredBox}[#1]
|
|
\iBODY
|
|
\end{ColoredBox}
|
|
}
|
|
% ==== /Info Box ====
|
|
|
|
% ==== Warning Box ====
|
|
% Derived from `ColoredBox`
|
|
\NewEnviron{WarningBox}[1][
|
|
icon={\faExclamationTriangle},
|
|
icon.color={red},
|
|
icon.prefix={},
|
|
icon.fontsize={24pt},
|
|
icon.offset.x={0pt},
|
|
icon.offset.y={0pt},
|
|
background.color={red}
|
|
]{
|
|
\let\wBODY\BODY
|
|
\begin{ColoredBox}[#1]
|
|
\wBODY
|
|
\end{ColoredBox}
|
|
}
|
|
% ==== /Warning Box ====
|
|
|
|
% ==== Success Box ====
|
|
% Derived from `ColoredBox`
|
|
\NewEnviron{SuccessBox}[1][
|
|
icon={\faCheckCircle},
|
|
icon.color={green},
|
|
icon.prefix={},
|
|
icon.fontsize={24pt},
|
|
icon.offset.x={0pt},
|
|
icon.offset.y={2pt},
|
|
background.color={green}
|
|
]{
|
|
\let\sBODY\BODY
|
|
\begin{ColoredBox}[#1]
|
|
\sBODY
|
|
\end{ColoredBox}
|
|
}
|
|
% ==== /Success Box ====
|
|
|
|
% ==== Important Box ====
|
|
% Derived from `ColoredBox`
|
|
\NewEnviron{ImportantBox}[1][
|
|
icon={\faExclamationCircle},
|
|
icon.color={orange},
|
|
icon.prefix={},
|
|
icon.fontsize={24pt},
|
|
icon.offset.x={0pt},
|
|
icon.offset.y={0pt},
|
|
background.color={orange}
|
|
]{
|
|
\let\impBODY\BODY
|
|
\begin{ColoredBox}[#1]
|
|
\impBODY
|
|
\end{ColoredBox}
|
|
}
|
|
|
|
% ==== Simpler Custom Boxes ====
|
|
% Environment `CustomBox`
|
|
% Usage:
|
|
% \begin{CustomBox}{<icon>}{<color>}
|
|
% ...
|
|
% \end{CustomBox}
|
|
% Parameters:
|
|
\NewEnviron{CustomBox}[2]{
|
|
\let\cBODY\BODY
|
|
\begin{ColoredBox}[
|
|
icon={#1},
|
|
icon.color={#2},
|
|
icon.prefix={},
|
|
icon.fontsize={24pt},
|
|
icon.offset.x={0pt},
|
|
icon.offset.y={0pt},
|
|
background.color={#2}
|
|
]
|
|
\cBODY
|
|
\end{ColoredBox}
|
|
}
|
|
% ==== /Simpler Custom Boxes ==== |