% Copyright (c) 2015-2019 Robert Ryszard Paciorek <rrp@opcode.eu.org>
% 
% MIT License
% 
% 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.

\documentclass[ fontSize=10pt, ]{pdfArticle}


\title {Features of \texttt{pdfArticle} document class}
\author{Robert Ryszard Paciorek <rrp@opcode.eu.org>}
\date  {2019-05-05}

\makeatletter\hypersetup{
	pdftitle = {\@title},
	pdfauthor = {\@author}
}\makeatother

\setstretch{1.0} \setlength{\parindent}{0pt} \setlength{\parskip}{2pt}

\usepackage{titling}
\renewcommand{\maketitlehooka}{\vspace{-44pt}}
\renewcommand{\maketitlehookb}{\vspace{-14pt}}
\renewcommand{\maketitlehookd}{\vspace{-13pt}}
\renewcommand{\maketitlehookd}{\vspace{-12pt}}

\usepackage{hologo}
\newcommand{\pkgLink}[1]{\texttt{\href{https://ctan.org/pkg/#1}{#1}}}

\begin{document}

\maketitle\thispagestyle{empty}

Document class \texttt{pdfArticle} is simple document class dedicated for creating pdf documents with \hologo{LuaLaTeX}.
This class:
\begin{itemize}
\item Use \texttt{extarticle} (from \pkgLink{extsizes}) as base document class (for support wide range of base font sizes).
\item Require and configure \pkgLink{fontspec} package, that enable support for Unicode Open Type fonts.
      Configure default document \textrm{sherif}, \textsf{sans} and \texttt{mono} fonts via \texttt{fontspec} according to class options.
      By default use \textit{Latin Modern} fonts with support for \textsc{small caps} in sherif and mono fonts.
\item Require and configure \pkgLink{graphicx} and \pkgLink{graphbox} packages (for including graphics).
      Set file extensions for search graphics files to \texttt{.mp, .pdf, .png, .jpg, .jpeg} (in this order -- first \hologo{METAPOST}, last JPEG) and default image resolution to \texttt{imgResolution} class atribute (default 150).
\item Require \pkgLink{xcolor} (for foreground and background colors) and \pkgLink{fifo-stack} packages and configure colours stack (you can use it with \Verb$\FSPush{colors}$, \Verb$\FSPop{colors}$ and \Verb$\FSTop{colors}$ commands).
\item Require \pkgLink{hyperref} package (for internal and external links in pdfs) and configure color external (url) link as blue and internal (\Verb$\ref{}$) links as color from top of colours stack.
      More setting (eg. set PDF title, author, etc) can be do via \Verb$\hypersetup{}$ command.
\item Require \pkgLink{geometry} package and configure page gemetry (paper size, orientation and marings) according to class options. By default use portrait A4 paper.
\item Provide \Verb$\forceNewPageGeometry$ commad for enforce new page geometry (like \Verb$\newgeometry$, but allow change paper size too).
\item Require \pkgLink{fancyvrb} and \pkgLink{fvextra} (for good verbatim enviromet with line breaking, line numbering, titles, frames, etc).
      Redefine standard \Verb$verbatim$ enviromet and \Verb$\verb$ commad to using fancyvrb. Allow break long lines on spaces, \Verb$/$ or \Verb$-$, set $\hookrightarrow$ as post break marker.
\item Require \pkgLink{ulem}, \pkgLink{contour} and \pkgLink{shadowtext} (for text decorations).
\item Is incompatible with \texttt{sout} package,
      because define own \Verb$\ul[color]{text}$, \Verb$\st[color]{text}$ and \Verb$\hl[color]{text}$ commands (based on \texttt{ulem} package)
      for \ul[blue]{underline}, \st[red]{strike out} and \hl[yellow]{highlight} text with selected color.
\item Require \pkgLink{enumitem} (for better enumerate, itemize and description environments).
\item Redefine \Verb$\alph$ and \Verb$\Alph$ with \pkgLink{alphalph} package (for converting big numbers to letters as \Verb[breaklines=true]$a, b, ..., x, y, z, aa, ab, ac, ..., az, ba, ..., zz, aaa, ...$).
\item Require \pkgLink{pbox} and \pkgLink{varwidth} (for vertical box with automatic minimal width).
\item Require \pkgLink{overpic} (for putting \hologo{LaTeXTeX} stuff on images).
\item Require \pkgLink{wrapfig} (for wraping text around images).
\item Require \pkgLink{array} and \pkgLink{dcolumn} (for useful extentions for tables).
\item Require \pkgLink{tabto} (for tabbing to fixed positions).
\item Require \pkgLink{ragged2e} (for \Verb$justify$ environment and configurable \Verb$Center$, \Verb$FlushLeft$, \Verb$FlushRight$).
\item Require \pkgLink{changepage} (for changes margins via \Verb$adjustwidth$ environment).
\item Require \pkgLink{setspace} (for setting line stretch -- global and via \Verb$spacing$ environment).
\item Require \pkgLink{amsmath} and \pkgLink{unicode-math} (for better math with Unicode Open Type fonts).
\item Require \pkgLink{adjustbox} (for scaling, rotating, clipping, etc boxes).
\item Only when \Verb$extra$ option was given require: \pkgLink{minted} (code highlight), \pkgLink{tcolorbox} (nice framed boxes).
\end{itemize}

\clearpage
Class can be simple used by: \Verb$\documentclass{pdfArticle}$. Below is example of class usage with all avalible options, all options in this example are set to default values:
\begin{Verbatim}[xleftmargin=5mm]
\documentclass[
	fontSize=12pt,
	
	mainFont={Latin Modern Roman},
	mainFontFeat={
		UprightFeatures = { SmallCapsFont={ lmromancaps10regular } },
		ItalicFeatures  = { SmallCapsFont={ lmromancaps10oblique } },
		SlantedFont     = lmromanslant10regular,
		BoldSlantedFont = lmromanslant10bold,
		Ligatures=TeX
	},
	sansFont={Latin Modern Sans},
	sansFontFeat={
		Ligatures=TeX
	},
	monoFont={Latin Modern Mono},
	monoFontFeat={
		UprightFeatures = { SmallCapsFont={ lmmonocaps10regular } },
		ItalicFont      = lmmono10italic,
		ItalicFeatures  = { SmallCapsFont={ lmmonocaps10oblique } },
		SlantedFont     = lmmonoslant10regular
	},
	
	paperSize=a4paper, paperMode=portrait, twoside=true,
	tmargin=2.2cm, bmargin=2.5cm, lmargin=2.2cm, rmargin=2.2cm,
	
	imgResolution=150, extra=false
]{pdfArticle}
\end{Verbatim}

It's also possible load some packages (or do other things) right before load \texttt{hyperref} package (after load all other packages) via \Verb$\pdfArticlePreHyperRef$:
\begin{Verbatim}[xleftmargin=5mm]
\newcommand\pdfArticlePreHyperRef{
% stuff to do before load hyperref
}
\documentclass{pdfArticle}
\end{Verbatim}
\end{document}
