我一直在尝试使用 ShareLaTeX 创建一本好看的食谱书。我尝试过使用cookybooky
和cuisine
包,但似乎无法让它们工作。我希望每一页都有:
- 食谱的标题以及将该标题放在目录页中。
表示符号:
(a) 该餐食是否可以冷冻;
(b) 它是否是素食;
(c)制作需要多长时间(准备和烹饪时间);
(d) 为多少人提供服务。
配料表
(a)有自己的副标题;
(b)可以为腌料等添加副标题选项;
(c)排列为:数量测量成分(制剂)。
说明(再次带有自己的副标题)可选择将“将烤箱预热至 x 度”放在“说明”和第一条说明之间。
- 可以选择在同一位置为每个配方添加相同大小的图像。
目前,典型的食谱如下:
我对它的外观非常满意(尽管有些颜色可能不错)。但是,我都是“手工”完成的,因此要确保所有食谱都具有相同的格式需要做很多工作。
能制作这样的模板吗?
上述菜谱的代码:
\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}
答案1
感谢@alephzero 使这成为一个真正的 LaTeX 项目。也就是说,专注于配方的语义,而不是 LaTeX 标记。
为此,我更喜欢干净整洁的输入和输出。我曾经\obeylines
模拟列表环境,而没有附带的标记。我还使用了一些颜色来表示一些可能性。我在非常简单的代码中包含了注释,应该可以指明方向。Computer Modern 不是我的选择,但我不知道您的 TeXing 环境是什么,所以不想做任何不恰当的假设。我会将装饰保持在最低限度(规则等),以帮助尽可能清晰地呈现食谱。祝您胃口大开。
之后:
我补充了一些缺失的%
。此外,我还提供了将标题作为 的可选参数的可能性\recipe
。此外,为了我自己的利益,我借助 来geometry.sty
生成 5.5 英寸 x 8.5 英寸的输出。当然,可以根据需要进行更改。
后来:
我还应该指出,这将使用\frontmatter
和\backmatter
从创建目录book.cls
。有点像花生:你不能只吃一颗……
% !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}
再想想...
我不太喜欢这种格式,二分式,成分单独呈现在视觉上不同的区域,与方法完全分开。表面上,这样做的目的是让用户一开始就看到需要哪些原材料。伊莎贝拉·比顿(家政书,1861 年)敦促她的读者“严格遵循菜谱给出的顺序。因此,让他们首先在餐桌上摆放所有必要的食材;然后操作方式或准备方式将很容易管理”,这种做法现在通常称为错误到位。 但很多时候,尤其是在较长的食谱中,某些内容(通常是配料)会被遗漏或误读,或者当眼睛在配料和方法之间来回移动时,会跳过或误解某个步骤。其效果类似于阅读过长的文本行:眼睛无法正确找到下一行的开头,要么再次阅读同一行,要么跳过一行。(https://www.fonts.com/content/learning/fontology/level-2/text-typography/length-column-width) 无论如何,我只想说我会以不同的方式格式化这个食谱(见下文)。
目前,我将坚持使用这个食谱,并解决另一个问题:配料的说明。自从印刷品中出现二分格式以来(在英语中,19 世纪初),配料的说明方式就截然不同了。叙述格式:1 茶匙盐、1 杯面粉、2 盎司可可等。虽然在口语中是惯用的,但在印刷品中,这给人的印象是,不知何故数量成分是热门话题,而不是身份成分本身。幸运的是,TeX 提供了工具来纠正这个问题,通过解析成分,而不会用不必要的标记过度干扰这种习惯(如果不令人满意)的格式。此外,成分只有在前面没有数量时才应该大写(Whitman,食谱分类,第 124-125 页),如这里。此外,度量单位最好不要缩写(Whitman,食谱分类,第 15-16 页),除非篇幅有限。
此外,我使用 OpenType 字体(STIX Two)处理度数符号(°)和分数(½),进一步减少编码。
\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}
最后...
以下是同样的配方协调的二分格式,也就是说,每个步骤的配料都与该步骤一起显示(与之相配)。当我发现原始配方实际上没有使用配料表中要求的“双倍浓度咖啡”。我试图在所有三个版本中修复这个遗漏。
\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}
最后一件事...
正如@Alborz 非常正确地指出的那样,这里有些事情需要修复。对于配料表比其对应方法长的问题,我们要感谢 Donald Arseneau 提供的修复程序,\wrapfill
该修复程序可以在wrapfig.sty
下文中找到并已使用。在以下代码中输入配料也更简单:
\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}
有一天,我很想开一个博客,主题是“厨房里的 TeX”或“烹饪中的 TeX”——可能会很有趣...
答案2
我要采取的第一步是定义一些宏来捕获语义你的食谱,而不是 LateX句法。
完成此操作后,您可以开始调整每个语义项的格式(应用颜色等),而无需编辑内容的食谱。
这并不完整(并且无论如何,我不知道你到底想让这本书是什么样子!)但是它可以运行,并给出基本的想法。
\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}
\instructions
请注意和宏具有可选参数的方式\ingredients
。如果没有参数,它们会自动创建默认文本“说明”和“成分”。如果在方括号中使用参数,则可以覆盖该文本,例如“对于碎屑混合物:”等。