curry-cookbook/xcookybooky.sty

929 lines
27 KiB
TeX

%%
%% This is file `xcookybooky.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% xcookybooky.dtx (with options: `package')
%%
%% This is a generated file.
%% Copyright (C) 2015 by Sven Harder
%%
%% This file may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either
%% version 1.3 of this license or (at your option) any later
%% version. The latest version of this license is in:
%%
%% http://www.latex-project.org/lppl.txt
%%
%% and version 1.3 or later is part of all distributions of
%% LaTeX version 2005/12/01 or later.
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{xcookybooky}
[2015/03/03 v1.5 Easy typesetting (potentially long) recipes with pictures]
\newif\ifHandwrittenFont@required
\HandwrittenFont@requiredfalse
\DeclareOption{handwritten}
{% displays the recipename in a handwitten font
\HandwrittenFont@requiredtrue
\AtEndOfPackage{
\setRecipeSizes{recipename = \fontsize{25pt}{30pt}}
\setRecipenameFont{fjd}{T1}{m}{n}
}
}
\DeclareOption{nowarnings}
{% tries to eliminate nasty warnings
\AtEndOfPackage{
\def\WF@conflict{}
%\def\@fancywarning#1{}
}
}
\DeclareOption{myconfig}
{% load personal configuration
\AtEndOfPackage{
\InputIfFileExists{xcookybooky.cfg}
{\PackageInfo{xcookybooky}{inputting 'xcookybooky.cfg'}}
{\PackageWarning{xcookybooky}{cannot find the configuration file 'xcookybooky.cfg'}}
}
}
\ProcessOptions\relax
\RequirePackage{tikz} % for creating the lines for the hint
\RequirePackage{graphicx}
\RequirePackage{xcolor}
\RequirePackage[clock, misc, weather]{ifsym} % Symbol package e.g. \Interval, \Wecker etc
\RequirePackage{cookingsymbols} % Cookings symbols e.g. \Oven, \Dish etc
\ifHandwrittenFont@required
\RequirePackage{emerald} % Handwritten Fonts
\fi
\RequirePackage{wrapfig} % To wrap the tabular with the ingredients
\RequirePackage{iflang} % detecting the language
\RequirePackage{ifthen}
\RequirePackage{xkeyval}
\RequirePackage{lettrine} % numbering the preparation steps
\RequirePackage{fancyhdr}
\RequirePackage{units}
\RequirePackage{eso-pic} % for background pictures
\RequirePackage{picture} % for modfifying the position of the bg pictures
\RequirePackage{tabulary} % line breaks in tabular
\RequirePackage{framed} % frame for the introduction
\setlength{\parindent}{0cm}
\setlength{\parskip}{2ex plus 0.5ex}
\setlength{\textwidth}{15.5cm}
\setlength{\textheight}{24.0cm}
\setlength{\topmargin}{-0.8cm}
\setlength{\headheight}{14pt} %0cm
\setlength{\headsep}{1cm}
\setlength{\topskip}{0cm}
\setlength{\footskip}{1.4cm}
\setlength{\evensidemargin}{-0.5cm}
\setlength{\oddsidemargin}{0.5cm}
\setlength{\voffset}{0cm}
\setlength{\hoffset}{0cm}
\setcounter{secnumdepth}{2} % subsubsections not numbered
\setcounter{tocdepth}{3} % subsubsections in the .toc file
\newcommand*{\recipesection}[2][]
{%
\subsubsection[#1]{#2}
}
\providecolor{DarkGreen}{rgb}{0,.5,0}
\providecolor{DarkBlue}{rgb}{0, 0, 0.7}
\providecolor{DarkGray}{rgb}{0.23, 0.23, 0.23}
\define@key{colorManagement}{recipename}[DarkGreen]{\def\xcb@color@recipename{#1}}
\define@key{colorManagement}{intro}[black]{\def\xcb@color@intro{#1}}
\define@key{colorManagement}{ing}[DarkGray]{\def\xcb@color@ing{#1}}
\define@key{colorManagement}{inghead}[DarkGray]{\def\xcb@color@inghead{#1}}
\define@key{colorManagement}{prep}[black]{\def\xcb@color@prep{#1}}
\define@key{colorManagement}{prephead}[black]{\def\xcb@color@prephead{#1}}
\define@key{colorManagement}{suggestion}[black]{\def\xcb@color@suggestion{#1}}
\define@key{colorManagement}{suggestionhead}[black]{\def\xcb@color@suggestionhead{#1}}
\define@key{colorManagement}{separationgraph}[black]{\def\xcb@color@separationgraph{#1}}
\define@key{colorManagement}{hint}[black]{\def\xcb@color@hint{#1}}
\define@key{colorManagement}{hinthead}[red]{\def\xcb@color@hinthead{#1}}
\define@key{colorManagement}{hintline}[red]{\def\xcb@color@hintline{#1}}
\define@key{colorManagement}{numeration}[red]{\def\xcb@color@numeration{#1}}
\savekeys{colorManagement}
{%
recipename, % color of recipename
intro, % color of introduction (text)
ing, % color of ingredients (text)
inghead, % color of headline of ingredients
prep, % color of preparation (text)
prephead, % color of headline of preparation
suggestion, % color of suggestions (text)
suggestionhead, % color of headline of suggestion
separationgraph, % color of graphical separator
hint, % color of hint (text)
hinthead, % color of headline of hint
hintline, % color of lines of hint
numeration % color of numeration (preparation)
}
\newcommand*{\setRecipeColors}[1]
{%
\setkeys{colorManagement}{#1}
}
\setRecipeColors
{% initialisation
recipename,
intro,
ing,
inghead,
prep,
prephead,
suggestion,
suggestionhead,
separationgraph,
hint,
hinthead,
hintline,
numeration
}
\define@key{sizeManagement}{recipename}[\fontsize{25pt}{30pt}]{\def\xcb@fontsize@recipename{#1}}
\define@key{sizeManagement}{intro}[\normalsize]{\def\xcb@fontsize@intro{#1}}
\define@key{sizeManagement}{ing}[\normalsize]{\def\xcb@fontsize@ing{#1}}
\define@key{sizeManagement}{inghead}[\normalsize]{\def\xcb@fontsize@inghead{#1}}
\define@key{sizeManagement}{prep}[\normalsize]{\def\xcb@fontsize@prep{#1}}
\define@key{sizeManagement}{prephead}[\normalsize]{\def\xcb@fontsize@prephead{#1}}
\define@key{sizeManagement}{suggestion}[\normalsize]{\def\xcb@fontsize@suggestion{#1}}
\define@key{sizeManagement}{hint}[\normalsize]{\def\xcb@fontsize@hint{#1}}
\define@key{sizeManagement}{hinthead}[\Large]{\def\xcb@fontsize@hinthead{#1}}
\savekeys{sizeManagement}
{
recipename, % font size of recipe name
intro, % font size of introduction (text)
ing, % font size of ingredients (text)
inghead, % font size of headline of ingredients
prep, % font size of preparation (text)
prephead, % font size of headline of preparation
suggestion, % font size of suggestion (text)
hint, % font size of hint (text)
hinthead % font size of headline of hint
}
\newcommand*{\setRecipeSizes}[1]
{%
\setkeys{sizeManagement}{#1}
}
\setRecipeSizes
{% initialisation
recipename,
intro,
ing,
inghead,
prep,
prephead,
suggestion,
hint,
hinthead
}
%% Handwritten fonts: hlce, pbsi, hlcw, fjd, fau
%% Other fonts: fwb
\newcommand*{\setRecipenameFont}[4]
{% sets the font for the recipename
\def\xcb@font@recipename
{
\fontfamily{#1}
\fontencoding{#2}
\fontseries{#3} %x1
\fontshape{#4}
\xcb@fontsize@recipename
\selectfont
}
}
\setRecipenameFont{\familydefault}{\encodingdefault}{b}{n}
\newcounter{step}
\setcounter{step}{0}
\renewcommand{\LettrineFontHook}
{%
\color{\xcb@color@numeration}
}
\define@key{headlines}{inghead}[Ingredients]{
\def\xcb@name@inghead{\textcolor{\xcb@color@inghead}{\textbf{\xcb@fontsize@inghead{#1}}\ }}
}
\define@key{headlines}{prephead}[Preparation]{
\def\xcb@name@prephead{\textcolor{\xcb@color@prephead}{\textbf{\xcb@fontsize@prephead{#1}}\ }}
}
\define@key{headlines}{hinthead}[Hint]{
\def\xcb@name@hinthead{\textcolor{\xcb@color@hinthead}{\xcb@fontsize@hinthead{#1}}}
}
\define@key{headlines}{continuationhead}[Continuation]{\def\xcb@name@continuationhead{#1}}
\define@key{headlines}{continuationfoot}[Continuation on next page]{\def\xcb@name@continuationfoot{#1}}
\define@key{headlines}{preparationtime}[\fontsize{14.5pt}{10pt}\Gloves]{\def\xcb@name@preparationtime{#1}}
\define@key{headlines}{bakingtime}[\fontsize{14.5pt}{10pt}\Oven]{\def\xcb@name@bakingtime{#1}}
\define@key{headlines}{bakingtemperature}[\Thermo{4}]{\def\xcb@name@bakingtemperature{#1}}
\define@key{headlines}{portion}[\fontsize{14.5pt}{10pt}\Dish]{\def\xcb@name@portion{#1}}
\define@key{headlines}{portionvalue}[Portions]{\def\xcb@name@portionvalue{#1}}
\define@key{headlines}{calory}[Calorific value]{\def\xcb@name@calory{#1}}
\define@key{headlines}{source}[\PaperPortrait]{\def\xcb@name@source{#1}}
\savekeys{headlines}
{
inghead,
prephead,
hinthead,
continuationhead,
continuationfoot,
preparationtime,
bakingtime,
bakingtemperature,
portion,
portionvalue,
calory,
source
}
\newcommand*{\setHeadlines}[1]
{%
\setkeys{headlines}{#1}
}
\setHeadlines
{% initialisation
inghead,
prephead,
hinthead,
continuationhead,
continuationfoot,
preparationtime,
bakingtime,
bakingtemperature,
portion,
portionvalue,
calory,
source
}
\newcommand{\IfLangGerman}[2]{%
\IfLanguageName{ngerman}{#1}{%
\IfLanguageName{naustrian}{#1}{%
\IfLanguageName{german}{#1}{%
\IfLanguageName{austrian}{#1}{#2}}}}%
}
\newcommand{\IfLangEnglish}[2]{%
\IfLanguageName{american}{#1}{%
\IfLanguageName{australian}{#1}{%
\IfLanguageName{british}{#1}{%
\IfLanguageName{canadian}{#1}{%
\IfLanguageName{english}{#1}{%
\IfLanguageName{newzealand}{#1}{%
\IfLanguageName{UKenglish}{#1}{%
\IfLanguageName{USenglish}{#1}{#2}}}}}}}}%
}
\newcommand{\IfLangFrench}[2]{%
\IfLanguageName{french}{#1}{%
\IfLanguageName{frenchb}{#1}{%
\IfLanguageName{francais}{#1}{%
\IfLanguageName{acadian}{#1}{%
\IfLanguageName{canadien}{#1}{#2}}}}}%
}
\newcommand{\IfLangPortuges}[2]{%
\IfLanguageName{brazil}{#1}{%
\IfLanguageName{brazilian}{#1}{%
\IfLanguageName{portuges}{#1}{%
\IfLanguageName{portuguese}{#1}{#2}}}}%
}
\IfLangGerman
{% German
\setHeadlines
{% translation
inghead = Zutaten,
prephead = Zubereitung,
hinthead = Tipp,
continuationhead = Fortsetzung,
continuationfoot = Fortsetzung auf n\"achster Seite,
portionvalue = Personen,
calory = Brennwert
}
}{}
\IfLangEnglish
{% English
\setHeadlines
{% translation
inghead = Ingredients,
prephead = Preparation,
hinthead = Hint,
continuationhead = Continuation,
continuationfoot = Continuation on next page,
portionvalue = Portions,
calory = Calorific value
}
}{}
\IfLangFrench
{% French
\setHeadlines
{% translation
inghead = Ingr\'edients,
prephead = Pr\'eparation,
hinthead = Tuyau,
continuationhead = Suite,
continuationfoot = Suite page suivante,
portionvalue = Portions,
calory = Valeur calorifique
}
}{}
\IfLanguagePatterns{spanish}
{% Spanish
\setHeadlines
{% translation
inghead = Ingredientes,
prephead = Preparaci\'on,
hinthead = Soplo,
continuationhead = Continuaci\'on,
continuationfoot = Contin\'ua en la p\'agina siguiente,
portionvalue = Porci\'on,
calory = Poder calor\'{\i}fico
}
}{}
\IfLangPortuges
{% Portuguese and Brazil
\setHeadlines
{% translation
inghead = Ingredientes,
prephead = Prepara\c{c}\~{a}o,
hinthead = Dica,
continuationhead = Continua\c{c}\~{a}o,
continuationfoot = Continua na pr\'{o}xima p\'{a}gina,
portionvalue = Por\c{c}\~{o}es,
calory = Valor Cal\'{o}rico
}
}{}
\define@key{recipelengths}{pictureheight}[6cm]{\def\xcb@pictureheight{#1}}
\define@key{recipelengths}{bigpicturewidth}[0.60\textwidth]{\def\xcb@bigpicturewidth{#1}}
\define@key{recipelengths}{smallpicturewidth}[0.35\textwidth]{\def\xcb@smallpicturewidth{#1}}
\define@key{recipelengths}{introductionwidth}[\textwidth]{\def\xcb@introductionwidth{#1}}
\define@key{recipelengths}{preparationwidth}[0.60\textwidth]{\def\xcb@preparationwidth{#1}}
\define@key{recipelengths}{ingredientswidth}[0.35\textwidth]{\def\xcb@ingredientswidth{#1}}
\savekeys{recipelengths}
{
pictureheight, % height of both pictures
bigpicturewidth, % width of the bigger picture
smallpicturewidth, % width of the smaller picture
introductionwidth, % width of introduction
preparationwidth, % width of preparation
ingredientswidth % width of ingredients
}
\newcommand*{\setRecipeLengths}[1]
{%
\setkeys{recipelengths}{#1}
}
\setRecipeLengths
{% initialisation
pictureheight,
bigpicturewidth,
smallpicturewidth,
introductionwidth,
preparationwidth,
ingredientswidth
}
%% MAIN COMMANDS
\newcommand{\introduction}[1]
{% Introduction before the preparation and ingredients
\def\xcb@introduction
{%
\color{\xcb@color@intro}
\begin{framed}
\xcb@fontsize@intro#1
\end{framed}
}
}
\newcommand*{\graph}[1]
{%
\setkeys{picture}{#1}
}
\newcommand*{\ingredients}[2][\empty]
{% The optional argument contains the number of lines
\def\xcb@ingredientslines{#1}
\def\xcb@ingredients
{%
\xcb@name@inghead
\\[1em]
{\xcb@fontsize@ing\color{\xcb@color@ing}
\begin{tabulary}{\xcb@ingredientswidth}{rL}
#2
\end{tabulary}}
}
}
\newcommand{\preparation}[1]
{%
\def\xcb@preparation
{%
\xcb@name@prephead
%\\[4pt]
\xcb@fontsize@prep\color{\xcb@color@prep}#1
}
\setcounter{step}{0}
}
\newcommand{\suggestion}[2][]
{%
\g@addto@macro\xcb@suggestion
{%
\xcb@separationgraph{\xcb@color@separationgraph}
\ifthenelse{\equal{#1}{}}
{%
{\color{\xcb@color@suggestion}#2}
}
{%
\textbf{{\color{\xcb@color@suggestionhead}#1}}
{\color{\xcb@color@suggestion}#2}
}
}
}
\newcommand{\hint}[1]
{%
\def\xcb@hint
{%
\pagebreak[1] % begin here a new page, if the space is small
\begin{tikzpicture}[line width = 1.5pt, \xcb@color@hintline]
\useasboundingbox (0,0) -- ++(right:3.5cm) -- ++(up:3mm) -- ++(left:3.5cm) -- cycle;
\draw (-3mm, 0mm) -- ++(right:3.5cm);
\draw (0, 3mm) -- ++(down:2.4cm);
\end{tikzpicture}
\nopagebreak
\begingroup % a group for the hint
\leftskip1em
\xcb@name@hinthead
\nopagebreak
\itshape{\color{\xcb@color@hint}\xcb@fontsize@hint{#1}}
\par
\endgroup
}
}
%% SUPPORTING COMMANDS
\newcommand{\step}
{%
\stepcounter{step}%
\lettrine
[%
lines=2,
lhang=0, % space into margin, value between 0 and 1
loversize=0.15, % enlarges the height of the capital
slope=0em,
findent=1em, % gap between capital and intended text
nindent=0em % shifts all intended lines, begining with the second line
]{\thestep}{}%
}
\newcommand*{\portion}[2][\xcb@name@portionvalue]
{%
\unit[#2]{#1}
}
\define@key{bakingtemperature}{fanoven}[]{\def\xcb@bakingtemperature@fanoven{#1}}
\define@key{bakingtemperature}{topbottomheat}[]{\def\xcb@bakingtemperature@topbottomheat{#1}}
\define@key{bakingtemperature}{topheat}[]{\def\xcb@bakingtemperature@topheat{#1}}
\define@key{bakingtemperature}{bottomheat}[]{\def\xcb@bakingtemperature@bottomheat{#1}}
\define@key{bakingtemperature}{gasstove}[]{\def\xcb@bakingtemperature@gasstove{#1}}
\newboolean{xcb@bakingtemperature@firstentry}
\newcommand*{\bakingtemperature}[1]
{%
\setboolean{xcb@bakingtemperature@firstentry}{true}%
\setkeys{bakingtemperature}{fanoven, topbottomheat, topheat, bottomheat, gasstove}%
\setkeys{bakingtemperature}{#1}%
\ifthenelse{\equal{\xcb@bakingtemperature@fanoven}{}}%
{}%
{%
\xcb@bakingtemperature@fanoven \ {\fontsize{14.5pt}{10pt}\Fanoven}%
\setboolean{xcb@bakingtemperature@firstentry}{false}%
}%
\ifthenelse{\equal{\xcb@bakingtemperature@topbottomheat}{}}%
{}%
{%
\ifthenelse{\boolean{xcb@bakingtemperature@firstentry}}{\setboolean{xcb@bakingtemperature@firstentry}{false}}{, }%
\xcb@bakingtemperature@topbottomheat \ {\fontsize{14.5pt}{10pt}\Topbottomheat}%
}%
\ifthenelse{\equal{\xcb@bakingtemperature@topheat}{}}%
{}%
{%
\ifthenelse{\boolean{xcb@bakingtemperature@firstentry}}{\setboolean{xcb@bakingtemperature@firstentry}{false}}{, }%
\xcb@bakingtemperature@topheat \ {\fontsize{14.5pt}{10pt}\Topheat}%
}%
\ifthenelse{\equal{\xcb@bakingtemperature@bottomheat}{}}%
{}%
{%
\ifthenelse{\boolean{xcb@bakingtemperature@firstentry}}{\setboolean{xcb@bakingtemperature@firstentry}{false}}{, }%
\xcb@bakingtemperature@bottomheat \ {\fontsize{14.5pt}{10pt}\Bottomheat}%
}%
\ifthenelse{\equal{\xcb@bakingtemperature@gasstove}{}}%
{}%
{%
\ifthenelse{\boolean{xcb@bakingtemperature@firstentry}}{\setboolean{xcb@bakingtemperature@firstentry}{false}}{, }%
\xcb@bakingtemperature@gasstove \ {\fontsize{14.5pt}{10pt}\Gasstove}%
}%
}
%% INTERNAL COMMANDS
\newcommand{\xcb@cmd@recipeoverview}
{
\begin{tabular}{rl}
\ifthenelse{\equal{\xcb@preparationtime}{}}
{% not set => not shown
}
{
\xcb@name@preparationtime & \xcb@preparationtime\\
}
\ifthenelse{\equal{\xcb@bakingtime}{}}
{% not set => not shown
}
{
\xcb@name@bakingtime & \xcb@bakingtime\ifthenelse{\equal{\xcb@bakingtemperature}{}}
{
\\
}
{,\hspace{1em} \xcb@name@bakingtemperature \hspace{1ex} \xcb@bakingtemperature\\
}
}
\ifthenelse{\equal{\xcb@portion}{}}
{% not set => not shown
}
{
\xcb@name@portion & \xcb@portion\\
}
\ifthenelse{\equal{\xcb@calory}{}}
{% not set => not shown
}
{
\xcb@name@calory & \xcb@calory\\
}
\ifthenelse{\equal{\xcb@source}{}}
{% not set => not shown
}
{
\xcb@name@source & \xcb@source
}
\end{tabular}
}
\newcommand\xcb@cmd@wrapfill
{% Bug fix for wrapfigure package
\par
\ifx\parshape\WF@fudgeparshape
\nobreak
\vskip-\baselineskip
\vskip\c@WF@wrappedlines\baselineskip
\allowbreak
\WFclear
\fi
}
\define@key{picture}{small}[]{
\def\xcb@picture@small{
\ifthenelse{\equal{#1}{}}
{% not set => not shown
}
{
\vspace{-0.6cm}
\includegraphics[width=\linewidth, height = \xcb@pictureheight, keepaspectratio]{#1}
}
}
}
\define@key{picture}{smallpicturewidth}[]{\def\xcb@picture@smallwidth{#1}}
\define@key{picture}{bigpicturewidth}[]{\def\xcb@picture@bigwidth{#1}}
\define@key{picture}{big}[]{
\def\xcb@picture@big{
\ifthenelse{\equal{#1}{}}
{% not set => not shown
}
{
\vspace{-0.6cm}
\includegraphics[width=\linewidth, height = \xcb@pictureheight, keepaspectratio]{#1}
}
}
}
\define@key{recipe}{preparationtime}[]{\def\xcb@preparationtime{#1}}
\define@key{recipe}{bakingtime}[]{\def\xcb@bakingtime{#1}}
\define@key{recipe}{bakingtemperature}[]{\def\xcb@bakingtemperature{#1}}
\define@key{recipe}{portion}[]{\def\xcb@portion{#1}}
\define@key{recipe}{calory}[]{\def\xcb@calory{#1}}
\define@key{recipe}{source}[]{\def\xcb@source{#1}}
\newcommand*{\xcb@separationgraph}[2][1.5]
{% Graphical separator
\begin{center}
\begin{tikzpicture}[scale=#1]
\fill[color=#2] (0,0) -- (-0.2, 0.1) -- (-4, 0) -- (-0.2, -0.1) -- cycle;
\fill[color=#2] (0,0) -- (0.2, 0.1) -- (4, 0) -- (0.2, -0.1) -- cycle;
\fill[color=#2] (0,0) circle (0.1);
\end{tikzpicture}
\end{center}
}
%% HOOKS
\newcommand*{\pregraph}[1]
{% Hook: entered before the pictures
\def\xcb@hook@pregraph
{%
\begin{minipage}[T]{\textwidth}
#1
\vspace{0.6cm}
\end{minipage}
}
}
\newcommand*{\pretitle}[1]
{% Hook: entered before the recipe title
\def\xcb@hook@pretitle
{%
#1
}
}
\newcommand*{\prerecipeoverview}[1]
{% Hook: entered before the recipe overview
\def\xcb@hook@prerecipeoverview
{%
#1
}
}
\newcommand*{\prepreparation}[1]
{% Hook: entered before the preparation (steps)
\def\xcb@hook@prepreparation
{%
#1
}
}
\newcommand*{\postpreparation}[1]
{% Hook: entered after the preparation (steps)
\def\xcb@hook@postpreparation
{%
#1
}
}
\newcommand*{\preingredients}[1]
{% Hook: entered before the ingredients
\def\xcb@hook@preingredients
{%
#1
}
}
\newcommand*{\postingredients}[1]
{% Hook: entered after the ingredients
\def\xcb@hook@postingredients
{%
#1
}
}
\newenvironment{recipe}[2][]
{% initialisation
\setkeys{recipe}{preparationtime, bakingtime, bakingtemperature, portion, calory, source}
\setkeys{picture}{small, big, smallpicturewidth=\xcb@smallpicturewidth, bigpicturewidth=\xcb@bigpicturewidth} % load the default values
\def\xcb@hook@pregraph{}
\def\xcb@hook@pretitle{}
\def\xcb@introduction{}
\def\xcb@hook@prepreparation{}
\preparation{}
\def\xcb@hook@postpreparation{}
\def\xcb@hook@preingredients{}
\ingredients{}
\def\xcb@hook@postingredients{}
\def\xcb@suggestion{}
\def\xcb@hint{}
\def\xcb@recipename{#2}
\setkeys{recipe}{#1} % reading the optional parameters
\setcounter{xcb@newpagefoot}{1}
\setcounter{xcb@newpagehead}{\value{page}}
}
{% this part is executed at \end{recipe}
%% FIRST BLOCK
\xcb@hook@pregraph
\if@twoside
\ifodd\arabic{page}
\begin{minipage}[T]{\xcb@picture@bigwidth}
\xcb@picture@big
\end{minipage}
\hfill
\begin{minipage}[T]{\xcb@picture@smallwidth}
\xcb@picture@small
\end{minipage}
\else
\begin{minipage}[T]{\xcb@picture@smallwidth}
\xcb@picture@small
\end{minipage}
\hfill
\begin{minipage}[T]{\xcb@picture@bigwidth}
\xcb@picture@big
\end{minipage}
\fi
\else
\begin{minipage}[T]{\xcb@picture@bigwidth}
\xcb@picture@big
\end{minipage}
\hfill
\begin{minipage}[T]{\xcb@picture@smallwidth}
\xcb@picture@small
\end{minipage}
\fi
%% SECOND BLOCK
\xcb@hook@pretitle
\recipesection[\normalsize\xcb@recipename]%
{\hspace{-1em}\textcolor{\xcb@color@recipename}{\xcb@font@recipename\xcb@recipename}}
\xcb@cmd@recipeoverview
\xcb@introduction
%% THIRD BLOCK
\ifthenelse{\equal{\xcb@ingredientslines}{\empty}}%
{%
\begin{wraptable}{r}{\xcb@ingredientswidth}
{% No line number given by the user
\vspace{-1em} % same height of ingredients and preparation
\xcb@hook@preingredients
\xcb@ingredients
\xcb@hook@postingredients
}
\end{wraptable}
}
{%
\begin{wraptable}[\xcb@ingredientslines]{r}{\xcb@ingredientswidth}
{% Use the given line number by the user
\vspace{-1em} % same height of ingredients and preparation
\xcb@hook@preingredients
\xcb@ingredients
\xcb@hook@postingredients
}
\end{wraptable}
}
\xcb@hook@prepreparation
\xcb@preparation
\xcb@hook@postpreparation
\xcb@suggestion
\vfill
\xcb@cmd@wrapfill
\xcb@hint
\setcounter{xcb@newpagefoot}{0}
}
\pagestyle{fancy}
\renewcommand{\sectionmark}[1]
{%
\markright{\MakeUppercase{\thesection.\ #1}}
}
\renewcommand{\headrulewidth}
{%
0.5pt
}
\fancyhf{}
\if@twoside
\fancyfoot[LE,RO]{\textbf{\thepage}}
\fancyhead[LE,RO]{\rightmark}
\else
\fancyfoot[R]{\textbf{\thepage}}
\fancyhead[R]{\rightmark}
\fi
\fancyhead[C]{\@newpagehint{head}}
\fancyfoot[C]{\@newpagehint{foot}}
\newcounter{xcb@newpagehead}
\setcounter{xcb@newpagehead}{0}
\newcounter{xcb@newpagefoot}
\setcounter{xcb@newpagefoot}{0}
\newcommand*{\@newpagehint}[1]
{
\ifthenelse{\equal{#1}{head}}
{
\ifnum \value{xcb@newpagehead} < \value{page}
\ifnum \value{xcb@newpagehead} > 0
\xcb@name@continuationhead
\fi
\fi
}
{
\ifthenelse{\value{xcb@newpagefoot} > 0}
{
\xcb@name@continuationfoot
}
{% if no message at the bottom is set, there is no need for a message on the next page
\setcounter{xcb@newpagehead}{0}
}
}
}
\define@key{background}{width}[\linewidth]{\def\xcb@background@width{#1}}
\define@key{background}{height}[\paperheight]{\def\xcb@background@height{#1}}
\define@key{background}{x}[0cm]{\def\xcb@background@x{#1}}
\define@key{background}{y}[0cm]{\def\xcb@background@y{#1}}
\define@key{background}{orientation}[default]{\def\xcb@background@orientation{#1}}
\savekeys{background}
{%
width,
height,
x,
y,
orientation
}
\newcommand*{\setBackgroundPicture}[2][]
{%
\ClearShipoutPictureBG
\setkeys{background}{width, height, x, y, orientation} % initialisation
\setkeys{background}{#1}
\AddToShipoutPicture
{%
\ifthenelse{\equal{\xcb@background@orientation}{default}}
{% default
\put(\xcb@background@x, \xcb@background@y)
{%
\parbox[b][\xcb@background@height]{\xcb@background@width}
{%
\vfill
\includegraphics[width=\xcb@background@width, height=\xcb@background@height, keepaspectratio]{#2}%
\vfill
}
}
}
{%
\ifthenelse{\equal{\xcb@background@orientation}{pagecenter}}
{% pagecenter
\AtPageCenter{%
\makebox(\xcb@background@x, \xcb@background@y)[c]
{%
\includegraphics[width=\xcb@background@width, height=\xcb@background@height, keepaspectratio]{#2}
}
}
}
{%
\ifthenelse{\equal{\xcb@background@orientation}{textcenter}}
{% textcenter
\AtTextCenter{%
\makebox(\xcb@background@x, \xcb@background@y)[c]
{%
\includegraphics[width=\xcb@background@width, height=\xcb@background@height, keepaspectratio]{#2}
}
}
}
{%
\ifthenelse{\equal{\xcb@background@orientation}{stockcenter}}
{% stockcenter
\AtStockCenter{%
\makebox(\xcb@background@x, \xcb@background@y)[c]
{%
\includegraphics[width=\xcb@background@width, height=\xcb@background@height, keepaspectratio]{#2}
}
}
}
{% error message
\PackageError{xcookybooky}
{There is no '\xcb@background@orientation' option for background picture orientation available!}
{The possible options are: default, pagecenter, textcenter or stockcenter}
}
}
}
}
}
}
\endinput
%%
%% End of file `xcookybooky.sty'.