Dave Jarvis' Repositories

git clone https://repo.autonoma.ca/repo/recipe-books.git
recipe-book.cls
\pgfkeys{
/recipe/.is family, /recipe,
- author/.store in = \r@creditauthor,
- authorurl/.store in = \r@authorurl,
- license/.store in = \r@license,
- licenseurl/.store in = \r@licenseurl,
- author=,
- authorurl=,
- license=,
- licenseurl=,
-}
-
-% keys for photos
-\pgfkeys{
- /photo/.is family, /photo,
- width/.store in = \@photowidth,
- author/.store in = \p@creditauthor,
- authorurl/.store in = \p@authorurl,
- license/.store in = \p@license,
- licenseurl/.store in = \p@licenseurl,
- width=\linewidth,
- author=,
- authorurl=,
- license=,
- licenseurl=,
-}
-
-\def\@recipecredittext{}
-\def\@recipelicensetext{}
-\def\@photocredittext{}
-\def\@photolicensetext{}
-\def\citationtext{}
-
-\newcommand{\recipecredit}[2][]{%
- \def\@recipecredittext{%
- \ifblank{#1}{#2}{\href{#1}{#2}}}
-}
-\newcommand{\recipelicense}[2][]{%
- \def\@recipelicensetext{, %
- \ifblank{#1}{#2}{\href{#1}{#2}}}
-}
-\newcommand{\photocredit}[2][]{%
- \def\@photocredittext{%
- \ifblank{#1}{#2}{\href{#1}{#2}}}
-}
-\newcommand{\photolicense}[2][]{%
- \def\@photolicensetext{, %
- \ifblank{#1}{#2}{\href{#1}{#2}}}
-}
-
-\newcommand{\parserecipecitation}[1]{%
- \def\r@creditauthor{}
- \def\r@authorurl{}
- \def\r@license{}
- \def\r@licenseurl{}
- \def\@recipecredittext{}
- \def\@recipelicensetext{}
- \pgfkeys{/recipe, #1}
- \ifdefempty{\r@creditauthor}{}{%
- \recipecredit[\ifdefempty{\r@authorurl}{}{\r@authorurl}]{\r@creditauthor}}
- \ifdefempty{\r@license}{}{%
- \recipelicense[\ifdefempty{\r@licenseurl}{}{\r@licenseurl}]{\r@license}}
-}
-
-\newcommand{\parsephotocitation}[1]{%
- \def\p@creditauthor{}%
- \def\p@authorurl{}%
- \def\p@license{}%
- \def\p@licenseurl{}%
- \def\@photocredittext{}%
- \def\@photolicensetext{}%
- \pgfkeys{/photo, #1}%
- \ifdefempty{\p@creditauthor}{}{%
- \photocredit[\ifdefempty{\p@authorurl}{}{\p@authorurl}]{\p@creditauthor}}%
- \ifdefempty{\p@license}{}{%
- \photolicense[\ifdefempty{\p@licenseurl}{}{\p@licenseurl}]{\p@license}}%
-}
-
-\newcommand{\frontcoverphoto}[2][]{%
- \parsephotocitation{#1}
- \def\@frontcoverphoto{#2}
-}
-
-\newcommand{\inlinecitationalignment}{\raggedright}
-\newcommand{\checkinlinecitation}{%
-\iftoggle{inlinecitations}{%
- \ifdefempty{\@recipecredittext}{}{%
- \vspace{-\aftersecskip}
- {\inlinecitationalignment\sffamily\relsize{-1}\itshape By \@recipecredittext\ifdefempty{\@recipelicensetext}{}{\@recipelicensetext}.\par}
- \vspace{\aftersecskip}}
-}{}
-}
-
-\iftoggle{endcitations}{\makepagenote}{}
-\def\blfootnote{\xdef\@thefnmark{}\@footnotetext}
-\renewcommand{\notesname}{Recipe and Photo Sources}
-\newcommand{\xpagenote}[1]{%
- \unskip\begingroup\protected@edef\x{\endgroup\noexpand\pagenote{#1}}%
- \scantokens\expandafter{\x\relax}}
-\renewcommand*{\notenumintext}[1]{}
-\renewcommand*{\notenuminnotes}[1]{}
-\renewcommand{\prenoteinnotes}{\item }
-\renewcommand{\postnoteinnotes}{}
-
-% For Inserts.
-% \DeclareInserts{25}{ad1.jpg, ad2.jpg, ad3.jpg, ad4.jpg}
-% \InsertAd will cycle through ad1.jpg -> ad4.jpg everytime
-% it is called.
-% It'll be called after every 25 recipes.
-\newarray\Inserts
-\newcounter{advertTotal}
-\newcounter{advertIdx}
-\newcounter{recipeIdx}
-\newcommand{\advertTotal}{\theadvertTotal}
-\newcommand{\DeclareInserts}[2]{%
- \def\recipeAdCount{#1}
- \renewcommand*{\do}[1]{%
- \stepcounter{advertTotal}%
- \Inserts(\arabic{advertTotal})={##1}
- }
- \docsvlist{#2}
-}
-\newcommand{\InsertAd}{%
- \ifnumequal{\theadvertTotal}{0}{}{%
- \thispagestyle{empty}
- \stepcounter{advertIdx}%
- \pgfmathparse{mod(\theadvertIdx - 1,\advertTotal) + 1}
- \pgfmathtruncatemacro{\adIdx}{\pgfmathresult}%
- \checkInserts(\adIdx)
- \ThisTileWallPaper{\paperwidth}{\paperheight}{\cachedata}
- \mbox{}\clearpage
- }
-}
-
-
-%%% Hook for cover page etc
-% TODO: change this to use key options
-\newcommand{\makecover}[1][]{%
-\begin{titlingpage}
-\ifdefempty{\@frontcoverphoto}{%
- \maketitle
-}{%
- \ThisTileWallPaper{\paperwidth}{\paperheight}{\@frontcoverphoto}
- \mbox{}\clearpage
-}
-\thispagestyle{empty}
-\ifstrequal{#1}{copyrightpage}{\clearpage\makecrpage}{}
-\end{titlingpage}%
-}
-
-\newcommand{\makecrpage}{%
-%\begin{titlingpage}
-\mbox{}
-\vfill
-\relsize{-1}
-Recipe compilation by \theauthor.
-\ifdefempty{\@frontcoverphoto}{}{%
- \ifdefempty{\@photocredittext}{}{%
- Front cover photo courtesy \@photocredittext\ifdefempty{\@photolicensetext}{}{\@photolicensetext}.
- }
-}
-\\
-\\
-This book is available under a \href{http://creativecommons.org/licenses/by-sa/3.0/}{Creative Commons Attribution-ShareAlike License}.\\
-Generated using \href{http://recipezeal.com}{Recipe Zeal} and \LaTeX.\\
-Book design and themes by \href{http://liantze.penguinattack.org}{Lian Tze Lim}.
-%\end{titlingpage}%
-}
-
-\patchcommand{\mainmatter}{}{%
-%%% turn off sectional numberings
-\setcounter{secnumdepth}{-1}
-\setcounter{tocdepth}{1}
-%% set end notes to be an itemised list
-\addtonotes{\protect\begin{itemize}[label=\itemmarker,nosep,leftmargin=*]}
-}
-
-%%% Overview as a bit of a chapter introduction
-\newenvironment{overview}[1]{%
-\chapter*{#1}
-\providelength{\oldparskip}
-\setlength{\oldparskip}{\parskip}
-\setlength{\parskip}{\onelineskip}
-}{%
-\setlength{\parskip}{\oldparskip}
-\clearpage
-}
-
-%%%% TODO cooking time, preparation time, portion... "atomic" fields
-\newcommand{\ovenstyle}{}
-\newcommand{\oven}[1]{\makebox{\ovenstyle Preheat oven to #1}\par}
-
-\newcommand{\maintextcolor}{black}
-\newcommand{\primarycolor}{blue}
-\newcommand{\secondarycolor}{blue!80}
-\newcommand{\tertiarycolor}{blue!60}
-\newcommand{\primarycolorcomplement}{white}
-\newcommand{\secondarycolorcomplement}{white}
-\newcommand{\tertiarycolorcomplement}{white}
-\newcommand{\darkhighlight}{red!80!black}
-\newcommand{\brighthighlight}{red}
-\newcommand{\highlightcolor}{\darkhighlight}
-\newcommand{\externallinkcolor}{SteelBlue}
-
-\newcommand{\scriptdefault}{pzc}
-\newcommand{\scriptfamily}{\fontfamily{\scriptdefault}\selectfont}
-
-\newcommand{\recipecolor}{\highlightcolor}
-\newcommand{\recipefamily}{\sffamily}
-\newcommand{\recipesize}{\LARGE}
-\newcommand{\recipestyle}{\bfseries}
-\newcommand{\recipefont}{\recipefamily\recipesize\color{\recipecolor}\recipestyle}
-
-\newcommand{\headingcolor}{\primarycolor}
-\newcommand{\headingfamily}{\sffamily}
-\newcommand{\headingsize}{\large}
-\newcommand{\headingstyle}{\itshape}
-\newcommand{\headingfont}{\headingfamily\headingsize\color{\headingcolor}\headingstyle}
-
-\renewcommand{\chaptitlefont}{\recipefamily\color{\recipecolor}\bfseries\HUGE\centering}
-\setsecheadstyle{\recipefont}
-\setsubsecheadstyle{\headingfont}
-
-\newcommand{\headingmarker}{\textbullet}
-\newcommand{\itemmarker}{\textbullet}
-\newcommand{\enumeratemarker}[1]{#1.}
-\newcommand{\inlinelistmarker}{\makebox[1.5em][c]{\textbullet}}
-
-\newcommand{\equipmentstyle}{leftmargin=*}
-\newcommand{\ingredientsstyle}{label=\textbullet,leftmargin=*}
-\newcommand{\preparationstyle}{label=\textbullet,leftmargin=*}
-\newcommand{\substitutionstyle}{label=\textbullet,leftmargin=*}
-\newcommand{\instructionsstyle}{label={\arabic*. },leftmargin=*}
-
-
-%%%% Basic structures, redefine as needed in theme files using titlesec and enumitem.
-\newcommand{\recipecategory}[1]{%
-\clearforchapter
-\formatcategorypage{#1}
-\phantomsection\addcontentsline{toc}{chapter}{#1}
-\clearpage
-}
-
-\newcommand{\formatcategorypage}[1]{%
-\thispagestyle{empty}
-\vspace*{\stretch{1}}
-\begin{center}
-\fontsize{48pt}{50pt}\headingfamily\bfseries\selectfont\color{\recipecolor}#1
-\end{center}
-\vspace*{\stretch{2}}
-}
-
-\newenvironment{recipe}[2][]{%
- \parserecipecitation{#1}
- \clearpage%
- \color{\maintextcolor}%
- \section{#2}
- \checkinlinecitation
-}{}
-
-\renewcommand{\memsecinfo}[5]{%
- \ifstrequal{#1}{section}{\renewcommand{\recipetitle}{#3}}{}
-}
-
-\AtBeginEnvironment{recipe}{%
- \def\@recipecredittext{}
- \def\@recipelicensetext{}
- \def\@photocredittext{}
- \def\@photolicensetext{}
- \def\citationtext{}
-}
-
-\AtEndEnvironment{recipe}{%
- \ifdefempty{\@recipecredittext}{}{\apptocmd{\citationtext}{By \@recipecredittext\ifdefempty{\@recipelicensetext}{}{\@recipelicensetext}.}{}{}}
- \ifdefempty{\@photocredittext}{}{\apptocmd{\citationtext}{ Photo courtesy \@photocredittext\ifdefempty{\@photolicensetext}{}{\@photolicensetext}.}{}{}}
- \iftoggle{footercitations}{%
- \ifdefempty{\citationtext}{}{\blfootnote{\citationtext}}
- }{}
- \iftoggle{endcitations}{%
- \ifdefempty{\citationtext}{}{\leavevmode\xpagenote{\textcolor{\darkhighlight}{\sffamily\bfseries\recipetitle}\space\textit{(p.\thepage)}\enspace\citationtext}}
- }{}
-}
-
-\AfterEndEnvironment{recipe}{%
- % Check if an ad should be inserted
- \ifdef{\recipeAdCount}{
- \ifnumgreater{\theadvertTotal}{0}{
- \stepcounter{recipeIdx}
- \pgfmathparse{mod(\therecipeIdx,\recipeAdCount)}
- \pgfmathtruncatemacro{\recIdx}{\pgfmathresult}
- \ifnumequal{\recIdx}{0}{\afterpage{\InsertAd}}{}
- }{}
- }{}
-}
-
-\newcommand{\insetphoto}[2][width=.4\textwidth]{%
- \parsephotocitation{#1}
- \includegraphics[width=\@photowidth]{#2}\par
-}
-
-\newcommand{\fullpagephoto}[2][]{%
- \iftoggle{inlinecitations}{}{\parsephotocitation{#1}}
- \afterpage{\iftoggle{inlinecitations}{\parsephotocitation{#1}}{}%
- \ThisTileWallPaper{\paperwidth}{\paperheight}{#2}
- \iftoggle{clearpn}{\thispagestyle{empty}}{}
- \iftoggle{inlinecitations}{%
- \ifdefempty{\@photocredittext}{}{%
- \begin{tikzpicture}[overlay,remember picture]
- \node[fill=white,fill opacity=.8,text opacity=1,font=\relsize{-1}\sffamily\itshape,
- anchor=north east,xshift=-.5in,yshift=-.5in]
- at (current page.north east)
- {Photo courtesy \@photocredittext\ifdefempty{\@photolicensetext}{}{\@photolicensetext}.};
- \end{tikzpicture}
- }
- }{}
- \mbox{}\clearpage}
-}
-
-\newcommand{\checkfiller}{%
- \iftoggle{print}{%
- \clearpage
- \checkoddpage\strictpagecheck
-% \ifoddpage\ThisTileWallPaper{\paperwidth}{\paperheight}{photo/filler1}\mbox{}\clearpage\fi
- \ifoddpage\InsertAd\fi
- }{}
-}
-
-
-\newcommand{\SpreadWallPaperLeft}[1]{%
- \sbox0{\includegraphics{#1}}%
- \AddToShipoutPicture*{\put(\LenToUnit{\wpXoffset},\LenToUnit{\wpYoffset}){%
- \parbox[b][\paperheight]{\paperwidth}{%
- \vfill
- \centering
- \includegraphics[width=\paperwidth,height=\paperheight,clip,trim=0 0 {.5\wd0} 0]{#1}%
- \vfill
- }}}
-% \iftoggle{clearpn}{\thispagestyle{empty}}{}
-}
-
-\newcommand{\SpreadWallPaperRight}[1]{%
- \sbox0{\includegraphics{#1}}%
- \AddToShipoutPicture*{\put(\LenToUnit{\wpXoffset},\LenToUnit{\wpYoffset}){%
- \parbox[b][\paperheight]{\paperwidth}{%
- \vfill
- \centering
- \includegraphics[width=\paperwidth,height=\paperheight,clip,trim={.5\wd0} 0 0 0]{#1}%
- \vfill
- }}}
- \iftoggle{clearpn}{\thispagestyle{empty}}{}
- \iftoggle{inlinecitations}{%
- \ifdefempty{\@photocredittext}{no}{%
- \begin{tikzpicture}[overlay,remember picture]
- \node[fill=white,fill opacity=.8,text opacity=1,font=\relsize{-1}\sffamily\itshape,
- anchor=north east,xshift=-.5in,yshift=-.5in]
- at (current page.north east)
- {Photo courtesy \@photocredittext\ifdefempty{\@photolicensetext}{}{\@photolicensetext}.};
- \end{tikzpicture}
- }
- }{}
-
-}
-
-\newcommand{\landscapedphoto}[2][]{%
- \parsephotocitation{#1}
- \AddToShipoutPicture*{\put(\LenToUnit{\wpXoffset},\LenToUnit{\wpYoffset}){%
- \parbox[b][\paperheight]{\paperwidth}{%
- \vfill
- \centering
- \includegraphics[width=\paperheight,height=\paperwidth,angle=90]{#2}%
- \vfill
- }}}
- \iftoggle{inlinecitations}{%
- \ifdefempty{\@photocredittext}{}{%
- \begin{tikzpicture}%[overlay,remember picture]
- \node[fill=white,fill opacity=.8,text opacity=1,font=\relsize{-1}\sffamily\itshape,
- %anchor=north west,%xshift=.5in,yshift=-.5in
- ]
- %at (current page.north)
- {Photo courtesy \@photocredittext\ifdefempty{\@photolicensetext}{}{\@photolicensetext}.};
- \end{tikzpicture}
- }
- }{}
-}
-
-\newcommand{\twopagespreadphoto}[2][]{%
- \iftoggle{inlinecitations}{}{\parsephotocitation{#1}}%
- \iftoggle{print}{%
- \SpreadWallPaperLeft{#2}
- \afterpage{\iftoggle{inlinecitations}{\parsephotocitation{#1}}{}
- \SpreadWallPaperRight{#2}
- \mbox{}\clearpage}
- }{\afterpage{\iftoggle{inlinecitations}{\parsephotocitation{#1}}{}
- \begin{landscape}
- \thispagestyle{empty}
- \landscapedphoto[#1]{#2}\mbox{}\clearpage
- \end{landscape}
- }}
+ default/.style={author=, authorurl=, license=, licenseurl=},
+ author/.store in = \r@creditauthor,
+ authorurl/.store in = \r@authorurl,
+ license/.store in = \r@license,
+ licenseurl/.store in = \r@licenseurl,
+}
+
+% keys for photos
+\pgfkeys{
+ /photo/.is family, /photo,
+ default/.style={width=\linewidth, embed=inset,%
+ author=, authorurl=, license=, licenseurl=},
+ width/.store in = \@photowidth,
+ author/.store in = \p@creditauthor,
+ authorurl/.store in = \p@authorurl,
+ license/.store in = \p@license,
+ licenseurl/.store in = \p@licenseurl,
+ embed/.style = {embeds/#1/.get = \p@embed},
+ embeds/.cd,
+ inset/.initial = inset,
+ fullpage/.initial = fullpage,
+ twopagespread/.initial = twopagespread,
+}
+
+\def\@recipecredittext{}
+\def\@recipelicensetext{}
+\def\@photocredittext{}
+\def\@photolicensetext{}
+\def\citationtext{}
+
+\newcommand{\recipecredit}[2][]{%
+ \def\@recipecredittext{%
+ \ifblank{#1}{#2}{\href{#1}{#2}}}
+}
+\newcommand{\recipelicense}[2][]{%
+ \def\@recipelicensetext{, %
+ \ifblank{#1}{#2}{\href{#1}{#2}}}
+}
+\newcommand{\photocredit}[2][]{%
+ \def\@photocredittext{%
+ \ifblank{#1}{#2}{\href{#1}{#2}}}
+}
+\newcommand{\photolicense}[2][]{%
+ \def\@photolicensetext{, %
+ \ifblank{#1}{#2}{\href{#1}{#2}}}
+}
+
+\newcommand{\parserecipecitation}[1]{%
+ \def\r@creditauthor{}
+ \def\r@authorurl{}
+ \def\r@license{}
+ \def\r@licenseurl{}
+ \def\@recipecredittext{}
+ \def\@recipelicensetext{}
+ \pgfkeys{/recipe, default, #1}
+ \ifdefempty{\r@creditauthor}{}{%
+ \recipecredit[\ifdefempty{\r@authorurl}{}{\r@authorurl}]{\r@creditauthor}}
+ \ifdefempty{\r@license}{}{%
+ \recipelicense[\ifdefempty{\r@licenseurl}{}{\r@licenseurl}]{\r@license}}
+}
+
+\newcommand{\parsephotocitation}[1]{%
+ \def\p@creditauthor{}%
+ \def\p@authorurl{}%
+ \def\p@license{}%
+ \def\p@licenseurl{}%
+ \def\@photocredittext{}%
+ \def\@photolicensetext{}%
+ \pgfkeys{/photo, default, #1}%
+ \ifdefempty{\p@creditauthor}{}{%
+ \photocredit[\ifdefempty{\p@authorurl}{}{\p@authorurl}]{\p@creditauthor}}%
+ \ifdefempty{\p@license}{}{%
+ \photolicense[\ifdefempty{\p@licenseurl}{}{\p@licenseurl}]{\p@license}}%
+}
+
+\newcommand{\frontcoverphoto}[2][]{%
+ \parsephotocitation{#1}
+ \def\@frontcoverphoto{#2}
+}
+
+\newcommand{\inlinecitationalignment}{\raggedright}
+\newcommand{\checkinlinecitation}{%
+\iftoggle{inlinecitations}{%
+ \ifdefempty{\@recipecredittext}{}{%
+ \vspace{-\aftersecskip}
+ {\inlinecitationalignment\sffamily\relsize{-1}\itshape By \@recipecredittext\ifdefempty{\@recipelicensetext}{}{\@recipelicensetext}.\par}
+ \vspace{\aftersecskip}}
+}{}
+}
+
+\iftoggle{endcitations}{\makepagenote}{}
+\def\blfootnote{\xdef\@thefnmark{}\@footnotetext}
+\renewcommand{\notesname}{Recipe and Photo Sources}
+\newcommand{\xpagenote}[1]{%
+ \unskip\begingroup\protected@edef\x{\endgroup\noexpand\pagenote{#1}}%
+ \scantokens\expandafter{\x\relax}}
+\renewcommand*{\notenumintext}[1]{}
+\renewcommand*{\notenuminnotes}[1]{}
+\renewcommand{\prenoteinnotes}{\item }
+\renewcommand{\postnoteinnotes}{}
+
+% For Inserts.
+% \DeclareInserts{25}{ad1.jpg, ad2.jpg, ad3.jpg, ad4.jpg}
+% \InsertAd will cycle through ad1.jpg -> ad4.jpg everytime
+% it is called.
+% It'll be called after every 25 recipes.
+\newarray\Inserts
+\newcounter{advertTotal}
+\newcounter{advertIdx}
+\newcounter{recipeIdx}
+\newcommand{\advertTotal}{\theadvertTotal}
+\newcommand{\DeclareInserts}[2]{%
+ \def\recipeAdCount{#1}
+ \renewcommand*{\do}[1]{%
+ \stepcounter{advertTotal}%
+ \Inserts(\arabic{advertTotal})={##1}
+ }
+ \docsvlist{#2}
+}
+\newcommand{\InsertAd}{%
+ \ifnumequal{\theadvertTotal}{0}{}{%
+ \thispagestyle{empty}
+ \stepcounter{advertIdx}%
+ \pgfmathparse{mod(\theadvertIdx - 1,\advertTotal) + 1}
+ \pgfmathtruncatemacro{\adIdx}{\pgfmathresult}%
+ \checkInserts(\adIdx)
+ \ThisTileWallPaper{\paperwidth}{\paperheight}{\cachedata}
+ \mbox{}\clearpage
+ }
+}
+
+
+%%% Hook for cover page etc
+% TODO: change this to use key options
+\newcommand{\makecover}[1][]{%
+\begin{titlingpage}
+\ifdefempty{\@frontcoverphoto}{%
+ \maketitle
+}{%
+ \ThisTileWallPaper{\paperwidth}{\paperheight}{\@frontcoverphoto}
+ \mbox{}\clearpage
+}
+\thispagestyle{empty}
+\ifstrequal{#1}{copyrightpage}{\clearpage\makecrpage}{}
+\end{titlingpage}%
+}
+
+\newcommand{\makecrpage}{%
+%\begin{titlingpage}
+\mbox{}
+\vfill
+\relsize{-1}
+Recipe compilation by \theauthor.
+\ifdefempty{\@frontcoverphoto}{}{%
+ \ifdefempty{\@photocredittext}{}{%
+ Front cover photo courtesy \@photocredittext\ifdefempty{\@photolicensetext}{}{\@photolicensetext}.
+ }
+}
+\\
+\\
+This book is available under a \href{http://creativecommons.org/licenses/by-sa/3.0/}{Creative Commons Attribution-ShareAlike License}.\\
+Generated using \href{http://recipezeal.com}{Recipe Zeal} and \LaTeX.\\
+Book design and themes by \href{http://liantze.penguinattack.org}{Lian Tze Lim}.
+%\end{titlingpage}%
+}
+
+\patchcommand{\mainmatter}{}{%
+%%% turn off sectional numberings
+\setcounter{secnumdepth}{-1}
+\setcounter{tocdepth}{1}
+%% set end notes to be an itemised list
+\addtonotes{\protect\begin{itemize}[label=\itemmarker,nosep,leftmargin=*]}
+}
+
+%%% Overview as a bit of a chapter introduction
+\newenvironment{overview}[1]{%
+\chapter*{#1}
+\providelength{\oldparskip}
+\setlength{\oldparskip}{\parskip}
+\setlength{\parskip}{\onelineskip}
+}{%
+\setlength{\parskip}{\oldparskip}
+\clearpage
+}
+
+%%%% TODO cooking time, preparation time, portion... "atomic" fields
+\newcommand{\ovenstyle}{}
+\newcommand{\oven}[1]{\makebox{\ovenstyle Preheat oven to #1}\par}
+
+\newcommand{\maintextcolor}{black}
+\newcommand{\primarycolor}{blue}
+\newcommand{\secondarycolor}{blue!80}
+\newcommand{\tertiarycolor}{blue!60}
+\newcommand{\primarycolorcomplement}{white}
+\newcommand{\secondarycolorcomplement}{white}
+\newcommand{\tertiarycolorcomplement}{white}
+\newcommand{\darkhighlight}{red!80!black}
+\newcommand{\brighthighlight}{red}
+\newcommand{\highlightcolor}{\darkhighlight}
+\newcommand{\externallinkcolor}{SteelBlue}
+
+\newcommand{\scriptdefault}{pzc}
+\newcommand{\scriptfamily}{\fontfamily{\scriptdefault}\selectfont}
+
+\newcommand{\recipecolor}{\highlightcolor}
+\newcommand{\recipefamily}{\sffamily}
+\newcommand{\recipesize}{\LARGE}
+\newcommand{\recipestyle}{\bfseries}
+\newcommand{\recipefont}{\recipefamily\recipesize\color{\recipecolor}\recipestyle}
+
+\newcommand{\headingcolor}{\primarycolor}
+\newcommand{\headingfamily}{\sffamily}
+\newcommand{\headingsize}{\large}
+\newcommand{\headingstyle}{\itshape}
+\newcommand{\headingfont}{\headingfamily\headingsize\color{\headingcolor}\headingstyle}
+
+\renewcommand{\chaptitlefont}{\recipefamily\color{\recipecolor}\bfseries\HUGE\centering}
+\setsecheadstyle{\recipefont}
+\setsubsecheadstyle{\headingfont}
+
+\newcommand{\headingmarker}{\textbullet}
+\newcommand{\itemmarker}{\textbullet}
+\newcommand{\enumeratemarker}[1]{#1.}
+\newcommand{\inlinelistmarker}{\makebox[1.5em][c]{\textbullet}}
+
+\newcommand{\equipmentstyle}{leftmargin=*}
+\newcommand{\ingredientsstyle}{label=\textbullet,leftmargin=*}
+\newcommand{\preparationstyle}{label=\textbullet,leftmargin=*}
+\newcommand{\substitutionstyle}{label=\textbullet,leftmargin=*}
+\newcommand{\instructionsstyle}{label={\arabic*. },leftmargin=*}
+
+
+%%%% Basic structures, redefine as needed in theme files using titlesec and enumitem.
+\newcommand{\recipecategory}[1]{%
+\clearforchapter
+\formatcategorypage{#1}
+\phantomsection\addcontentsline{toc}{chapter}{#1}
+\clearpage
+}
+
+\newcommand{\formatcategorypage}[1]{%
+\thispagestyle{empty}
+\vspace*{\stretch{1}}
+\begin{center}
+\fontsize{48pt}{50pt}\headingfamily\bfseries\selectfont\color{\recipecolor}#1
+\end{center}
+\vspace*{\stretch{2}}
+}
+
+\newenvironment{recipe}[2][]{%
+ \parserecipecitation{#1}
+ \clearpage%
+ \color{\maintextcolor}%
+ \section{#2}
+ \checkinlinecitation
+}{}
+
+\renewcommand{\memsecinfo}[5]{%
+ \ifstrequal{#1}{section}{\renewcommand{\recipetitle}{#3}}{}
+}
+
+\AtBeginEnvironment{recipe}{%
+ \def\@recipecredittext{}
+ \def\@recipelicensetext{}
+ \def\@photocredittext{}
+ \def\@photolicensetext{}
+ \def\citationtext{}
+}
+
+\AtEndEnvironment{recipe}{%
+ \ifdefempty{\@recipecredittext}{}{\apptocmd{\citationtext}{By \@recipecredittext\ifdefempty{\@recipelicensetext}{}{\@recipelicensetext}.}{}{}}
+ \ifdefempty{\@photocredittext}{}{\apptocmd{\citationtext}{ Photo courtesy \@photocredittext\ifdefempty{\@photolicensetext}{}{\@photolicensetext}.}{}{}}
+ \iftoggle{footercitations}{%
+ \ifdefempty{\citationtext}{}{\blfootnote{\citationtext}}
+ }{}
+ \iftoggle{endcitations}{%
+ \ifdefempty{\citationtext}{}{\leavevmode\xpagenote{\textcolor{\darkhighlight}{\sffamily\bfseries\recipetitle}\space\textit{(p.\thepage)}\enspace\citationtext}}
+ }{}
+}
+
+\AfterEndEnvironment{recipe}{%
+ % Check if an ad should be inserted
+ \ifdef{\recipeAdCount}{
+ \ifnumgreater{\theadvertTotal}{0}{
+ \stepcounter{recipeIdx}
+ \pgfmathparse{mod(\therecipeIdx,\recipeAdCount)}
+ \pgfmathtruncatemacro{\recIdx}{\pgfmathresult}
+ \ifnumequal{\recIdx}{0}{\afterpage{\InsertAd}}{}
+ }{}
+ }{}
+}
+
+\newcommand{\insetphoto}[2][width=.4\textwidth]{%
+ \parsephotocitation{#1}
+ \includegraphics[width=\@photowidth]{#2}\par
+}
+
+\newcommand{\fullpagephoto}[2][]{%
+ \iftoggle{inlinecitations}{}{\parsephotocitation{#1}}
+ \afterpage{\iftoggle{inlinecitations}{\parsephotocitation{#1}}{}%
+ \ThisTileWallPaper{\paperwidth}{\paperheight}{#2}
+ \iftoggle{clearpn}{\thispagestyle{empty}}{}
+ \iftoggle{inlinecitations}{%
+ \ifdefempty{\@photocredittext}{}{%
+ \begin{tikzpicture}[overlay,remember picture]
+ \node[fill=white,fill opacity=.8,text opacity=1,font=\relsize{-1}\sffamily\itshape,
+ anchor=north east,xshift=-.5in,yshift=-.5in]
+ at (current page.north east)
+ {Photo courtesy \@photocredittext\ifdefempty{\@photolicensetext}{}{\@photolicensetext}.};
+ \end{tikzpicture}
+ }
+ }{}
+ \mbox{}\clearpage}
+}
+
+\newcommand{\checkfiller}{%
+ \iftoggle{print}{%
+ \clearpage
+ \checkoddpage\strictpagecheck
+% \ifoddpage\ThisTileWallPaper{\paperwidth}{\paperheight}{photo/filler1}\mbox{}\clearpage\fi
+ \ifoddpage\InsertAd\fi
+ }{}
+}
+
+
+\newcommand{\SpreadWallPaperLeft}[1]{%
+ \sbox0{\includegraphics{#1}}%
+ \AddToShipoutPicture*{\put(\LenToUnit{\wpXoffset},\LenToUnit{\wpYoffset}){%
+ \parbox[b][\paperheight]{\paperwidth}{%
+ \vfill
+ \centering
+ \includegraphics[width=\paperwidth,height=\paperheight,clip,trim=0 0 {.5\wd0} 0]{#1}%
+ \vfill
+ }}}
+% \iftoggle{clearpn}{\thispagestyle{empty}}{}
+}
+
+\newcommand{\SpreadWallPaperRight}[1]{%
+ \sbox0{\includegraphics{#1}}%
+ \AddToShipoutPicture*{\put(\LenToUnit{\wpXoffset},\LenToUnit{\wpYoffset}){%
+ \parbox[b][\paperheight]{\paperwidth}{%
+ \vfill
+ \centering
+ \includegraphics[width=\paperwidth,height=\paperheight,clip,trim={.5\wd0} 0 0 0]{#1}%
+ \vfill
+ }}}
+ \iftoggle{clearpn}{\thispagestyle{empty}}{}
+ \iftoggle{inlinecitations}{%
+ \ifdefempty{\@photocredittext}{no}{%
+ \begin{tikzpicture}[overlay,remember picture]
+ \node[fill=white,fill opacity=.8,text opacity=1,font=\relsize{-1}\sffamily\itshape,
+ anchor=north east,xshift=-.5in,yshift=-.5in]
+ at (current page.north east)
+ {Photo courtesy \@photocredittext\ifdefempty{\@photolicensetext}{}{\@photolicensetext}.};
+ \end{tikzpicture}
+ }
+ }{}
+
+}
+
+\newcommand{\landscapedphoto}[2][]{%
+ \parsephotocitation{#1}
+ \AddToShipoutPicture*{\put(\LenToUnit{\wpXoffset},\LenToUnit{\wpYoffset}){%
+ \parbox[b][\paperheight]{\paperwidth}{%
+ \vfill
+ \centering
+ \includegraphics[width=\paperheight,height=\paperwidth,angle=90]{#2}%
+ \vfill
+ }}}
+ \iftoggle{inlinecitations}{%
+ \ifdefempty{\@photocredittext}{}{%
+ \begin{tikzpicture}%[overlay,remember picture]
+ \node[fill=white,fill opacity=.8,text opacity=1,font=\relsize{-1}\sffamily\itshape,
+ %anchor=north west,%xshift=.5in,yshift=-.5in
+ ]
+ %at (current page.north)
+ {Photo courtesy \@photocredittext\ifdefempty{\@photolicensetext}{}{\@photolicensetext}.};
+ \end{tikzpicture}
+ }
+ }{}
+}
+
+\newcommand{\twopagespreadphoto}[2][]{%
+ \iftoggle{inlinecitations}{}{\parsephotocitation{#1}}%
+ \iftoggle{print}{%
+ \SpreadWallPaperLeft{#2}
+ \afterpage{\iftoggle{inlinecitations}{\parsephotocitation{#1}}{}
+ \SpreadWallPaperRight{#2}
+ \mbox{}\clearpage}
+ }{\afterpage{\iftoggle{inlinecitations}{\parsephotocitation{#1}}{}
+ \begin{landscape}
+ \thispagestyle{empty}
+ \landscapedphoto[#1]{#2}\mbox{}\clearpage
+ \end{landscape}
+ }}
+}
+
+\newcommand{\photo}[2][]{%
+\parsephotocitation{#1}
+\ifdefstring{\p@embed}{inset}{\insetphoto[#1]{#2}}{}
+\ifdefstring{\p@embed}{fullpage}{\fullpagephoto[#1]{#2}}{}
+\ifdefstring{\p@embed}{twopagespread}{\twopagespreadphoto[#1]{#2}}{}
}
xsl/latex.xsl
+-->
<xsl:template match="p">
- <xsl:apply-templates modes="escape" />
+ <xsl:apply-templates mode="escape" />
<xsl:text>&#xa;&#xa;</xsl:text>
</xsl:template>
<xsl:template match="photo[@use='overview']" mode="book" />
+<!--
<xsl:template match="photo[@use='recipe-inset']" mode="recipe">
<xsl:apply-templates select="uri" mode="recipe-inset" />
<xsl:template match="photo[@use='two-page']" mode="recipe">
<xsl:apply-templates select="uri" mode="two-page" />
+</xsl:template>
+-->
+<xsl:template match="photo" mode="recipe">
+ <xsl:text>\photo[embed=</xsl:text>
+ <xsl:choose>
+ <xsl:when test="@use='recipe-inset'">
+ <xsl:text>inset</xsl:text>
+ </xsl:when>
+ <xsl:when test="@use='one-page'">
+ <xsl:text>fullpage</xsl:text>
+ </xsl:when>
+ <xsl:when test="@use='two-page'">
+ <xsl:text>twopagespread</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ <xsl:text>,</xsl:text>
+ <xsl:apply-templates match="citation[descendant::*]" />
+ <xsl:text>]{</xsl:text>
+ <xsl:apply-templates select="uri" mode="escape"/>
+ <xsl:text>}&#xa;</xsl:text>
</xsl:template>
<xsl:template match="uri" mode="book-overview">
<xsl:text>\begin{wrapfigure}{l}{.45\textwidth}&#xa;</xsl:text>
- <xsl:text>\insetphoto</xsl:text>
+ <xsl:text>\insetphoto[</xsl:text>
<xsl:apply-templates select="following-sibling::citation[descendant::*]" />
- <xsl:text>{</xsl:text>
+ <xsl:text>]{</xsl:text>
<xsl:apply-templates />
<xsl:text>}&#xa;</xsl:text>
<xsl:text>\end{wrapfigure}&#xa;&#xa;</xsl:text>
</xsl:template>
<xsl:template match="uri" mode="book">
<xsl:if test="$book-front-cover">
- <xsl:text>\frontcoverphoto</xsl:text>
+ <xsl:text>\frontcoverphoto[</xsl:text>
<xsl:apply-templates select="following-sibling::citation[descendant::*]" />
- <xsl:text>{</xsl:text>
+ <xsl:text>]{</xsl:text>
<xsl:apply-templates />
<xsl:text>}&#xa;</xsl:text>
</xsl:if>
</xsl:template>
+<!--
<xsl:template match="uri" mode="recipe-inset">
<xsl:text>\insetphoto</xsl:text>
<xsl:text>}&#xa;</xsl:text>
</xsl:template>
-
+-->
<xsl:template match="citation[descendant::*]">
- <xsl:text>[</xsl:text>
+<!-- <xsl:text>[</xsl:text>-->
<xsl:if test="author">
<xsl:text>author={</xsl:text>
<xsl:text>},</xsl:text>
</xsl:if>
- <xsl:text>]</xsl:text>
+<!-- <xsl:text>]</xsl:text> -->
</xsl:template>

\photo[embed=…] replaces \insetphoto, \fullpagephoto, \twopagespreadphoto.

Author liantze <email>
Date 2013-03-10 00:25:37 GMT+0800
Commit aee5457adb989e11827c5b34a31d7f0269310113
Parent 1cff4d2
Delta 432 lines added, 404 lines removed, 28-line increase