% Benjamin McKay % b.mckay@ucc.ie % see epigraph-keys.pdf or epigraph-keys.tex for more information. \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{epigraph-keys}[2020/04/22 v1.0 Epigraphs using key values] \RequirePackage{enumitem} \RequirePackage{pgfkeys} \RequirePackage{conditionals} \RequirePackage{microtype} \ProcessOptions\relax \makeatletter {\catcode`\!=8 % funny catcode so ! will be a delimiter \catcode`\Q=3 % funny catcode so Q will be a delimiter \long\gdef\given#1{88\fi\Ifbl@nk#1QQQ\empty!} \long\gdef\blank#1{88\fi\Ifbl@nk#1QQ..!}% if null or spaces \long\gdef\nil#1{\IfN@Ught#1* {#1}!}% if null \long\gdef\IfN@Ught#1 #2!{\blank{#2}} \long\gdef\Ifbl@nk#1#2Q#3!{\ifx#3}% same as above } \makeatother % The expression \if\expblank{...} x \else y \if gives x when ... expands out to be blank space. \def\expblank{\expandafter\blank\expandafter} \def\expgiven{\expandafter\given\expandafter} \def\expnil{\expandafter\nil\expandafter} \def\beforeepigraphskip{0pt} \def\afterepigraphskip{\baselineskip} \def\epigraphtextindent{2cm} \def\epigraphauthorsourceindent{1.5cm} \def\epigraphtextwidth{\linewidth} \def\epigraphstyle{\small} \def\epigraphdash{---} \def\epigraphquotefont{\itshape} \def\epigraphtranslationfont{} \pgfkeys{ /epigraph/.is family, /epigraph, default/.style = { author = {}, source = {}, etc = {}, translation = {}, }, author/.store in = \epigraphauthor, source/.store in = \epigraphsource, etc/.store in = \epigraphetc, translation/.store in = \epigraphtranslation, before skip/.store in = \beforeepigraphskip, before skip/.default = 0pt, after skip/.store in = \afterepigraphskip, after skip/.default = \baselineskip, text indent/.store in = \epigraphtextindent, text indent/.default = 2cm, author and source indent/.store in = \epigraphauthorsourceindent, author and source indent/.default = 1.5cm, width/.store in = \epigraphtextwidth, width/.default = \linewidth, style/.store in = \epigraphstyle, style/.default = \small, dash/.store in = \epigraphdash, dash/.default = ---, quote style/.store in = \epigraphquotefont, quote style/.default = {}, translation style/.store in = \epigraphtranslationfont, translation style/.default = {}, } \ifdefined\epigraph\else\xdef\epigraph{}\fi \renewcommand{\epigraph}[2][]{ \pgfkeys{/epigraph,default,#1} \epigraphstyle\vspace{\beforeepigraphskip} \begin{enumerate}[leftmargin=\epigraphtextindent] \item[] {%% \epigraphquotefont{}% \begin{minipage}{\epigraphtextwidth}% #2% \end{minipage}% }%% \if\expblank{\epigraphtranslation} \else \item[] {% \epigraphtranslationfont% {%%%% \begin{minipage}{\epigraphtextwidth}% \epigraphtranslation% \end{minipage} }%%%% }% \fi \if\expblank{\epigraphauthor} \if\expblank{\epigraphsource} \if\expblank{\epigraphetc} \else\epigraphetc \fi \else \begin{enumerate}[leftmargin=\epigraphauthorsourceindent]% \item[\epigraphdash]% {%% \smallerSmallCapsTracking{}\textsc{\epigraphsource} }%% \if\expblank{\epigraphetc}% \else{}, \epigraphetc \fi \end{enumerate} \fi \else \begin{enumerate}[leftmargin=\epigraphauthorsourceindent]% \item[\epigraphdash] \epigraphauthor \\ \if\expblank{\epigraphsource}% \if\expblank{\epigraphetc}% \else\epigraphetc% \fi% \else% \begingroup \smallerSmallCapsTracking{}\textsc{\epigraphsource}% \endgroup \if\expblank{\epigraphetc}% \else% \begingroup% , \epigraphetc \endgroup \fi \fi \end{enumerate} \fi \end{enumerate} \vspace{\afterepigraphskip} \par\noindent } \newcommand{\smallerSmallCapsTracking}% {% \SetTracking{encoding={*}, shape=sc}{20}% }% \ifdefined\epigraphs\else\xdef\epigraphs{}\fi \renewenvironment{epigraphs}{\begin{enumerate}}{\end{enumerate}} \ifdefined\qitem\else\xdef\qitem{}\fi \renewcommand{\qitem}[2][]{\item[]\epigraph[#1]{#2}}