2

Background. This is about formatting a recipe page in a cookbook. The elements on the page are: (1) the recipe name/yield, (2) the recipe "story", and (3) a two-column section that includes both ingredients and instructions. A requirement is that items (1) and (3) remain on a single page. A strong desire is that item (2) starts before item (3). In some cases, a long item (2) story might push item (3) to the next page.

Question. Is there a way to break up the item (2) story so that it begins before item (3) but (after some selected number of lines) it jumps over item (3) and continues after it?

Note: I am hoping the typographic police will leave their tar and feathers in storage :-). I am also not sure this is a great idea but am developing it right now as an option. I couldn't find any "text wrapping around images" examples that seemed to apply.

\documentclass[10pt]{book}

\usepackage{enumitem, lipsum, changepage, multicol}                       

\begin{document}

\begin{center}
    {\sffamily\bfseries\fontsize{20}{24}\selectfont Chocolate Hazelnut Biscotti}\\
    \textit{Yield:40}
\end{center}

{\rmfamily\fontsize{12}{14.4}\selectfont
\begin{adjustwidth}{17pt}{17pt}
\lipsum[1]
\end{adjustwidth}
}

\begin{multicols}{2}{
    {
    \setlength{\parskip}{2pt}\sffamily\bfseries
    \obeylines\everypar={\hangindent1em}\raggedright 
        4 ounces unsalted butter, room~temperature     
        2 large eggs, room temperature         
        1 cup granulated sugar         
        1 tsp. vanilla extract        
        1 Tbsp. instant espresso powder        
        1/2 cup cocoa powder, sifted if necessary        
        1 1/2 cups flour       
        1/2 cup almond flour  
        1 tsp. baking soda      
        1/2 tsp. salt  
        1 cup toasted hazelnuts, roughly chopped (or pistachios or almonds)      
        3 ounces bittersweet chocolate, coarsely chopped

    }
    \begin{enumerate}[itemsep=0.5pt,leftmargin=*]
        {
        \item Preheat oven to 350\textdegree{} (325\textdegree{} for convection).  
        Spray baking sheets. 

        \item In a medium bowl, whisk together flour, cocoa, baking soda/powder 
        and salt. Beat the butter and sugar on medium-high speed until light and 
        fluffy.  Add the eggs one at a time and mix well.  Beat in vanilla 
        extract and espresso.   Add dry ingredients and mix until combined before 
        adding nuts and chocolate.  Mix just until incorporated.  Dough will be 
        stiff and sticky.   

        \item Divide dough into 2 equal pieces.  Using as little flour as possible, 
        roll each piece into logs that are 18 inches long.  Flatten to 2" wide.  
        Brush with beaten egg white and sprinkle with sugar.  Bake until firm in 
        the center, about 20-25 minutes.  Cool for about 15 minutes before slicing 
        and second bake.   

        \item With a serrated knife, cut logs into 1/2-inch slices.  Lay on the 
        baking sheets.  Bake for 10 minutes.  Turn biscotti over after 5 minutes.  
        These biscotti harden as they cool, so don't over bake. 

        }   
    \end{enumerate}
 }
\end{multicols} 
\end{document}

enter image description here

  • I think what you want is totally reasonable. I'm not sure LaTeX is the best choice for this. Still, what about making the two-column portion a float with specifier [b]? – TH. Apr 1 '18 at 23:18
  • The flowfram package might help. – Bernard Apr 1 '18 at 23:21
5

enter image description here

\documentclass[10pt]{book}
\usepackage{textcomp}%grrr
\usepackage{enumitem, lipsum, changepage, multicol}                       

\newbox\zzz
\begin{document}

\begin{center}
    {\sffamily\bfseries\fontsize{20}{24}\selectfont Chocolate Hazelnut Biscotti}\\
    \textit{Yield:40}
\end{center}

\setbox\zzz\vbox{\rmfamily\fontsize{12}{14.4}\selectfont
\begin{adjustwidth}{17pt}{17pt}
\lipsum[1]
\end{adjustwidth}
}

\vsplit\zzz to 5\dimexpr 14.4pt\relax\relax


\begin{multicols}{2}{
    {
    \setlength{\parskip}{2pt}\sffamily\bfseries
    \obeylines\everypar={\hangindent1em}\raggedright 
        4 ounces unsalted butter, room~temperature     
        2 large eggs, room temperature         
        1 cup granulated sugar         
        1 tsp. vanilla extract        
        1 Tbsp. instant espresso powder        
        1/2 cup cocoa powder, sifted if necessary        
        1 1/2 cups flour       
        1/2 cup almond flour  
        1 tsp. baking soda      
        1/2 tsp. salt  
        1 cup toasted hazelnuts, roughly chopped (or pistachios or almonds)      
        3 ounces bittersweet chocolate, coarsely chopped

    }
    \begin{enumerate}[itemsep=0.5pt,leftmargin=*]
        {
        \item Preheat oven to 350\textdegree{} (325\textdegree{} for convection).  
        Spray baking sheets. 

        \item In a medium bowl, whisk together flour, cocoa, baking soda/powder 
        and salt. Beat the butter and sugar on medium-high speed until light and 
        fluffy.  Add the eggs one at a time and mix well.  Beat in vanilla 
        extract and espresso.   Add dry ingredients and mix until combined before 
        adding nuts and chocolate.  Mix just until incorporated.  Dough will be 
        stiff and sticky.   

        \item Divide dough into 2 equal pieces.  Using as little flour as possible, 
        roll each piece into logs that are 18 inches long.  Flatten to 2" wide.  
        Brush with beaten egg white and sprinkle with sugar.  Bake until firm in 
        the center, about 20-25 minutes.  Cool for about 15 minutes before slicing 
        and second bake.   

        \item With a serrated knife, cut logs into 1/2-inch slices.  Lay on the 
        baking sheets.  Bake for 10 minutes.  Turn biscotti over after 5 minutes.  
        These biscotti harden as they cool, so don't over bake. 

        }   
    \end{enumerate}
 }
\end{multicols} 

\bigskip

\unvbox\zzz

\end{document}

enter image description here
  • \vsplit is a good idea. I completely forgot about it. What about putting the multicols in a box and using the box height to compute a good split point for the story box? – TH. Apr 1 '18 at 23:32
  • @TH. sure you can do that, I just vsplit after a fixed number of lines as you asked "(after some selected number of lines)" – David Carlisle Apr 2 '18 at 8:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.