% Florian Sihler, 2024
% Licensed under GNU General Public License version 3
% https://opensource.org/licenses/gpl-3.0.html
\documentclass[parskip=half,english,numbers=noenddot,footnotes=nomultiple,oneside]{scrartcl}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}

\usepackage{microtype}
\usepackage[hidelinks]{hyperref}

\usepackage{lmodern}
\usepackage{array,booktabs}
\usepackage{footnote}
\usepackage{fontawesome}

\usepackage{fancyqr}
\usepackage{xcolor}
\usepackage[tex]{listings}
\usepackage{amssymb}

\lstdefinelanguage{ltx}{
	language={[LaTeX]TeX},
	moretexcs=[1]{fancyqr,qrcode,FancyQrDoNotPrintSquare,FancyQrRoundCut,FancyQrHardCut,FancyQrLoad,FancyQrLoadDefault,fancyqrset,faGithub}
}
\lstset{basicstyle=\ttfamily,breaklines,texcsstyle=*\color{purple}\bfseries,language=ltx}
\lstMakeShortInline|
\def\ltx#1{\lstinline/#1/}
\interfootnotelinepenalty=10000


\title{The \texttt{fancyqr} package}
\author{%
	\texorpdfstring{Florian Sihler\medskip\\*
		\fancyqr{https://github.com/EagleoutIce/fancyqr}
	}{Florian Sihler}}
\date{Version v2.2 \textendash{} 2024/11/27}

\begin{document}
   \maketitle


	\texttt{fancyqr} is a simple package to create fancy qr-codes with the help of the \textit{\href{https://www.ctan.org/pkg/qrcode}{qrcode}}-package.
	You can use the |\fancyqr|-macro just like the normal |\qrcode|.\footnote{\ltx{\\fancyqr[<qr-options>]\{<url>\}}}

	If you do want to hide a center square (e.g, because you want to embed an image) you can use |\FancyQrDoNotPrintSquare{<x>}{<y>}| to hide a rectangle with radius x and y set from the center (with |\FancyQrDoNotPrintRadius{<factor>}| you can apply a \href{https://github.com/EagleoutIce/fancyqr/pull/41}{rounding} to this!). If you choose this option, the default |\FancyQrRoundCut| that rounds cut corners can be changed with |\FancyQrHardCut|.
	At the moment, there are six other styles for the qr-code |flat|, |frame|, |blobs|, |glitch|, and |dots|, that you can load (locally) by using |\FancyQrLoad{<name>}|. The default style is named |default| and can be 'reset' by |\FancyQrLoad{default}| or |\FancyQrLoadDefault|.

	All of the extra qr-options (you can set all of them with |\fancyqrset{<keys>}|) are showcased in \autoref{tbl:extra-keys}.
	The defaults are set like this:
\begin{lstlisting}
\fancyqrset{image padding=0,gradient=true,
	gradient angle=135,r color=teal,l color=purple}
\end{lstlisting}
	Consider the following example (uses \href{https://www.ctan.org/pkg/fontawesome}{fontawesome} for the symbol, but you can use include images,~\ldots):
\begin{lstlisting}
\fancyqr[image=\huge\faGithub,image padding=1,color=black!90!gray]{https://github.com/EagleoutIce/fancyqr}
\end{lstlisting}

	\parbox[c]{.3\linewidth}{Which produces:}\hfill\parbox[c]{.4\linewidth}{\raggedleft\fancyqr[image=\Huge\faGithub,image padding=1,color=black!90!gray]{https://github.com/EagleoutIce/fancyqr}}\par

\begin{savenotes}
\begin{table}
	\centering\begin{tabular}{>{\ttfamily}ll>{\ttfamily}cp{.5\linewidth}}
		\toprule
		\multicolumn{1}{l}{Option} & Type & \multicolumn{1}{c}{Default} & Explanation \\
		\midrule
		classic         & boolean &   false  & Use the classic qr-code style (black with flat rectangles, this loads the |flat| style).                                \\
		color           & color   &          & Disables the |gradient| and sets the color accordingly.      \\
		compensate      & length  & 0.15pt & Compensating overlap to add to avoid glitches.               \\
		gradient        & boolean &   true   & Toggle the color gradient                                    \\
		gradient angle  & angle   &  135     & Change the gradient angle.                                   \\
		image           & \LaTeX   &          & Automatically center an image (you have to care for the size and maybe adjust the |version| and |level| to keep the qr-code readable).\footnote{The package will automatically calculate the required \ltx{\\FancyQrDoNotPrintSquare} (you have to make sure that the qr-code still has enough information to be readable). Therefore, the image will not scale with the qr-code.} \\
		image padding   & number  &          & Additionally hide blocks (x \& y) around the image.          \\
		image x padding & number  &   0      & Additionally hide blocks (x) around the image.               \\
		image y padding & number  &   0      & Additionally hide blocks (y) around the image.               \\
		l color         & color   & purple   & Set the top left gradient color.                             \\
		left color      & color   &          & Alias for |l color|.                                         \\
		level 			 & L/M/Q/H &   M      & |qrcode| option affecting error correction (low, medium, quartile, high).                                     \\
		padding         & flag    &          & |qrcode| option adding sufficient additional space around the qr-code.                                            \\
		r color         & color   &  teal    & Set the bottom right gradient color.                         \\
		random color    & colors  &          & Allow to set a random color pool to pick from.               \\
		right color     & color   &          & Alias for |r color|.                                         \\
		size            & length  &          & Alias for |qrcode|'s |height| option.                        \\
		tight           & flag    &          & |qrcode| option adding no additional space around the qr-code.                                                    \\
		version         & \([0..40] \in \mathbb{N}\) &   0      & |qrcode| option affecting the size (tries to be as small as possible).                                             \\
		width           & length  &          & Alias for |qrcode|'s |height| option.                        \\
		\bottomrule
	\end{tabular}
	\caption{Overview of special qr-options.}
	\label{tbl:extra-keys}
\end{table}
\end{savenotes}

\end{document}
