Pensando melhor...

Pensando melhor...

Há algum tempo venho tentando criar um livro de receitas bonito usando o ShareLaTeX. Eu tentei usar pacotes cookybookye cuisine, mas não consigo fazê-los funcionar. Quero que cada página tenha:

  1. O título da receita e a colocação desse título no índice.
  2. Símbolos para denotar:

    a) Se a refeição é ou não congelável;

    (b) ser vegetariano ou não;

    (c) quanto tempo leva para fazer (preparo e tempo de cozimento);

    (d) quantas pessoas atende.

  3. A lista de ingredientes a

    (a) ter legenda própria;

    (b) ter a opção de legenda para coisas como marinadas, etc;

    (c) ser organizado como: número de ingrediente de medição (preparação).

  4. As instruções (novamente com subtítulo próprio) com a opção de colocar “Pré-aqueça o forno a x graus” entre “Instruções” e a primeira instrução.

  5. A opção de adicionar uma imagem a cada receita do mesmo tamanho no mesmo local.

No momento, uma receita típica é assim:

insira a descrição da imagem aqui

Estou muito feliz com a aparência (embora algumas cores possam ser boas). No entanto, fiz tudo “manualmente”, por isso dá muito trabalho garantir que todas as receitas tenham a mesma formatação.

É possível fazer esse modelo?

Meu código para a receita acima:

\newpage
\section{Raspberry Chocolate Tiramisu}
\lhead{}\chead{Serves 4}\rhead{V}
\lfoot{Prep time:}\rfoot{Cook time:}
\begin{multicols}{2}
{\Large Instructions}
\begin{itemize}
    \item 100ml Double Strength Coffee
    \item 400g Raspberries (blitzed)
    \item 200g Mascarpone
    \item 2 tbsp Sweetener
    \item 1 tsp Vanilla Extract
    \item 700g Vanilla Yogurt
    \item 15g Dark Chocolate (finely grated)
\end{itemize}
\columnbreak
\textit{For the Crumble Mixture}:
\begin{itemize}
    \item 80g Wholemeal Flour
    \item 80g Plain Flour
    \item 80g Butter (diced)
    \item 70g Demerara Sugar
\end{itemize}
\end{multicols}
{\Large Instructions}\\
Preheat the over to Gas Mark 4, Electric $180^\circ$C, Fan $160^\circ$C.
\begin{enumerate}
    \item Stir the two kinds of flour together in a bowl, add the butter and rub it into the flour. When the mixture looks like breadcrumbs, mix in the brown sugar. Lay the mixture on a shallow baking tray and bake for 25-30 minutes until golden brown. Leave on the side to cool.
    \item Mix together the mascarpone, sweetener, vanilla extract, and three quarters of the chocolate. Put half the crumble mixture in each of the glasses and pour over half the quark mixture along with half the raspberries.
    \item Put the other half of the crumble mixture on top, followed by the remaining quark mixture and raspberries. Sprinkle over the last of the chocolate. Chill for 3 hours before serving.
\end{enumerate}

Responder1

Obrigado a @alephzero por tornar este um projeto LaTeX real. Ou seja, concentrar-se na semântica da receita em oposição à marcação LaTeX.

Para esse fim, prefiro entradas e saídas limpas e organizadas. Eu costumava \obeylinesemular ambientes de lista sem a marcação correspondente. Também usei um pouco de cor para indicar algumas possibilidades. Incluí comentários em meu código muito simples que devem mostrar o caminho. Computer Modern não seria minha escolha, mas não sei qual é o seu ambiente TeXing, então não queria fazer suposições desagradáveis. Eu manteria a ornamentação no mínimo (regras e afins) para ajudar a tornar a apresentação da receita o mais clara possível. Bom apetite.

Mais tarde:

Eu forneci alguns arquivos ausentes %. Além disso, forneci a possibilidade de um headnote como argumento opcional para \recipe. Além disso, para meu próprio benefício, recrutei a ajuda de geometry.stypara produzir uma saída de 5,5 pol. por 8,5 pol. Isso, é claro, pode ser alterado para se adequar.

Ainda mais tarde:

Devo salientar também que isso cria um sumário usando \frontmattere \backmatterde book.cls. Mais ou menos como amendoim: não dá para comer só um...

% !TEX encoding = UTF-8 Unicode
% !TEX TS-program = XeLaTeX

%% pagestyle alterations per user request 14 xii 2020

\documentclass{article}
\usepackage{fancyhdr}
\usepackage{multicol}
\usepackage[%
    %a5paper,
    papersize={5.5in,8.5in},
    margin=0.75in,
    top=0.75in,
    bottom=0.75in,
    %twoside
    ]{geometry}
\usepackage{xcolor}
\usepackage{graphicx}

\raggedcolumns
\setlength{\multicolsep}{0pt}
\setlength{\columnseprule}{1pt}

\makeatletter

%% Used for the headnote and in \showit
%% If the text is small it is placed on one line;
%% otherwise it is put into a raggedright paragraph.
\long\def\testoneline#1{%
  \sbox\@tempboxa{#1}%
  \ifdim \wd\@tempboxa <0.75\linewidth
        \begingroup
            \itshape
            #1\par
        \endgroup
  \else
    \parbox{0.75\linewidth}{\raggedright\itshape#1}%
    \par
  \fi
}

\newif\if@mainmatter \@mainmattertrue

%% Borrowed from book.cls
\newcommand\frontmatter{%
    \cleardoublepage
  \@mainmatterfalse
  \pagenumbering{roman}}
\newcommand\mainmatter{%
    \cleardoublepage
  \@mainmattertrue
  \pagenumbering{arabic}}
\makeatother

%% Vary the colors at will

\definecolor{vegcolor}{rgb}{0,0.5,0.2}
\definecolor{frzcolor}{rgb}{0,0,1}
\definecolor{dessertcolor}{rgb}{0.5,0.2,0.1}
\definecolor{makeaheadcolor}{rgb}{0.5,0.5,0.6}

%% Thanks to alephzero for the excellent start:
\newcommand{\recipe}[2][]{%
    \newpage
    \thispagestyle{fancy}
    \lhead{}%
    \chead{}%
    \rhead{}%
    \lfoot{}%
    \rfoot{}%
    \section{#2}%
    \if###1##%
    \else
        \begin{center}
            \testoneline{#1}%
        \end{center}
    \fi
}
\newcommand{\serves}[2][Serves]{%
    \chead{#1 #2}}
\newcommand{\dishtype}[1]{%
    \rhead{#1}%
}
\newcommand{\dishother}[1]{%
    \lhead{#1}%
}
\newcommand{\vegetarian}{%
    {\large\color{vegcolor}\textbf{V}}%
}
\newcommand{\freeze}{%
    {\large\color{frzcolor}\textbf{F}}%
}
\newcommand{\dessert}{%
    {\large\color{dessertcolor}\textbf{D}}%
}
\newcommand{\makeahead}{%
    {\large\color{makeaheadcolor}\textbf{M}}%
}
%% Optional arguments for alternate names for these:
\newcommand{\preptime}[2][Prep time]{%
    \lfoot{#1: #2}%
}
\newcommand{\cooktime}[2][Cook time]{%
    \rfoot{#1: #2}%
}
\newcommand{\temp}[1]{%
    $#1^\circ$C}
%% Optional argument is the width of the graphic, default = 1in
\newcommand{\showit}[3][1in]{%
    \begin{center}
        \bigskip
            \includegraphics[width=#1]{#2}%
            \par
            \medskip
            \testoneline{#3}%
            \par
    \end{center}%
}

%% Optional argument for a  heading within the ingredients section
\newcommand{\ingredients}[1][]{%
    \if###1##%
        {\color{red}\Large\textbf{Ingredients}}%
    \else
        \emph{#1}%
    \fi
}

%% Use \obeylines to minimize markup
\newenvironment{ingreds}{%
    \parindent0pt
    \noindent
    \ingredients
    \par
    \smallskip
    \begin{multicols}{2}
    \leftskip1em
    \rightskip0pt plus 3em
    \parskip=0.25em
    \obeylines
    \everypar={\hangindent2em}
}{%
    \end{multicols}%
    \medskip
}

\newcounter{stepnum}

%% Optional argument for an italicized pre-step
%% Also use obeylines to minimize markup here as well
\newenvironment{method}[1][]{%
    \setcounter{stepnum}{0}
    \noindent
    {\color{red}\Large\textbf{Instructions}}%
    \par
    \smallskip
    \if###1##%
    \else
        \noindent
        \emph{#1}
        \par
    \fi
    \begingroup
    \parindent0pt
    \parskip0.25em
        \leftskip2em
    \everypar={\llap{\stepcounter{stepnum}\hbox to2em{\thestepnum.\hfill}}}
}{%
    \par
    \endgroup
    }

\pagestyle{plain}

\begin{document}

\frontmatter
\tableofcontents

\mainmatter

\recipe[This is a simple headnote that describes the product for the user. A simple but elegant dessert.]{Raspberry Chocolate Tiramisu}
\serves{4}
\preptime{1 hour}
\cooktime[Chill time]{1$\frac{1}{2}$ hours}
\dishtype{\dessert,\vegetarian}
\dishother{\makeahead, \freeze}
\begin{ingreds}
     100ml double strength coffee
     400g raspberries (blitzed)
     200g mascarpone
     2 tbsp sweetener
     1 tsp vanilla extract
     700g vanilla yogurt
     15g dark chocolate (finely grated) and a really long one
\columnbreak
\ingredients[For the Crumble Mixture:]
     80g wholemeal flour
     80g plain flour
     80g butter (diced)
     70g demerara sugar
\end{ingreds}

\begin{method}[Preheat the oven to Gas Mark 4, Electric \temp{180}, Fan \temp{160}.]
     Stir the two kinds of flour together in a bowl, add the butter and rub it into the flour. When the mixture looks like breadcrumbs, mix in the brown sugar. Lay the mixture on a shallow baking tray and bake for 25--30 minutes until golden brown. Leave on the side to cool.

     Mix together the mascarpone, sweetener, vanilla extract, and three quarters of the chocolate. Put half the crumble mixture in each of the glasses, sprinkling over with half the coffee, and pour over half the mascarpone mixture along with half the raspberries.

     Put the other half of the crumble mixture on top, sprinkling over with the remaining half of the coffee, followed by the remaining quark mixture and raspberries. Sprinkle over the last of the chocolate. Chill for 3 hours before serving.

\end {method}

\showit[1.25in]{example-image-b}{This is a picture}

\end{document}

Primeira versão

Pensando melhor...

Não gosto muito deste formato,bipartido,em que os ingredientes se apresentam sozinhos em uma área visualmente distinta e bastante separada do método. Aparentemente, o objetivo disso era permitir ao usuário ver desde o início quais matérias-primas seriam necessárias. Isabella Beeton (Livro de gestão doméstica,1861) exortou seus leitores a “seguirem precisamente a ordem em que as receitas são dadas. Assim, deixe-os primeiro colocar na sua mesa todos os INGREDIENTES necessários; então o modus operandi, ou MODO de preparação, será facilmente gerenciado”, em uma prática hoje comumente chamadamis en place. Mas muitas vezes, especialmente em receitas mais longas, algo (muitas vezes um ingrediente) se perde ou é mal interpretado, ou uma etapa é ignorada ou mal compreendida à medida que o olho viaja de um lado para o outro entre os ingredientes e o método. O efeito é análogo à leitura de linhas de texto excessivamente longas: o olho tem dificuldade em localizar corretamente o início da próxima linha e lê a mesma linha novamente ou pula uma linha. (https://www.fonts.com/content/learning/fontology/level-2/text-typography/length-column-width) De qualquer forma, basta dizer que eu formataria esta receita de forma bem diferente (veja abaixo).

Por enquanto, continuarei com esta receita como está e abordarei outra questão: a especificação dos ingredientes. Desde o aparecimento do formato bipartido na impressão (na língua inglesa, início do século XIX), os ingredientes têm sido fornecidos de uma forma distinta.narrativaformato: 1 colher de chá [de] sal, 1 xícara [de] farinha, 2 onças [de] cacau, etc. Embora idiomático na fala, na impressão isso dá a impressão de que de alguma forma oquantiado ingrediente é o tema quente, não oidentidadedo próprio ingrediente. Felizmente, o TeX fornece as ferramentas para corrigir isso analisando os ingredientes sem perturbar indevidamente esse formato habitual (embora insatisfatório) com marcações desnecessárias. Além disso, os ingredientes só devem ser capitalizados se não forem precedidos de uma quantidade (Whitman,Receitas em tipo,pp.124--125), como aqui. Além disso, é melhor deixar as unidades de medida sem abreviações (Whitman,Receitas em tipo,pp. 15--16), exceto no caso de espaço limitado.

Além disso, estou deixando uma fonte OpenType (STIX Two) cuidar do símbolo de grau (°) e da fração (½), minimizando ainda mais a codificação.

\documentclass{article}
\usepackage{fancyhdr,multicol,xcolor,graphicx,xparse,fontspec}
\usepackage[%
    %a5paper,
    papersize={5.5in,8.5in},
    margin=0.75in,
    top=0.75in,
    bottom=0.75in,
    %twoside
    ]{geometry}

\makeatletter

%% Used for the headnote and in \showit
%% If the text is small it is placed on one line;
%% otherwise it is put into a raggedright paragraph.
\long\def\testoneline#1{%
  \sbox\@tempboxa{#1}%
  \ifdim \wd\@tempboxa <0.75\linewidth
        \begingroup
            \itshape
            #1\par
        \endgroup
  \else
    \parbox{0.75\linewidth}{\raggedright\itshape#1}%
    \par
  \fi
}

\newif\if@mainmatter \@mainmattertrue

%% Borrowed from book.cls
\newcommand\frontmatter{%
    \cleardoublepage
  \@mainmatterfalse
  \pagenumbering{roman}}
\newcommand\mainmatter{%
    \cleardoublepage
  \@mainmattertrue
  \pagenumbering{arabic}}
\makeatother

%% Vary the colors at will

\definecolor{vegcolor}{rgb}{0,0.5,0.2}
\definecolor{frzcolor}{rgb}{0,0.8,0.8}
\definecolor{dessertcolor}{rgb}{0.5,0.2,0.1}
\definecolor{makeaheadcolor}{rgb}{0.5,0.5,0.6}

%% Thanks to alephzero for the excellent start:
\newcommand{\recipe}[2][]{%
    \newpage
    \thispagestyle{fancy}
    \lhead{}%
    \chead{}%
    \rhead{}%
    \lfoot{}%
    \rfoot{}%
    \section{#2}%
    \if###1##%
    \else
        \begin{center}
            \testoneline{#1}%
        \end{center}
    \fi
}
\newcommand{\serves}[2][Serves]{%
    \chead{#1 #2}}
\newcommand{\dishtype}[1]{%
    \rhead{#1}%
}
\newcommand{\dishother}[1]{%
    \lhead{#1}%
}
\newcommand{\vegetarian}{%
    {\large\color{vegcolor}\textbf{V}}%
}
\newcommand{\freeze}{%
    {\large\color{frzcolor}\textbf{F}}%
}
\newcommand{\dessert}{%
    {\large\color{dessertcolor}\textbf{D}}%
}
\newcommand{\makeahead}{%
    {\large\color{makeaheadcolor}\textbf{M}}%
}
%% Optional arguments for alternate names for these:
\newcommand{\preptime}[2][Prep time]{%
    \lfoot{#1: #2}%
}
\newcommand{\cooktime}[2][Cook time]{%
    \rfoot{#1: #2}%
}
\newcommand{\temp}[1]{%
    #1°C}
%% Optional argument is the width of the graphic, default = 1in
\newcommand{\showit}[3][1in]{%
    \begin{center}
        \bigskip
            \includegraphics[width=#1]{#2}%
            \par
            \medskip
            \testoneline{#3}%
            \par
    \end{center}%
}

%% Optional argument for a  heading within the ingredients section
\newcommand{\ingredients}[1][]{%
    \if###1##%
        {\color{red}\Large\textbf{Ingredients}}%
    \else
        \emph{#1}%
    \fi
}

\def\ucit#1{\uppercase{#1}}
\begingroup
    \lccode`~=`\^^M
    \lowercase{%
\endgroup%% Ingredient first, then measure; empty measure and/or unit = " . "
    %% *=column break; amount<space>ingredient
    \NewDocumentCommand{\ing}{s u{ } u{~}}{% %% basically the same as: \def\ing#1 #2~{%
         %% or: \bfseries\ucit#3\if#1#2---\else,\ \fi
        \if.#2%
            \emph{#3}~ % A heading
        \else % Amounts containing spaces <1 teaspoon> have to use '~' <1~teaspoon>
            \textbf{\ucit#3, }#2 \IfBooleanT{#1}{\columnbreak}~ %
        \fi
    }%
}%


%% Use \obeylines to minimize markup
\newenvironment{ingreds}{%
    \parindent0pt
    \noindent
    \ingredients
    \par
    \smallskip
    \begin{multicols}{2}
    \leftskip1em
    \parindent-1em
    \rightskip0pt plus 3em
    \parskip=0.25em
    \obeylines
    \everypar={\ing}
}{%
    \end{multicols}%
    \medskip
}

\newcounter{stepnum}

%% Optional argument for an italicized pre-step
%% Also use obeylines to minimize markup here as well
\newenvironment{method}[1][]{%
    \setcounter{stepnum}{0}
    \noindent
    {\color{red}\Large\textbf{Instructions}}%
    \par
    \smallskip
    \if###1##%
    \else
        \noindent
        \emph{#1}
        \par
    \fi
    \begingroup
    \rightskip0pt plus 3em
    \parindent0pt
    \parskip0.25em
        \leftskip2em
    \everypar={\llap{\stepcounter{stepnum}\hbox to2em{\thestepnum.\hfill}}}
}{%
    \par
    \endgroup
    }

\setmainfont{STIX Two Text}

\pagestyle{plain}
\raggedcolumns
\setlength{\multicolsep}{0pt}
\setlength{\columnseprule}{1pt}

\begin{document}

\frontmatter
\tableofcontents

\mainmatter

\recipe[This is a simple headnote that describes the product for the user. A simple but elegant dessert.]{Raspberry Chocolate Tiramisu}
\serves{4}
\preptime{1 hour}
\cooktime[Chill time]{1½ hours}
\dishtype{\dessert,\vegetarian}
\dishother{\makeahead, \freeze}
\begin{ingreds}% amount<space>ingredient; initial <.>=comment;*=column break
     100ml double strength coffee
     400g raspberries (blitzed)
     200g mascarpone
     2~tablespoons sweetener
     1~teaspoon vanilla extract
     700g vanilla yogurt
     *15g dark chocolate (finely grated) 
     . for the crumble mixture:
     80g wholemeal flour
     80g plain flour
     80g butter (diced)
     70g demerara sugar
\end{ingreds}

\begin{method}[Preheat the oven to Gas Mark 4, Electric \temp{180}, Fan \temp{160}.]
     Stir the two kinds of flour together in a bowl, add the butter and rub it into the flour. When the mixture looks like breadcrumbs, mix in the brown sugar. Lay the mixture on a shallow baking tray and bake for 25--30 minutes until golden brown. Leave on the side to cool.

     Mix together the mascarpone, sweetener, vanilla extract, and three quarters of the chocolate. Put half the crumble mixture in each of the glasses and pour over half the quark mixture along with half the raspberries.

     Put the other half of the crumble mixture on top, followed by the remaining quark mixture and raspberries. Sprinkle over the last of the chocolate. Chill for 3 hours before serving.
\end {method}

\showit[1.25in]{example-image-b}{This is a picture}

\end{document}

Segunda versão

E finalmente...

Aqui está a mesma receita emformato bipartido coordenado,isto é, os ingredientes para cada etapa foram mostrados com (coordenados com) essa etapa. Um mistério apareceu quando descobri que a receita original na verdade nãousaro “café duplo forte” exigido na lista de ingredientes. Tentei corrigir essa omissão em todas as três versões.

\documentclass{article}
\usepackage{fancyhdr,wrapfig,xcolor,graphicx,xparse,fontspec}
\usepackage[%
    %a5paper,
    papersize={5.5in,8.5in},
    margin=0.75in,
    top=0.75in,
    bottom=0.75in,
    %twoside
    ]{geometry}

\newcounter{stepnum}

%% |=====8><-----| %%


\makeatletter

%% From Donald Arseneau. Add after the wrapping text. Whew!
\def\wrapfill{% Just glad it works.
    \par
  \ifx\parshape\WF@fudgeparshape
    \nobreak
    \ifnum\c@WF@wrappedlines>\@ne
      \advance\c@WF@wrappedlines\m@ne
      \vskip\c@WF@wrappedlines\baselineskip
      \global\c@WF@wrappedlines\z@
    \fi
    \allowbreak
    \WF@finale
  \fi
}


%% Used for the headnote and in \showit
%% If the text is small it is placed on one line;
%% otherwise it is put into a raggedright paragraph.
\long\def\testoneline#1{%
  \sbox\@tempboxa{#1}%
  \ifdim \wd\@tempboxa <0.75\linewidth
        \begingroup
            \itshape
            #1\par
        \endgroup
  \else
    \parbox{0.75\linewidth}{\raggedright\itshape#1}%
    \par
  \fi
}

\newif\if@mainmatter \@mainmattertrue

%% Borrowed from book.cls
\newcommand\frontmatter{%
    \cleardoublepage
  \@mainmatterfalse
  \pagenumbering{roman}}
\newcommand\mainmatter{%
    \cleardoublepage
  \@mainmattertrue
  \pagenumbering{arabic}}
\makeatother

%% Vary the colors at will

\definecolor{vegcolor}{rgb}{0,0.5,0.2}
\definecolor{frzcolor}{rgb}{0,0.8,0.8}
\definecolor{dessertcolor}{rgb}{0.5,0.2,0.1}
\definecolor{makeaheadcolor}{rgb}{0.5,0.5,0.6}

%% Thanks to alephzero for the excellent start:
%% #1 [optional headnote]; #2 Title of recipe; #3 [Initial instructions]
\NewDocumentCommand{\recipe}{o m o}{%
    \setcounter{stepnum}{0}%
    \newpage
    \thispagestyle{fancy}
    \lhead{}%
    \chead{}%
    \rhead{}%
    \lfoot{}%
    \rfoot{}%
    \section{#2}%
    \IfNoValueF{#1}{\begin{center}\testoneline{#1}\end{center}}
    \IfNoValueF{#3}{\noindent\emph{#3}\par\medskip}
}
\newcommand{\serves}[2][Serves]{%
    \chead{#1 #2}}
\newcommand{\dishtype}[1]{%
    \rhead{#1}%
}
\newcommand{\dishother}[1]{%
    \lhead{#1}%
}
\newcommand{\vegetarian}{%
    {\large\color{vegcolor}\textbf{V}}%
}
\newcommand{\freeze}{%
    {\large\color{frzcolor}\textbf{F}}%
}
\newcommand{\dessert}{%
    {\large\color{dessertcolor}\textbf{D}}%
}
\newcommand{\makeahead}{%
    {\large\color{makeaheadcolor}\textbf{M}}%
}
%% Optional arguments for alternate names for these:
\newcommand{\preptime}[2][Prep time]{%
    \lfoot{#1: #2}%
}
\newcommand{\cooktime}[2][Cook time]{%
    \rfoot{#1: #2}%
}
\newcommand{\temp}[1]{%
    #1°C}
%% Optional argument is the width of the graphic, default = 1in
\newcommand{\showpic}[3][1in]{%
    \begin{center}
        \bigskip
            \includegraphics[width=#1]{#2}%
            \par
            \medskip
            \testoneline{#3}%
            \par
    \end{center}%
}

\def\ucit#1{\uppercase{#1}}
\begingroup
    \lccode`~=`\^^M
    \lowercase{%
\endgroup%% Ingredient first, then measure; empty measure and/or unit = " . "
    %% *=column break; amount<space>ingredient
    \NewDocumentCommand{\ing}{u{ } u{~}}{% %% basically the same as: \def\ing#1 #2~{% requires xparse
        \noindent
        \if.#1% Is a heading, a non-ingredient, in the ingredients block
            \emph{#2}~ % A heading
        \else % Amounts containing spaces <1 teaspoon> have to use '~' <1~teaspoon>
            \textbf{\ucit#2, }#1~ %
        \fi
    }%
}%

\NewDocumentEnvironment{step}{}{%
    \parindent0pt
    \leftskip0pt
    \begin{minipage}{\textwidth}
        \begin{wrapfigure}{r}{0pt}
            \kern-0.5em
            \vrule width 1pt\enskip
            \begin{minipage}{0.5\textwidth}
                \leftskip=1.5em
                \parindent=-1.5em
                \parskip=0.25em
                \obeylines
                    \everypar={\ing}
}{%
        \wrapfill
    \end{minipage}
    \medskip
}

\NewDocumentCommand{\method}{}{%
            \end{minipage}
        \end{wrapfigure}
        \rightskip0pt plus 2em
        \parskip0.25em
        \everypar={\llap{\stepcounter{stepnum}\hbox to 1.5em{\thestepnum.\hfill}}}
}

\setmainfont{STIX Two Text}

\pagestyle{plain}
\setlength{\intextsep}{0pt}

\begin{document}

\frontmatter
\tableofcontents

\mainmatter

\recipe[This is a simple headnote that describes the product for the user. A simple but elegant dessert.]{Raspberry Chocolate Tiramisu}[Preheat the oven to Gas Mark 4, Electric \temp{180}, Fan \temp{160}.]
\serves{4}
\preptime{1 hour}
\cooktime[Chill time]{1½ hours}
\dishtype{\dessert,\vegetarian}
\dishother{\makeahead, \freeze}

\begin{step}
     100ml double strength coffee
     400g raspberries 
\method
Prepare the coffee and set aside to cool; mash the raspberries with a fork and set aside.
\end{step}

\begin{step}
     . For the crumble mixture:
     80g wholemeal flour
     80g plain flour
     80g butter (diced)
     70g demerara sugar
    \method
    Stir the two kinds of flour together in a bowl, add the butter and rub it into the flour. When the mixture looks like breadcrumbs, mix in the brown sugar. Lay the mixture on a shallow baking tray and bake for 25--30 minutes until golden brown. Leave on the side to cool.
\end{step}

\begin{step}
     200g mascarpone
     2~tablespoons sweetener
     1~teaspoon vanilla extract
     700g vanilla yogurt
     15g dark chocolate (finely grated)
     \method
         Mix together the mascarpone, sweetener, vanilla extract, and three quarters of the chocolate.

    Put half the crumble mixture in each of the glasses, sprinkling over half the coffee, and pour over half the quark mixture along with half the raspberries.

     Put the other half of the crumble mixture on top, sprinkling over the remaining half of the coffee, followed by the remaining quark mixture and raspberries. Sprinkle over the last of the chocolate. Chill for 3 hours before serving.
\end{step}

\showpic[1.25in]{example-image-b}{This is a picture}

\end{document}

Terceira versão

Uma última coisa...

Como @Alborz apontou com razão, há algumas coisas aqui que precisam ser consertadas. Para o problema de uma lista de ingredientes que é mais longa do que o método correspondente, podemos agradecer a Donald Arseneau por fornecer a solução, \wrapfillque pode ser encontrada wrapfig.stye que foi utilizada a seguir. Inserir os ingredientes também é mais simples no código a seguir:

\documentclass{article}
\usepackage{fancyhdr,wrapfig,xcolor,graphicx,xparse,fontspec}
\usepackage[%
    %a5paper,
    papersize={5.5in,8.5in},
    margin=0.75in,
    top=0.75in,
    bottom=0.75in,
    %twoside
    ]{geometry}

\newcounter{stepnum}

%% |=====8><-----| %%


\makeatletter

%% From Donald Arseneau. Add after the wrapping text. Whew!
\def\wrapfill{% Just glad it works.
    \par
  \ifx\parshape\WF@fudgeparshape
    \nobreak
    \ifnum\c@WF@wrappedlines>\@ne
      \advance\c@WF@wrappedlines\m@ne
      \vskip\c@WF@wrappedlines\baselineskip
      \global\c@WF@wrappedlines\z@
    \fi
    \allowbreak
    \WF@finale
  \fi
}


%% Used for the headnote and in \showit
%% If the text is small it is placed on one line;
%% otherwise it is put into a raggedright paragraph.
\long\def\testoneline#1{%
  \sbox\@tempboxa{#1}%
  \ifdim \wd\@tempboxa <0.75\linewidth
        \begingroup
            \itshape
            #1\par
        \endgroup
  \else
    \parbox{0.75\linewidth}{\raggedright\itshape#1}%
    \par
  \fi
}

\newif\if@mainmatter \@mainmattertrue

%% Borrowed from book.cls
\newcommand\frontmatter{%
    \cleardoublepage
  \@mainmatterfalse
  \pagenumbering{roman}}
\newcommand\mainmatter{%
    \cleardoublepage
  \@mainmattertrue
  \pagenumbering{arabic}}
\makeatother

%% Vary the colors at will

\definecolor{vegcolor}{rgb}{0,0.5,0.2}
\colorlet{gfcolor}{brown}
\definecolor{frzcolor}{rgb}{0,0.8,0.8}
\definecolor{dessertcolor}{rgb}{0.5,0.2,0.1}
\definecolor{makeaheadcolor}{rgb}{0.5,0.5,0.6}

%% Thanks to alephzero for the excellent start:
%% #1 [optional headnote]; #2 Title of recipe; #3 [Initial instructions]
\NewDocumentCommand{\recipe}{o m o}{%
    \setcounter{stepnum}{0}%
    \newpage
    \thispagestyle{fancy}
    \lhead{}%
    \chead{}%
    \rhead{}%
    \lfoot{}%
    \rfoot{}%
    \section{#2}%
    \IfNoValueF{#1}{\begin{center}\testoneline{#1}\end{center}}
    \IfNoValueF{#3}{\noindent\emph{#3}\par\medskip}
}
\newcommand{\serves}[2][Serves]{%
    \chead{#1 #2}}
\newcommand{\dishtype}[1]{%
    \rhead{#1}%
}
\newcommand{\dishother}[1]{%
    \lhead{#1}%
}
\newcommand{\vegetarian}{%
    {\large\color{vegcolor}\textbf{V}}%
}
\newcommand{\glutenfree}{%
    {\large\color{gfcolor}\textbf{GF}}%
}
\newcommand{\freeze}{%
    {\large\color{frzcolor}\textbf{F}}%
}
\newcommand{\dessert}{%
    {\large\color{dessertcolor}\textbf{D}}%
}
\newcommand{\makeahead}{%
    {\large\color{makeaheadcolor}\textbf{M}}%
}
%% Optional arguments for alternate names for these:
\newcommand{\preptime}[2][Prep time]{%
    \lfoot{#1: #2}%
}
\newcommand{\cooktime}[2][Cook time]{%
    \rfoot{#1: #2}%
}
\newcommand{\temp}[1]{%
    #1°C}
%% Optional argument is the width of the graphic, default = 1in
\newcommand{\showpic}[3][1in]{%
    \begin{center}
        \bigskip
            \includegraphics[width=#1]{#2}%
            \par
            \medskip
            \testoneline{#3}%
            \par
    \end{center}%
}

\def\ucit#1{\uppercase{#1}}
\begingroup
    \lccode`~=`\^^M
    \lowercase{%
\endgroup%% Ingredient first, then measure; empty measure and/or unit = " . "
    %% *=column break; amount<space>ingredient
    \NewDocumentCommand{\ing}{u{ } u{ } u{~}}{% %% basically the same as: \def\ing#1 #2~{% requires xparse
        \noindent
        \if#1#2% Is a heading, a non-ingredient, in the ingredients block
            \emph{#3}~ % A heading
        \else % Amounts containing spaces <1 teaspoon> have to use '~' <1~teaspoon>
            \textbf{\ucit#3, }#1\if.#2\else\ #2\fi~ %
        \fi
    }%
}%

\NewDocumentEnvironment{step}{}{%
    \parindent0pt
    \leftskip0pt
    \begin{minipage}{\textwidth}
        \begin{wrapfigure}{r}{0pt}
            \kern-0.5em
            \vrule width 1pt\enskip
            \begin{minipage}{0.5\textwidth}
                \leftskip=1.5em
                \parindent=-1.5em
                \parskip=0.25em
                \obeylines
                    \everypar={\ing}
}{%
        \wrapfill
    \end{minipage}
    \medskip
}

\NewDocumentCommand{\method}{}{%
            \end{minipage}
        \end{wrapfigure}
        \rightskip0pt plus 2em
        \parskip0.25em
        \everypar={\llap{\stepcounter{stepnum}\hbox to 1.5em{\thestepnum.\hfill}}}
}

\setmainfont{STIX Two Text}

\pagestyle{plain}
\setlength{\intextsep}{0pt}

\begin{document}

\frontmatter
\tableofcontents

\mainmatter

\recipe[Some would say this is better than pie. It is certainly easier. And delicious. The original recipe came from Dorie Greenspan; this version also includes almond flour, suggested by King Arthur Baking.]{French Apple Cake}[Center a rack in the oven and preheat the oven to 350°F. Generously butter an 8-inch springform pan and put it on a baking sheet lined with a silicone baking mat or parchment paper.]
\serves{6-8}
\preptime{1 hour}
\cooktime{1 hour}
\dishtype{\dessert}
\dishother{\glutenfree}

\begin{step}
. . Batter, the dry:
1 cup AP (or GF) flour
½ cup almond flour
1 teaspoon baking powder
½ teaspoon cinnamon
¼ teaspoon nutmeg
¼ teaspoon salt
\method
Whisk the flour, baking powder, spices, and salt together in small bowl.
\end{step}

\begin{step}
4 large apples (if you can, choose 4 different kinds)
\method
Peel the apples, cut them in half and remove the cores. Cut the apples into 1- to 2-inch chunks.
\end{step}

\begin{step}
. . Batter, the wet:
2 large eggs
¾ cup maple or brown sugar
3 tablespoons dark rum
½ teaspoon pure vanilla extract
2--3 drops lemon extract
8 tablespoons unsalted butter, melted and cooled
\method
In a medium bowl, beat the eggs with a whisk until they’re foamy. Pour in the sugar and whisk for a minute or so to blend. Whisk in the rum, vanilla, and lemon oil. Whisk in  the flour and when it is incorporated, add the melted butter, mixing gently so that you have a smooth, rather thick batter.

Use a rubber spatula to fold-in the apples--it might look as if there isn't enough batter, but there is. Put the batter into the prepared pan, smoothing the top as much as possible. Bake for 55--65 minutes, or until a toothpick inserted  in the middle comes out clean.

Let cool 30 minutes. Before removing the side of the springform pan, run a knife around the edge of the cake to make sure no apples stuck to the pan.
\end{step}


\end{document}

Novo exemplo

Estou tentado, um dia destes, a começar um blog nos moldes de “TeX in the Kitchen” ou “TeX en Cuisine” - pode revelar-se interessante...

Responder2

O primeiro passo que eu daria seria definir algumas macros para capturar osemânticada sua receita, em vez do LateXsintaxe.

Depois de fazer isso, você pode começar a ajustar o formato de cada item semântico (aplicar cor, etc.) independentemente da edição docontentedas receitas.

Isso não está completo (e, de qualquer forma, não sei exatamente como você quer que o livro fique!), mas é executado e dá a ideia básica.

\documentclass{article}
\usepackage{fancyhdr}
\usepackage{multicol}

% Your "recipes.sty" package starts here:
\newcommand{\recipe}{%
    \newpage\lhead{}\chead{}\rhead{}\lfoot{}\rfoot{}\section}
\newcommand{\serves}[1]{%
    \chead{Serves #1}}
\newcommand{\vegetarian}{%
    \rhead{V}}
\newcommand{\preptime}[1]{%
    \lfoot{Prep time: #1}}
\newcommand{\cooktime}[1]{%
    \rfoot{Cook time: #1}}
\newcommand{\ingredients}[1][\Large\emph{Ingredients}]{%
    \emph{#1}\\}
\newcommand{\instructions}[1][\Large\emph{Instructions}]{%
    \emph{#1}\\}
\newcommand{\temp}[1]{%
    $#1^\circ$C}

\pagestyle{fancy}
% End of "recipes.sty"

\begin{document}
\recipe{Raspberry Chocolate Tiramisu}
\serves{4}
\vegetarian

\begin{multicols}{2}
\ingredients
\begin{itemize}
    \item 100ml Double Strength Coffee
    \item 400g Raspberries (blitzed)
    \item 200g Mascarpone
    \item 2 tbsp Sweetener
    \item 1 tsp Vanilla Extract
    \item 700g Vanilla Yogurt
    \item 15g Dark Chocolate (finely grated)
\end{itemize}
\columnbreak
\ingredients[For the Crumble Mixture:]
\begin{itemize}
    \item 80g Wholemeal Flour
    \item 80g Plain Flour
    \item 80g Butter (diced)
    \item 70g Demerara Sugar
\end{itemize}
\end{multicols}

\instructions
Preheat the over to Gas Mark 4, Electric \temp{180}, Fan \temp{160}.
\begin{enumerate}
    \item Stir the two kinds of flour together in a bowl, add the butter and rub it into the flour. When the mixture looks like breadcrumbs, mix in the brown sugar. Lay the mixture on a shallow baking tray and bake for 25--30 minutes until golden brown. Leave on the side to cool.
    \item Mix together the mascarpone, sweetener, vanilla extract, and three quarters of the chocolate. Put half the crumble mixture in each of the glasses and pour over half the quark mixture along with half the raspberries.
    \item Put the other half of the crumble mixture on top, followed by the remaining quark mixture and raspberries. Sprinkle over the last of the chocolate. Chill for 3 hours before serving.
\end{enumerate}

\end{document}

Observe como as macros \instructionse \ingredientspossuem argumentos opcionais. Sem nenhum argumento, eles criam automaticamente o texto padrão “Instruções” e “Ingredientes”. Com um argumento entre colchetes, você pode sobrescrevê-lo, como em "For the Crumble Mixture:", etc.

informação relacionada