diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b6e7ff4..8e8f47d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -15,7 +15,6 @@ jobs: run: | apk add make cd book - make all make release - name: Release book on S3 uses: shallwefootball/s3-upload-action@master diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 964068f..e8a8db6 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -12,4 +12,4 @@ jobs: run: | apk add make cd book - make all + make build_pdf diff --git a/.gitignore b/.gitignore index bc6c57e..969aadf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +*.xbb *.aux *.fdb_latexmk *.fls @@ -12,3 +13,38 @@ book/book.out .vscode/ book/book.synctex* +book/tikz-cache/* +book/bookch* +book/content.opf +book/output-epub +book/figures/*.png +book/figures/*.pdf +book/tables/*.png +book/tables/*.pdf +book/release/* +book/book.4ct +book/book.4tc +book/book.aux +book/book.bbl +book/book.bcf +book/book.blg +book/book.css +book/book.dvi +book/book.html +book/book.idv +book/book.lg +book/book.log +book/book.mobi +book/book.azw3 +book/book.epub +book/book.ncx +book/book.out +book/book.pdf +book/book.run.xml +book/book.tmp +book/book.toc +book/book.xref +book/book*.html +book/book-epub/ +book/book-mobi/ +book/book-azw3/ diff --git a/book/baking/baking-too-hot.jpeg b/book/baking/baking-too-hot.jpg similarity index 100% rename from book/baking/baking-too-hot.jpeg rename to book/baking/baking-too-hot.jpg diff --git a/book/baking/baking.tex b/book/baking/baking.tex index 6745847..649c407 100644 --- a/book/baking/baking.tex +++ b/book/baking/baking.tex @@ -3,29 +3,7 @@ your dough into the oven. This is typically done after your dough has gone through the bulk fermentation and proofing stage. \begin{figure}[!htb] - \begin{tikzpicture}[node distance = 3cm, auto] - \node [block] (heat_oven) {\footnotesize Heat oven to 230°C (446°F) for 30 minutes}; - \node [block, right of=heat_oven, node distance=3cm] (score_dough) {\footnotesize Score your dough}; - \node [decision, right of=score_dough, node distance=4cm] (decide_steam) {\footnotesize Choose your steaming method}; - \node [block, below of=heat_oven, node distance=4cm] (inverted_tray_method) {\footnotesize Inverted tray method}; - \node [block, right of=inverted_tray_method, node distance=3cm] (dutch_oven) {\footnotesize Dutch oven}; - \node [block, right of=dutch_oven, node distance=3cm] (steam_injection) {\footnotesize Steam injection oven}; - \node [block, below of=inverted_tray_method, node distance=3cm] (bake_30) {\footnotesize Bake dough for 30 minutes with steam}; - \node [block, right of=bake_30, node distance=3cm] (remove_steam) {\footnotesize Remove source of steam}; - \node [block, right of=remove_steam, node distance=3cm] (build_crust) {\footnotesize Build the crust}; - \node [block, right of=build_crust, node distance=3cm] (finish_baking) {\footnotesize Stop baking 10-30 minutes later depending on crust preference}; - \path [line] (heat_oven) -- (score_dough); - \path [line] (score_dough) -- (decide_steam); - \path [line] (decide_steam) -- (inverted_tray_method); - \path [line] (decide_steam) -- (dutch_oven); - \path [line] (decide_steam) -- (steam_injection); - \path [line] (steam_injection) -- (bake_30); - \path [line] (inverted_tray_method) -- (bake_30); - \path [line] (dutch_oven) -- (bake_30); - \path [line] (bake_30) -- (remove_steam); - \path [line] (remove_steam) -- (build_crust); - \path [line] (build_crust) -- (finish_baking); - \end{tikzpicture} + \includegraphics{figures/fig-baking-process.pdf} \caption{A schematic visualization of the baking process using different sources of steam in a home oven.} \label{fig:baking-process} \end{figure} @@ -41,22 +19,9 @@ Your dough starts to vertically rise. This is called oven spring. Your bread starts to build a crust of gel like consistency. The crust is still extensible and can be stretched. -\begin{table}[!htb] - \centering - \resizebox{\textwidth}{!}{% - \begin{tabular}{|l|l|l|} - \hline - \textbf{°C °F} & \textbf{Stage} & \textbf{Description} \\ \hline - 60 - 140 & Sterilisation & \begin{tabular}[c]{@{}l@{}}The temperature is too hot for your\\ microorganisms and they die\end{tabular} \\ \hline - 75 - 167 & Gel building & \begin{tabular}[c]{@{}l@{}}A gel builds on the surface persisting\\ your dough's structure. It is still\\ extensible and can spring in the\\ oven\end{tabular} \\ \hline - 100 - 212 & Water evaporates & \begin{tabular}[c]{@{}l@{}}Water begins to evaporate and\\ inflates your dough's alveoli\end{tabular} \\ \hline - 118 - 244 & Acetic acid evaporates & \begin{tabular}[c]{@{}l@{}}The vinegary tasting acid starts\\ to evaporate. The sourness decreases\end{tabular} \\ \hline - 122 - 252 & Lactic acid evaporates & \begin{tabular}[c]{@{}l@{}}The dairy tasting lactic acid begins\\ to evaporate. Sourness further decreases\end{tabular} \\ \hline - 140 - 284 & Maillard reaction & \begin{tabular}[c]{@{}l@{}}The maillard reaction starts to deform\\ starches and proteins. The dough starts\\ browning\end{tabular} \\ \hline - 170 - 338 & Caramelization & \begin{tabular}[c]{@{}l@{}}Remaining sugars begin to caramelise\\ giving your bread a distinct flavor\end{tabular} \\ \hline - \end{tabular}% - } - \caption{The different stages of the baking process and their impact on your bread} +\begin{table}[htp!] + \includegraphics[width=\textwidth]{tables/table-baking-process-stages.pdf} + \caption{The different stages that your dough undergoes during the baking process.} \end{table} At around 60°C (140°F) the microbes in your dough start to die. @@ -194,7 +159,7 @@ would like a soft crust you can steam your dough all the way. \begin{figure}[!htb] - \includegraphics[width=\textwidth]{baking-too-hot.jpeg} + \includegraphics[width=\textwidth]{baking-too-hot} \caption{A submission by Karomizu showing a bread that has been baked at too high a temperature or with too little steam. Note the large pockets of air towards the crust. They are a typical indicator.} @@ -241,27 +206,7 @@ created from the dough and water source stays around your dough. \begin{figure}[!htb] - \begin{tikzpicture}[node distance = 3cm, auto] - \node [block] (init) {\footnotesize Place water tray and stone in oven}; - \node [block, right of=init] (heat_oven) {\footnotesize Heat oven to 230°C (446°F) for 30 minutes}; - \node [block, right of=heat_oven] (score_your_dough) {\footnotesize Score your dough}; - \node [block, right of=score_your_dough] (spritz) {\footnotesize Spritz your dough with water}; - \node [block, right of=spritz] (load_tray) {\footnotesize Place non-preheated inverted tray in oven}; - \node [block, below of=load_tray, node distance=4cm] (load_doughs) {\footnotesize Load doughs into oven}; - \node [block, left of=load_doughs, node distance=3cm] (load_water) {\footnotesize Place water in heated water tray}; - \node [block, left of=load_water, node distance=3cm] (bake) {\footnotesize Bake 30 minutes or until core temperature is 92°C (197°F)}; - \node [block, left of=bake, node distance=3cm] (remove_steam) {\footnotesize Remove steam source and top tray}; - \node [block, left of=remove_steam, node distance=3cm] (finish) {\footnotesize Bake at least another 10 minutes or until crust has your desired color}; - \path [line] (init) -- (heat_oven); - \path [line] (heat_oven) -- (score_your_dough); - \path [line] (score_your_dough) -- (spritz); - \path [line] (spritz) -- (load_tray); - \path [line] (load_tray) -- (load_doughs); - \path [line] (load_doughs) -- (load_water); - \path [line] (load_water) -- (bake); - \path [line] (bake) -- (remove_steam); - \path [line] (remove_steam) -- (finish); - \end{tikzpicture} + \includegraphics{figures/fig-inverted-tray-method.pdf} \caption{A schematic visualization the inverted tray baking method that works great for home ovens.} \label{fig:inverted-tray-process} \end{figure} @@ -315,20 +260,10 @@ crust color. In my case this is another 15-25 minutes typically. \section{Conclusions} -\begin{table}[] - \centering - \resizebox{\textwidth}{!}{% - \begin{tabular}{|l|l|l|l|} - \hline - \textbf{Oven type} & \textbf{Plain (no tools)} & \textbf{Inverted tray} & \textbf{Dutch oven} \\ \hline - Gas & No & No & Yes \\ \hline - \begin{tabular}[c]{@{}l@{}}Convection\\ (Fan always on)\end{tabular} & No & No & Yes \\ \hline - \begin{tabular}[c]{@{}l@{}}Convection\\ (Fan can be disabled)\end{tabular} & No & Yes & Yes \\ \hline - Steam & Yes & Yes & Yes \\ \hline - \end{tabular}% - } - \caption{An overview of ovens and their different baking methods} -\end{table} +\begin{figure}[!htb] + \includegraphics[width=\textwidth]{tables/table-oven-baking-overview.pdf} + \caption{An overview of different oventypes and their different baking methods} +\end{figure} Depending on your home oven a different method of steaming should be used. Generally most ovens diff --git a/book/book.tex b/book/book.tex index b0481c8..e104af3 100644 --- a/book/book.tex +++ b/book/book.tex @@ -11,6 +11,7 @@ \usepackage{float} \usepackage[T1]{fontenc} \usepackage{tocloft} +\usepackage{tex4ebook} % References \usepackage[backend=biber]{biblatex} @@ -46,22 +47,14 @@ % Space between paragraphs \usepackage[skip=5pt plus1pt, indent=0pt]{parskip} -% Define styles for the flow chart graphics -\definecolor{codeblue}{RGB}{69, 161, 248} -\usepackage{tikz} -\usetikzlibrary{shapes,arrows} -\tikzstyle{decision} = [diamond, draw, fill=codeblue, text=white, - text width=4.5em, text badly centered, node distance=3cm, inner sep=0pt] -\tikzstyle{block} = [rectangle, draw, fill=codeblue, text=white, - text width=5em, text centered, rounded corners, minimum height=4em] -\tikzstyle{line} = [draw, -latex'] -\tikzstyle{cloud} = [draw, ellipse,fill=red!20, node distance=3cm, - minimum height=2em] - % Caption and figure size below images \usepackage{caption} \captionsetup[figure]{font=footnotesize} +% Basic attributes +\author{Hendrik Kleinwächter} +\title{The Sourdough Framework} + \begin{document} % Title page diff --git a/book/bread-types/bread-types.tex b/book/bread-types/bread-types.tex index af1fa8f..e4c0f24 100644 --- a/book/bread-types/bread-types.tex +++ b/book/bread-types/bread-types.tex @@ -7,21 +7,11 @@ the most accessible, least effort type of bread you can make. If you are a busy person and/or don't have an oven this might be exactly the type of bread you should consider. -\begin{table}[htp!] - \centering - \resizebox{\textwidth}{!}{% - \begin{tabular}{|l|l|l|l|} - \hline - & \textbf{Flat bread} & \textbf{Loaf pan bread} & \textbf{Free standing bread} \\ \hline - \textbf{Cooking method} & Fire, pan, barbecue & Oven & Oven \\ \hline - \textbf{Working time in minutes} & 3 & 5 & 60 \\ \hline - \textbf{Flour types} & All & All & Gluten flours \\ \hline - \textbf{Difficulty} & Very easy & Easy & Difficult \\ \hline - \textbf{Cost} & Low & Medium & High \\ \hline - \end{tabular}% - } - \caption{\label{tab:bread-types-comparison}An overview of different bread types} - \end{table} +\begin{figure}[!htb] + \includegraphics[width=\textwidth]{tables/table-overview-bread-types.pdf} + \caption{An overview of different bread types and their respective complexity} + \label{tab:bread-types-comparison} +\end{figure} \section{Flat bread} @@ -170,13 +160,7 @@ few steps you can stop buying bread forever. This works with every flour, including gluten free options. \begin{figure}[!htb] - \begin{tikzpicture}[node distance = 3cm, auto, every node/.style={inner sep=10, outer sep=0}] - \node [block] (init) {Mix ingredients}; - \node [block, right of=init, node distance=5cm] (wait) {Wait for dough to be ready}; - \node [block, right of=wait, node distance=5cm] (bake_bread) {Bake bread on stove}; - \path [line] (init) -- (wait); - \path [line] (wait) -- (bake_bread); - \end{tikzpicture} + \includegraphics{figures/fig-process-flat-bread.pdf} \caption{The process of making a flat bread is very simple requiring very little effort. This type of bread is especially handy for busy bakers.} \label{fig:flat-bread-process} @@ -187,23 +171,12 @@ I have little time or when I am abroad. You can choose between two options. 1) A flat bread similar to a roti or naan bread or 2) sourdough pancakes. -\begin{table}[htb!] - \centering - \resizebox{\textwidth}{!}{% - \begin{tabular}{|l|l|l|} - \hline - & \textbf{Flat breads} & \textbf{Pancakes} \\ \hline - \textbf{Flour} & 100g & 100g \\ \hline - \textbf{Water} & 100g (100\%) & 300g (300\%) \\ \hline - \textbf{Sourdough starter} & 5-20g (5-20\%) & 5-20g (5-20\%) \\ \hline - \textbf{Salt} & 2g (2\%) & 2g (2\%) \\ \hline - \textbf{When bake?} & Dough increased 50 percent in size & Bubbles visible on surface \\ \hline - \end{tabular}% - } +\begin{figure}[!htb] + \includegraphics[width=\textwidth]{tables/table-flat-bread-pancake-recipe.pdf} \caption{\label{tab:flat-bread-ingredients}Flat breads or pancakes recipe for 1 person. Multiply the ingredients to increase portion size. Refer to the section \ref{section:bakers-math} "\nameref{section:bakers-math}" to learn how to understand and use the percentages properly.} -\end{table} +\end{figure} To get started prepare your sourdough starter. If it has not been using for a very long time consider giving it another feeding. To do so simply take 1g of your @@ -240,7 +213,7 @@ when getting started. You can better observe the dough and see when it is ready. \begin{figure}[htb!] - \includegraphics[width=1.0\textwidth]{ethiopian-woman-checking-bread.jpeg} + \includegraphics[width=1.0\textwidth]{ethiopian-woman-checking-bread} \centering \caption{An ethiopian woman baking an "injera" made using teff flour. The image has been provided by Charliefleurene via Wikipedia} diff --git a/book/figures/fig-baking-process.tex b/book/figures/fig-baking-process.tex new file mode 100644 index 0000000..4b3c428 --- /dev/null +++ b/book/figures/fig-baking-process.tex @@ -0,0 +1,27 @@ +\input{./vars} + +\begin{document} +\begin{tikzpicture}[node distance = 3cm, auto] + \node [block] (heat_oven) {\footnotesize Heat oven to 230°C (446°F) for 30 minutes}; + \node [block, right of=heat_oven, node distance=3cm] (score_dough) {\footnotesize Score your dough}; + \node [decision, right of=score_dough, node distance=4cm] (decide_steam) {\footnotesize Choose your steaming method}; + \node [block, below of=heat_oven, node distance=4cm] (inverted_tray_method) {\footnotesize Inverted tray method}; + \node [block, right of=inverted_tray_method, node distance=3cm] (dutch_oven) {\footnotesize Dutch oven}; + \node [block, right of=dutch_oven, node distance=3cm] (steam_injection) {\footnotesize Steam injection oven}; + \node [block, below of=inverted_tray_method, node distance=3cm] (bake_30) {\footnotesize Bake dough for 30 minutes with steam}; + \node [block, right of=bake_30, node distance=3cm] (remove_steam) {\footnotesize Remove source of steam}; + \node [block, right of=remove_steam, node distance=3cm] (build_crust) {\footnotesize Build the crust}; + \node [block, right of=build_crust, node distance=3cm] (finish_baking) {\footnotesize Stop baking 10-30 minutes later depending on crust preference}; + \path [line] (heat_oven) -- (score_dough); + \path [line] (score_dough) -- (decide_steam); + \path [line] (decide_steam) -- (inverted_tray_method); + \path [line] (decide_steam) -- (dutch_oven); + \path [line] (decide_steam) -- (steam_injection); + \path [line] (steam_injection) -- (bake_30); + \path [line] (inverted_tray_method) -- (bake_30); + \path [line] (dutch_oven) -- (bake_30); + \path [line] (bake_30) -- (remove_steam); + \path [line] (remove_steam) -- (build_crust); + \path [line] (build_crust) -- (finish_baking); +\end{tikzpicture} +\end{document} diff --git a/book/figures/fig-dividing-preshaping.tex b/book/figures/fig-dividing-preshaping.tex new file mode 100644 index 0000000..51917ac --- /dev/null +++ b/book/figures/fig-dividing-preshaping.tex @@ -0,0 +1,13 @@ +\input{./vars} + +\begin{document} +\begin{tikzpicture}[node distance = 3cm, auto] + \node [block] (init) {\footnotesize Dividing required?}; + \node [decision, right of=init, node distance=5cm] (more_than_one_loaf) {\footnotesize More than 1 loaf?}; + \node [block, right of=more_than_one_loaf, node distance=5cm] (yes) {\footnotesize Yes}; + \node [block, below of=yes, node distance=3cm] (no) {\footnotesize No}; + \path [line] (init) -- (more_than_one_loaf); + \path [line] (more_than_one_loaf) -- (yes); + \path [line] (more_than_one_loaf) -- (no); +\end{tikzpicture} +\end{document} diff --git a/book/figures/fig-inverted-tray-method.tex b/book/figures/fig-inverted-tray-method.tex new file mode 100644 index 0000000..a47e55d --- /dev/null +++ b/book/figures/fig-inverted-tray-method.tex @@ -0,0 +1,25 @@ +\input{./vars} + +\begin{document} +\begin{tikzpicture}[node distance = 3cm, auto] + \node [block] (init) {\footnotesize Place water tray and stone in oven}; + \node [block, right of=init] (heat_oven) {\footnotesize Heat oven to 230°C (446°F) for 30 minutes}; + \node [block, right of=heat_oven] (score_your_dough) {\footnotesize Score your dough}; + \node [block, right of=score_your_dough] (spritz) {\footnotesize Spritz your dough with water}; + \node [block, right of=spritz] (load_tray) {\footnotesize Place non-preheated inverted tray in oven}; + \node [block, below of=load_tray, node distance=4cm] (load_doughs) {\footnotesize Load doughs into oven}; + \node [block, left of=load_doughs, node distance=3cm] (load_water) {\footnotesize Place water in heated water tray}; + \node [block, left of=load_water, node distance=3cm] (bake) {\footnotesize Bake 30 minutes or until core temperature is 92°C (197°F)}; + \node [block, left of=bake, node distance=3cm] (remove_steam) {\footnotesize Remove steam source and top tray}; + \node [block, left of=remove_steam, node distance=3cm] (finish) {\footnotesize Bake at least another 10 minutes or until crust has your desired color}; + \path [line] (init) -- (heat_oven); + \path [line] (heat_oven) -- (score_your_dough); + \path [line] (score_your_dough) -- (spritz); + \path [line] (spritz) -- (load_tray); + \path [line] (load_tray) -- (load_doughs); + \path [line] (load_doughs) -- (load_water); + \path [line] (load_water) -- (bake); + \path [line] (bake) -- (remove_steam); + \path [line] (remove_steam) -- (finish); +\end{tikzpicture} +\end{document} diff --git a/book/figures/fig-kneading-process.tex b/book/figures/fig-kneading-process.tex new file mode 100644 index 0000000..b892b3e --- /dev/null +++ b/book/figures/fig-kneading-process.tex @@ -0,0 +1,33 @@ +\input{./vars} + +\begin{document} +\begin{tikzpicture}[node distance = 3cm, auto] + \node [block] (init) {\footnotesize Homogenize recipe ingredients}; + \node [block, right of=init, node distance=3cm] (wait1) {\footnotesize Wait 15 minutes}; + \path [line] (init) -- (wait1); + \node [block, right of=wait1, node distance=3cm] (knead1) {\footnotesize Knead 5 minutes}; + \path [line] (wait1) -- (knead1); + \node [block, right of=knead1, node distance=3cm] (wait2) {\footnotesize Wait 15 minutes}; + \path [line] (knead1) -- (wait2); + \node [decision, below of=wait2, node distance=3cm] (windowpane_test) {\footnotesize Window-pane?}; + \path [line] (wait2) -- (windowpane_test); + \path [line] (windowpane_test) -- node{no} (knead1); + \node [decision, left of=windowpane_test, node distance=4.5cm] (more_water) {\footnotesize Bassinage for more water?}; + \path [line] (windowpane_test) -- node{yes} (more_water); + \node [block, left of=more_water, node distance=4.5cm] (add_water) {\footnotesize Add water}; + \path [line] (more_water) -- node{yes} (add_water); + \path [line] (add_water) -- (knead1); + \node [block, below of=add_water, node distance=4cm] (wait3) {\footnotesize Wait 15 minutes}; + \path [line] (add_water) -- (wait3); + \node [decision, right of=wait3, node distance=4.5cm] (dough_sample) {\footnotesize Aliquot jar?}; + \path [line] (wait3) -- (dough_sample); + \path [line] (more_water) -- node{no} (dough_sample); + \node [block, right of=dough_sample, node distance=4.5cm] (dough_ball) {\footnotesize Make round dough ball}; + \path [line] (dough_sample) -- node{no} (dough_ball); + \node [block, below of=dough_sample, node distance=3cm] (extract_sample) {\footnotesize Extract sample}; + \path [line] (dough_sample) -- node{yes} (extract_sample); + \path [line] (extract_sample) -- (dough_ball); + \node [block, below of=dough_ball, node distance=3cm] (begin_bulk) {\footnotesize Begin bulk fermentation}; + \path [line] (dough_ball) -- (begin_bulk); +\end{tikzpicture} +\end{document} diff --git a/book/figures/fig-liquid-starter-conversion.tex b/book/figures/fig-liquid-starter-conversion.tex new file mode 100644 index 0000000..f9b1848 --- /dev/null +++ b/book/figures/fig-liquid-starter-conversion.tex @@ -0,0 +1,23 @@ +\input{./vars} + +\begin{document} +\begin{tikzpicture}[node distance = 3cm, auto] + \node [block] (init) {\footnotesize Make a regular or stiff starter}; + \node [block, right of=init] (feed_new_ratio) {\footnotesize Mix 1g existing starter, 5g flour and 25g water}; + \node [block, right of=feed_new_ratio] (next_day) {\footnotesize Wait 24 hours}; + \node [block, below of=init, node distance=4cm] (feed_again) {\footnotesize Feed again using 1:5:25 ratio}; + \node [block, right of=next_day, node distance=5cm] (test) {\footnotesize Check starter readiness?}; + \node [decision, below of=next_day, node distance=4cm] (ready_signs) {\footnotesize Sour yogurty smell and bubbles visible on flour?}; + \node [block, below of=test, node distance=4cm] (last_feed) {\footnotesize Feed one last time}; + \node [block, below of=last_feed, node distance=3cm] (bread_dough) {\footnotesize Make bread dough}; + \path [line] (init) -- (feed_new_ratio); + \path [line] (feed_new_ratio) -- (next_day); + \path [line] (feed_again) -- node{\footnotesize repeat 3 times} (feed_new_ratio); + \path [line] (next_day) -- node{\footnotesize after 3 days} (test); + \path [line] (next_day) -- (feed_again); + \path [line] (test) -- (ready_signs); + \path [line] (ready_signs) -- node{\footnotesize no} (feed_again); + \path [line] (ready_signs) -- node{\footnotesize yes} (last_feed); + \path [line] (last_feed) -- node{\footnotesize after 6-12 hours} (bread_dough); +\end{tikzpicture} +\end{document} diff --git a/book/figures/fig-non-wheat-process.tex b/book/figures/fig-non-wheat-process.tex new file mode 100644 index 0000000..bc8b174 --- /dev/null +++ b/book/figures/fig-non-wheat-process.tex @@ -0,0 +1,17 @@ +\input{./vars} + +\begin{document} +\begin{tikzpicture}[node distance = 3cm, auto] + \node [block] (init) {\footnotesize Mix ingredients}; + \node [block, below of=init, node distance=3cm] (bulk_ferment) {\footnotesize Bulk ferment}; + \node [block, right of=init, node distance=3cm] (divide) {\footnotesize Divide}; + \node [block, below of=divide, node distance=3cm] (shape) {\footnotesize Shape}; + \node [block, right of=divide, node distance=3cm] (proof) {\footnotesize Proof}; + \node [block, below of=proof, node distance=3cm] (bake) {\footnotesize Bake}; + \path [line] (init) -- (bulk_ferment); + \path [line] (bulk_ferment) -- (divide); + \path [line] (divide) -- (shape); + \path [line] (shape) -- (proof); + \path [line] (proof) -- (bake); +\end{tikzpicture} +\end{document} diff --git a/book/figures/fig-process-flat-bread.tex b/book/figures/fig-process-flat-bread.tex new file mode 100644 index 0000000..dc4d19c --- /dev/null +++ b/book/figures/fig-process-flat-bread.tex @@ -0,0 +1,11 @@ +\input{./vars} + +\begin{document} +\begin{tikzpicture}[node distance = 3cm, auto, every node/.style={inner sep=10, outer sep=0}] +\node [block] (init) {Mix ingredients}; + \node [block, right of=init, node distance=5cm] (wait) {Wait for dough to be ready}; + \node [block, right of=wait, node distance=5cm] (bake_bread) {Bake bread on stove}; + \path [line] (init) -- (wait); + \path [line] (wait) -- (bake_bread); +\end{tikzpicture} +\end{document} diff --git a/book/figures/fig-proofing-process.tex b/book/figures/fig-proofing-process.tex new file mode 100644 index 0000000..db82fbb --- /dev/null +++ b/book/figures/fig-proofing-process.tex @@ -0,0 +1,26 @@ +\input{./vars} + +\begin{document} +\begin{tikzpicture}[node distance = 3cm, auto] + \node [decision] (init) {\footnotesize Room temperature proofing?}; + \node [decision, right of=init, node distance=9cm] (retard_bake_decision) {\footnotesize Bake in less than 10 hours from now?}; + \node [block, below of=init, node distance=4cm] (poke) {\footnotesize Poke the dough}; + \node [block, right of=poke, node distance=4cm] (wait_poke) {\footnotesize Wait 15 minutes}; + \node [decision, below of=poke, node distance=3cm] (dent_visible_decision) {\footnotesize Dent still visible after 1 minute?}; + \node [block, right of=dent_visible_decision, node distance=4cm] (bake) {\footnotesize Score and bake}; + \node [block, below of=retard_bake_decision, node distance=3cm] (wait_retard) {\footnotesize Wait 15 minutes}; + \node [block, below of=wait_retard, node distance=3cm] (retard) {\footnotesize Proof in fridge at 4°C (40°F)}; + \node [block, right of=wait_retard, node distance=3cm] (move_to_fridge) {\footnotesize Move dough directly to fridge}; + \path [line] (init) -- node{yes} (poke); + \path [line] (init) -- node{no} (retard_bake_decision); + \path [line] (poke) -- (dent_visible_decision); + \path [line] (dent_visible_decision) -- node{yes} (bake); + \path [line] (dent_visible_decision) -- node{no} (wait_poke); + \path [line] (wait_poke) -- (poke); + \path [line] (retard_bake_decision) -- node{yes} (wait_retard); + \path [line] (retard_bake_decision) -- node{no} (move_to_fridge); + \path [line] (wait_retard) -- (retard); + \path [line] (move_to_fridge) -- (retard); + \path [line] (retard) -- (bake); +\end{tikzpicture} +\end{document} diff --git a/book/figures/fig-shaping-process.tex b/book/figures/fig-shaping-process.tex new file mode 100644 index 0000000..2dd3a3d --- /dev/null +++ b/book/figures/fig-shaping-process.tex @@ -0,0 +1,21 @@ +\input{./vars} + +\begin{document} +\begin{tikzpicture}[node distance = 3cm, auto] + \node [block] (init) {\footnotesize Begin shaping}; + \node [decision, right of=init, node distance=5cm] (overfermented_decision) {\footnotesize Dough overly sticky or dough tears?}; + \node [block, right of=overfermented_decision, node distance=4cm] (overfermented) {\footnotesize Your dough is likely overfermented}; + \node [block, right of=overfermented, node distance=3cm] (loafpan) {\footnotesize Move to loaf pan, short proof, then bake directly}; + \node [block, below of=init, node distance=4cm] (shaping_technique) {\footnotesize Proceed with shaping technique}; + \node [block, right of=shaping_technique, node distance=3cm] (flour) {\footnotesize Flour shaped dough}; + \node [block, right of=flour, node distance=3cm] (banneton) {\footnotesize Place upside down in banneton}; + \node [block, right of=banneton, node distance=3cm] (proof) {\footnotesize Begin proofing}; + \path [line] (init) -- (overfermented_decision); + \path [line] (overfermented_decision) -- node{yes} (overfermented); + \path [line] (overfermented_decision) -- node{no} (shaping_technique); + \path [line] (shaping_technique) -- (flour); + \path [line] (flour) -- (banneton); + \path [line] (banneton) -- (proof); + \path [line] (overfermented) -- (loafpan); +\end{tikzpicture} +\end{document} diff --git a/book/figures/fig-starter-maintenance.tex b/book/figures/fig-starter-maintenance.tex new file mode 100644 index 0000000..ece5578 --- /dev/null +++ b/book/figures/fig-starter-maintenance.tex @@ -0,0 +1,36 @@ +\input{./vars} + +\begin{document} +\begin{tikzpicture}[node distance = 3cm, auto] + \node [block] (init) {\footnotesize Make your bread dough}; + \node [decision, below of=init, node distance=3.5cm] (all_starter_used) {\footnotesize All starter used?}; + \path [line] (init) -- (all_starter_used); + \node [block, right of=init, node distance=3cm] (use_dough) {\footnotesize Take 10g of your bread dough}; + \node [block, right of=all_starter_used, node distance=3cm] (use_starter) {\footnotesize Take all but not more than 10g of your starter}; + \path [line] (all_starter_used) -- node{yes} (use_dough); + \path [line] (all_starter_used) -- node{no} (use_starter); + \node [block, right of=use_dough, node distance=3cm] (feed_starter) {\footnotesize Feed using 1:5:5 ratio}; + \path [line] (use_dough) -- (feed_starter); + \path [line] (use_starter) -- (feed_starter); + \node [decision, right of=feed_starter, node distance=3cm] (bake_next_day_check) {\footnotesize Bake next day?}; + \path [line] (feed_starter) -- (bake_next_day_check); + \node [block, right of=bake_next_day_check, node distance=3.5cm] (make_bread_dough) {\footnotesize Make bread dough again after 8-12 hours}; + \path [line] (bake_next_day_check) -- node{yes} (make_bread_dough); + \node [decision, right of=use_starter, node distance=3cm] (bake_next_week_check) {\footnotesize Baking in next 2 weeks?}; + \node [block, right of=bake_next_week_check, node distance=3.5cm] (store_fridge) {\footnotesize Store starter in fridge at 4°C(40°F)}; + \path [line] (bake_next_week_check) -- node{yes} (store_fridge); + \node [block, right of=store_fridge, node distance=3cm] (feed_after_fridge) {\footnotesize Feed again using 1:5:5 ration 8-12 hours before making dough}; + \path [line] (store_fridge) -- (feed_after_fridge); + \path [line] (bake_next_day_check) -- node{no} (bake_next_week_check); + \node [decision, below of=use_starter, node distance=3cm] (freezer_check) {\footnotesize Have a freezer?}; + \path [line] (bake_next_week_check) -- (store_fridge); + \path [line] (bake_next_week_check) -- node{no} (freezer_check); + \node [block, right of=freezer_check, node distance=3cm] (dry_starter) {\footnotesize Dry your starter}; + \node [block, below of=dry_starter, node distance=3cm] (freeze_starter) {\footnotesize Freeze your starter}; + \path [line] (freezer_check) -- node{no} (dry_starter); + \path [line] (freezer_check) -- node{yes} (freeze_starter); + \node [block, right of=dry_starter, node distance=3.5cm] (reactivate_freezer) {\footnotesize Reactivate starter for 3 days with daily 1:5:5 feedings}; + \path [line] (dry_starter) -- (reactivate_freezer); + \path [line] (freeze_starter) -- (reactivate_freezer); +\end{tikzpicture} +\end{document} diff --git a/book/figures/fig-starter-process.tex b/book/figures/fig-starter-process.tex new file mode 100644 index 0000000..65e7597 --- /dev/null +++ b/book/figures/fig-starter-process.tex @@ -0,0 +1,24 @@ +\input{./vars} + +\begin{document} +\begin{tikzpicture}[node distance = 3cm, auto] + \node [block] (init) {\footnotesize Mix 50g flour + 50g water, stir}; + \node [block, right of=init, node distance=3cm] (wait1) {\footnotesize Wait 24 hours}; + \path [line] (init) -- (wait1); + \node [block, right of=wait1, node distance=3cm] (feed) {\footnotesize 10g of previous day + 50g water + 50g flour, stir}; + \path [line] (wait1) -- (feed); + \node [block, below of=feed] (discard) {\footnotesize Discard the rest}; + \path [line] (feed) -- (discard); + \node [decision, right of=feed, node distance=3.5cm] (decide) {\footnotesize Is good?}; + \node [decision, above of=decide, node distance=3cm] (timeout) {\footnotesize Less than 10 feeds?}; + \node [block, above of=feed, node distance=3cm] (wait2) {\footnotesize Wait 24 hours}; + \node [block, right of=timeout, node distance=3cm] (discard2) {\footnotesize Batch failed}; + \path [line] (timeout) -- node{no} (discard2); + \path [line] (timeout) -- node{yes} (wait2); + \path [line] (feed) -- (decide); + \node [block, right of=decide, node distance=3cm] (use) {\footnotesize Ready to use}; + \path [line] (decide) -- node{no} (timeout); + \path [line] (wait2) -- (feed); + \path [line] (decide) -- node{yes} (use); +\end{tikzpicture} +\end{document} diff --git a/book/figures/fig-starter-readiness.tex b/book/figures/fig-starter-readiness.tex new file mode 100644 index 0000000..eeced12 --- /dev/null +++ b/book/figures/fig-starter-readiness.tex @@ -0,0 +1,21 @@ +\input{./vars} + +\begin{document} +\begin{tikzpicture}[node distance = 3cm, auto] + \node [block] (init) {\footnotesize Make a starter}; + \node [block, right of=init, node distance=3cm] (feed) {\footnotesize Feed your starter}; + \path [line] (init) -- (feed); + \node [block, right of=feed, node distance=3cm] (ready_question) {\footnotesize Perform readiness check}; + \path [line] (feed) -- (ready_question); + \node [block, below of=feed, node distance=3cm] (wait_12) {\footnotesize Wait 12 hours}; + \path [line] (wait_12) -- (feed); + \node [decision, right of=ready_question, node distance=3.5cm] (is_bubbly) {\footnotesize Bubbly? Size Increase?}; + \path [line] (ready_question) -- (is_bubbly); + \path [line] (is_bubbly) -- node{no} (wait_12); + \node [decision, below of=is_bubbly, node distance=4.0cm] (check_smell) {\footnotesize Vinegary, or yogurt smell?}; + \path [line] (is_bubbly) -- node{yes} (check_smell); + \node [block, below of=init, node distance=6cm] (make_dough) {\footnotesize Make your dough}; + \path [line] (check_smell) -- node{yes} (make_dough); + \path [line] (check_smell) -- node{no} (wait_12); +\end{tikzpicture} +\end{document} diff --git a/book/figures/fig-stiff-starter-conversion.tex b/book/figures/fig-stiff-starter-conversion.tex new file mode 100644 index 0000000..f43475c --- /dev/null +++ b/book/figures/fig-stiff-starter-conversion.tex @@ -0,0 +1,23 @@ +\input{./vars} + +\begin{document} +\begin{tikzpicture}[node distance = 3cm, auto] + \node [block] (init) {\footnotesize Make a regular or liquid starter}; + \node [block, right of=init] (feed_new_ratio) {\footnotesize Mix 10g existing starter, 50g flour and 25g water}; + \node [block, right of=feed_new_ratio] (next_day) {\footnotesize Wait 24 hours}; + \node [block, below of=feed_new_ratio] (feed_again) {\footnotesize Feed again using 1:5:2.5 ratio}; + \node [block, right of=next_day, node distance=5cm] (test) {\footnotesize Check starter readiness?}; + \node [decision, right of=feed_again, node distance=4cm] (ready_signs) {\footnotesize Size increase and sour smell?}; + \node [block, right of=ready_signs, node distance=4cm] (last_feed) {\footnotesize Feed one last time}; + \node [block, below of=last_feed, node distance=3cm] (bread_dough) {\footnotesize Make bread dough}; + \path [line] (init) -- (feed_new_ratio); + \path [line] (feed_new_ratio) -- (next_day); + \path [line] (feed_again) -- node{\footnotesize repeat 3 times} (feed_new_ratio); + \path [line] (next_day) -- node{\footnotesize after 3 days} (test); + \path [line] (next_day) -- (feed_again); + \path [line] (test) -- (ready_signs); + \path [line] (ready_signs) -- node{\footnotesize no} (feed_again); + \path [line] (ready_signs) -- node{\footnotesize yes} (last_feed); + \path [line] (last_feed) -- node{\footnotesize after 6-12 hours} (bread_dough); +\end{tikzpicture} +\end{document} diff --git a/book/figures/fig-wheat-sourdough-process.tex b/book/figures/fig-wheat-sourdough-process.tex new file mode 100644 index 0000000..885352c --- /dev/null +++ b/book/figures/fig-wheat-sourdough-process.tex @@ -0,0 +1,26 @@ +\input{./vars} + +\begin{document} +\begin{tikzpicture}[node distance = 3cm, auto] + \node [block] (init) {\footnotesize Ready starter}; + \node [block, right of=init, node distance=3cm] (mix_ingredients) {\footnotesize Mix ingredients}; + \node [block, right of=mix_ingredients, node distance=3cm] (dough_strength) {\footnotesize Create dough strength}; + \node [block, right of=dough_strength, node distance=3cm] (bulk) {\footnotesize Bulk ferment}; + \node [decision, below of=dough_strength, node distance=3cm] (divide_test) {\footnotesize Making 1 loaf?}; + \node [block, left of=divide_test, node distance=3cm] (divide) {\footnotesize Divide}; + \node [block, left of=divide, node distance=3cm] (preshape) {\footnotesize Preshape}; + \node [block, below of=preshape, node distance=3cm] (shape) {\footnotesize Shape}; + \node [block, right of=shape, node distance=3cm] (proof) {\footnotesize Proof}; + \node [block, right of=proof, node distance=3cm] (bake) {\footnotesize Bake}; + \path [line] (init) -- (mix_ingredients); + \path [line] (mix_ingredients) -- (dough_strength); + \path [line] (dough_strength) -- (bulk); + \path [line] (bulk) -- (divide_test); + \path [line] (divide_test) -- node{yes} (shape); + \path [line] (divide_test) -- node{no} (divide); + \path [line] (divide) -- (preshape); + \path [line] (preshape) -- (shape); + \path [line] (shape) -- (proof); + \path [line] (proof) -- (bake); +\end{tikzpicture} +\end{document} diff --git a/book/figures/fig-wheat-sourdough-starter-process.tex b/book/figures/fig-wheat-sourdough-starter-process.tex new file mode 100644 index 0000000..b549d8d --- /dev/null +++ b/book/figures/fig-wheat-sourdough-starter-process.tex @@ -0,0 +1,34 @@ +\input{./vars} + +\begin{document} +\begin{tikzpicture}[node distance = 3cm, auto] + \node [decision] (init) {\footnotesize Starter last fed within 3 days?}; + \node [block, right of=init, node distance=4cm] (feed_no_branch) + {\footnotesize Feed starter twice. 48 hours before and 6-12 hours before}; + \node [block, below of=feed_no_branch, node distance=3cm] (feed_yes_branch) + {\footnotesize Feed starter once 6-12 hours before making dough}; + \node [block, right of=feed_no_branch, node distance=6cm] (high_ratio) + {\footnotesize Use a 1:10:10 ratio. 10g starter, 100g flour, 100g water}; + \node [block, right of=feed_yes_branch, node distance=3cm] (low_ratio) + {\footnotesize Use a 1:5:5 ratio. 10g starter, 50g flour, 50g water}; + \node [block, below of=high_ratio, node distance=6cm] (check_starter) + {\footnotesize Check if starter is ready to be used}; + \node [decision, below of=init, node distance=6cm] (size_check) + {\footnotesize Bubbly? Increased in size?}; + \node [decision, below of=size_check, node distance=5cm] (smell_check) + {\footnotesize Vinegary or yogurty smell?}; + \node [block, right of=smell_check, node distance=6cm] (make_dough) + {\footnotesize Prepare dough}; + \path [line] (init) -- node{no} (feed_no_branch); + \path [line] (init) -- node{yes} (feed_yes_branch); + \path [line] (feed_yes_branch) -- (low_ratio); + \path [line] (feed_no_branch) -- (high_ratio); + \path [line] (high_ratio) -- (check_starter); + \path [line] (low_ratio) -- (check_starter); + \path [line] (check_starter) -- (size_check); + \path [line] (size_check) -- node{no} (feed_yes_branch); + \path [line] (size_check) -- node{yes} (smell_check); + \path [line] (smell_check) -- node{no} (feed_yes_branch); + \path [line] (smell_check) -- node{yes} (make_dough); +\end{tikzpicture} +\end{document} diff --git a/book/figures/vars.tex b/book/figures/vars.tex new file mode 100644 index 0000000..2eaa770 --- /dev/null +++ b/book/figures/vars.tex @@ -0,0 +1,10 @@ +\documentclass[tikz]{standalone} +\usepackage{tikz} + +\definecolor{codeblue}{RGB}{69, 161, 248} +\usetikzlibrary{shapes,arrows} +\tikzstyle{decision} = [diamond, draw, fill=codeblue, text=white, + text width=4.5em, text badly centered, node distance=3cm, inner sep=0pt] +\tikzstyle{block} = [rectangle, draw, fill=codeblue, text=white, + text width=5em, text centered, rounded corners, minimum height=4em] +\tikzstyle{line} = [draw, -latex'] diff --git a/book/flour-types/flour-types.tex b/book/flour-types/flour-types.tex index 2a19c69..e1aa0e7 100644 --- a/book/flour-types/flour-types.tex +++ b/book/flour-types/flour-types.tex @@ -12,21 +12,11 @@ activated. The whitest flour you can get is mostly just the starch part of the s Depending on which layers are still present, names are used to describe the type of flour. -\begin{table}[htb!] -\centering -\resizebox{\textwidth}{!}{% -\begin{tabular}{|l|l|r|r|r|} -\hline -\textbf{Type USA} & \textbf{Type UK} & \multicolumn{1}{l|}{\textbf{Type Germany}} & \multicolumn{1}{l|}{\textbf{Type France}} & \multicolumn{1}{l|}{\textbf{Type Italy}} \\ \hline -Cake & Soft flour & T405 & T45 & 00 \\ \hline -All purpose & Plain flour & T550 & T55 & 0 \\ \hline - & & T812 & T80 & 1 \\ \hline - & & T1050 & T110 & 2 \\ \hline -Whole & Whole & Vollkorn & T150 & Integrale \\ \hline -\end{tabular}% -} -\caption{\label{tab:flour-types-comparison}A comparison of the different wheat flour types} -\end{table} +\begin{figure}[!htb] + \includegraphics[width=\textwidth]{tables/table-flour-types.pdf} + \label{tab:flour-types-comparison} + \caption{A comparison of the different wheat flour types} +\end{figure} In Germany the ash content is used to describe the flours. The lab will burn 100 grams of flour in the oven. Then afterwards the remaining ash is extracted @@ -57,25 +47,10 @@ structure. For no/low gluten flour your main focus is managing acidity. You do n want the final bread to be too sour. You do not have to worry about the gluten degradation, removing a huge headache from the equation. -\begin{table}[] - \centering - \resizebox{\textwidth}{!}{% - \begin{tabular}{|l|l|l|l|l|} - \hline - \textbf{Grain type} & \textbf{Homogenize} & \textbf{Knead} & \textbf{Stretch \& Fold} & \textbf{Shape} \\ \hline - \textbf{Wheat} & Yes & Yes & Yes & Yes \\ \hline - \textbf{\textgreater 70\% Wheat} & Yes & Yes & Yes & Yes \\ \hline - \textbf{Spelt} & Yes & Yes & Yes & Yes \\ \hline - \textbf{Rye} & Yes & No & No & No \\ \hline - \textbf{Emmer} & Yes & No & No & No \\ \hline - \textbf{Einkorn} & Yes & No & No & No \\ \hline - \textbf{Rice} & Yes & No & No & No \\ \hline - \textbf{Corn} & Yes & No & No & No \\ \hline - \end{tabular}% - } +\begin{figure}[!htb] + \includegraphics[width=\textwidth]{tables/table-grains-bread-making-process.pdf} \caption{An overview of different grain types and the steps involved in the respective bread making process} -\end{table} - +\end{figure} As gluten has a special role, the rest of this chapter is dedicated to having a closer look at different gluten flours and how to distinguish them. Spelt @@ -123,21 +98,11 @@ product out of a high W flour you will need to have a long fermentation period. The long fermentation period also means that your microbes will enrich your dough with more flavor. -\begin{table}[] - \centering - \resizebox{\textwidth}{!}{% - \begin{tabular}{|l|r|l|r|} - \hline - \textbf{W-Value} & \multicolumn{1}{l|}{\textbf{Hydration in \%}} & \textbf{Uses} & \multicolumn{1}{l|}{\textbf{Fermentation times}} \\ \hline - 0-150 & 50 & Cookies & Very short \\ \hline - 150-250 & 50-60 & Cakes, Bread, Pizza & Short-Medium \\ \hline - 250-350 & 60-70 & Bread, Pizza & Long \\ \hline - 350+ & 70-90 & Bread, Pizza & Very long \\ \hline - \end{tabular}% - } - \caption{\label{tab:w-value}An overview of different levels of W values and the respective hydrations and fermentation times} -\end{table} - +\begin{figure}[!htb] + \includegraphics[width=\textwidth]{tables/table-overview-w-values.pdf} + \caption{An overview of different levels of W values and the respective hydrations and fermentation times} + \label{tab:w-value} +\end{figure} Generally, when aiming to bake free standing sourdough bread aim for a higher protein content. If the diff --git a/book/images/apple-experiment-temperatures.jpeg b/book/images/apple-experiment-temperatures.jpg similarity index 100% rename from book/images/apple-experiment-temperatures.jpeg rename to book/images/apple-experiment-temperatures.jpg diff --git a/book/images/external/ethiopian-woman-checking-bread.jpeg b/book/images/external/ethiopian-woman-checking-bread.jpg similarity index 100% rename from book/images/external/ethiopian-woman-checking-bread.jpeg rename to book/images/external/ethiopian-woman-checking-bread.jpg diff --git a/book/latexmkrc b/book/latexmkrc new file mode 100644 index 0000000..dd76b82 --- /dev/null +++ b/book/latexmkrc @@ -0,0 +1,5 @@ +END{ +# system("tex4ebook -j output -m draft -a debug main > tex4ebook.log"); +system("tex4ebook -j output -e build.mk4 main"); +system("rm tikz-cache/*"); +} diff --git a/book/makefile b/book/makefile index 52ddaa4..269c0eb 100644 --- a/book/makefile +++ b/book/makefile @@ -1,23 +1,74 @@ -all: +.PHONY: build_pdf +build_pdf: clean figures tables pdflatex book.tex biber book pdflatex book.tex -fast: - pdflatex book.tex +.PHONY: figures +figures: + cd figures && find . -name "fig-*.tex" -exec pdflatex '{}' \; && cd ../ +.PHONY: tables +tables: + cd tables && find . -name "table-*.tex" -exec pdflatex '{}' \; && cd ../ + +.PHONY: clean clean: - rm book.blg - rm book.bbl - rm book.aux - rm book.out - rm book.toc - rm book.run.xml - rm book.bcf - rm book.pdf - rm book.log + rm -f book.blg + rm -f book.bbl + rm -f book.aux + rm -f book.out + rm -f book.toc + rm -f book.run.xml + rm -f book.bcf + rm -f book.pdf + rm -f book.log + rm -f book.mobi + rm -f book.4ct + rm -f book.4tc + rm -f book.dvi + rm -f book.epub + rm -f book.css + rm -f book.fdb_latexmk + rm -f book.fls + rm -f book.idv + rm -f book.lg + rm -f book.ncx + rm -f book.tmp + rm -f book.xref + rm -f book*.svg + rm -f book*.html + rm -f book*.xhtml + rm -rf book-epub/ + rm -rf book-epub3/ + rm -rf book-mobi/ + rm -f *.pdf + rm -f output.log + rm -f content.opf + rm -rf figures/*.aux + rm -rf figures/*.fdb_latexmk + rm -rf figures/*.fls + rm -rf figures/*.log + rm -rf figures/*.pdf + rm -rf figures/*.png + find . -name "*.xbb" | xargs rm -f + rm -rf release/ -release: - rm -rf release - mkdir release +.PHONY: release +release: clean build_pdf make_release_dir build_ebook cp book.pdf release/TheBreadCode-The-Sourdough-Framework.pdf + cp book.epub release/TheBreadCode-The-Sourdough-Framework.epub + cp book.mobi release/TheBreadCode-The-Sourdough-Framework.mobi + cp book.azw3 release/TheBreadCode-The-Sourdough-Framework.azw3 + +.PHONY: make_release_dir +make_release_dir: + mkdir -p release + +.PHONY: build_ebook +build_ebook: build_pdf make_release_dir + find . -name "*.jpg" | xargs ebb -x + find . -name "*.png" | xargs ebb -x + tex4ebook -c tex4ebook.cfg -f epub book.tex + tex4ebook -c tex4ebook.cfg -f mobi book.tex + tex4ebook -c tex4ebook.cfg -f azw3 book.tex diff --git a/book/non-wheat-sourdough/non-wheat-sourdough.tex b/book/non-wheat-sourdough/non-wheat-sourdough.tex index 11f5862..c16877d 100644 --- a/book/non-wheat-sourdough/non-wheat-sourdough.tex +++ b/book/non-wheat-sourdough/non-wheat-sourdough.tex @@ -27,19 +27,7 @@ of gluten development, the final bread will feature a denser crumb compared to wheat. \begin{figure}[!htb] - \begin{tikzpicture}[node distance = 3cm, auto] - \node [block] (init) {\footnotesize Mix ingredients}; - \node [block, below of=init, node distance=3cm] (bulk_ferment) {\footnotesize Bulk ferment}; - \node [block, right of=init, node distance=3cm] (divide) {\footnotesize Divide}; - \node [block, below of=divide, node distance=3cm] (shape) {\footnotesize Shape}; - \node [block, right of=divide, node distance=3cm] (proof) {\footnotesize Proof}; - \node [block, below of=proof, node distance=3cm] (bake) {\footnotesize Bake}; - \path [line] (init) -- (bulk_ferment); - \path [line] (bulk_ferment) -- (divide); - \path [line] (divide) -- (shape); - \path [line] (shape) -- (proof); - \path [line] (proof) -- (bake); - \end{tikzpicture} + \includegraphics{figures/fig-non-wheat-process.pdf} \caption{A visualization of the process to make non-wheat sourdough bread. The process is much simpler than making wheat sourdough bread. There is no gluten development. The ingredients are simply mixed together.} @@ -165,4 +153,4 @@ almost daily basis. The effort required to make bread like this is much lower compared to a wheat-based dough. In some cases, I extend the recipe and add additional sourdough discard to the dough. You can add as much discard as you like. The resulting -bread has a very complex but delicious flavor profile. \ No newline at end of file +bread has a very complex but delicious flavor profile. diff --git a/book/sourdough-starter/sourdough-starter-types.tex b/book/sourdough-starter/sourdough-starter-types.tex index 8071eb5..48e170a 100644 --- a/book/sourdough-starter/sourdough-starter-types.tex +++ b/book/sourdough-starter/sourdough-starter-types.tex @@ -3,17 +3,11 @@ at different sourdough starter types and their respective traits. \begin{table}[htp!] -\centering -\resizebox{\textwidth}{!}{% -\begin{tabular}{|l|l|l|r|l|} -\hline -\textbf{Starter type} & \textbf{Hydration in \%} & \textbf{Flour type} & \multicolumn{1}{l|}{\textbf{Yeast activity}} & \textbf{Bacterial activity} \\ \hline -Regular & 100 & Strong wheat flour & Balanced & Balanced \\ \hline -Liquid & 500 & Very strong wheat flour & Minimal & High \\ \hline -Stiff & 50-60 & All wheat flour & High & Low \\ \hline -\end{tabular}% -} -\caption{\label{tab:starter-types-comparison}A comparison of different sourdough starter types} + \includegraphics[width=\textwidth]{tables/table-starter-types.pdf} + \caption{A comparison of different sourdough starter types and their + respective properties. The only difference is the level of water (hydration) + that is used when feeding the starter.} + \label{tab:starter-types-comparison} \end{table} Depending on the flour you have at hand the type of starter changes. With more @@ -118,26 +112,9 @@ starter's flavour by changing the type to a liquid starter. \label{fig:liquid-sourdough-starter} \end{figure} + \begin{figure}[!htb] - \begin{tikzpicture}[node distance = 3cm, auto] - \node [block] (init) {\footnotesize Make a regular or stiff starter}; - \node [block, right of=init] (feed_new_ratio) {\footnotesize Mix 1g existing starter, 5g flour and 25g water}; - \node [block, right of=feed_new_ratio] (next_day) {\footnotesize Wait 24 hours}; - \node [block, below of=init, node distance=4cm] (feed_again) {\footnotesize Feed again using 1:5:25 ratio}; - \node [block, right of=next_day, node distance=5cm] (test) {\footnotesize Check starter readiness?}; - \node [decision, below of=next_day, node distance=4cm] (ready_signs) {\footnotesize Sour yogurty smell and bubbles visible on flour?}; - \node [block, below of=test, node distance=4cm] (last_feed) {\footnotesize Feed one last time}; - \node [block, below of=last_feed, node distance=3cm] (bread_dough) {\footnotesize Make bread dough}; - \path [line] (init) -- (feed_new_ratio); - \path [line] (feed_new_ratio) -- (next_day); - \path [line] (feed_again) -- node{\footnotesize repeat 3 times} (feed_new_ratio); - \path [line] (next_day) -- node{\footnotesize after 3 days} (test); - \path [line] (next_day) -- (feed_again); - \path [line] (test) -- (ready_signs); - \path [line] (ready_signs) -- node{\footnotesize no} (feed_again); - \path [line] (ready_signs) -- node{\footnotesize yes} (last_feed); - \path [line] (last_feed) -- node{\footnotesize after 6-12 hours} (bread_dough); - \end{tikzpicture} + \includegraphics{figures/fig-liquid-starter-conversion.pdf} \caption{The process to convert your regular or stiff starter into a liquid starter. The whole process takes around 3 days. The longer you maintain your starter at the suggested hydration level the more adapted your microorganisms become. It is recommended @@ -210,25 +187,7 @@ around 50 to 60 percent. So for 100 grams of flour you are using around 50 to 60 grams of water. \begin{figure}[!htb] - \begin{tikzpicture}[node distance = 3cm, auto] - \node [block] (init) {\footnotesize Make a regular or liquid starter}; - \node [block, right of=init] (feed_new_ratio) {\footnotesize Mix 10g existing starter, 50g flour and 25g water}; - \node [block, right of=feed_new_ratio] (next_day) {\footnotesize Wait 24 hours}; - \node [block, below of=feed_new_ratio] (feed_again) {\footnotesize Feed again using 1:5:2.5 ratio}; - \node [block, right of=next_day, node distance=5cm] (test) {\footnotesize Check starter readiness?}; - \node [decision, right of=feed_again, node distance=4cm] (ready_signs) {\footnotesize Size increase and sour smell?}; - \node [block, right of=ready_signs, node distance=4cm] (last_feed) {\footnotesize Feed one last time}; - \node [block, below of=last_feed, node distance=3cm] (bread_dough) {\footnotesize Make bread dough}; - \path [line] (init) -- (feed_new_ratio); - \path [line] (feed_new_ratio) -- (next_day); - \path [line] (feed_again) -- node{\footnotesize repeat 3 times} (feed_new_ratio); - \path [line] (next_day) -- node{\footnotesize after 3 days} (test); - \path [line] (next_day) -- (feed_again); - \path [line] (test) -- (ready_signs); - \path [line] (ready_signs) -- node{\footnotesize no} (feed_again); - \path [line] (ready_signs) -- node{\footnotesize yes} (last_feed); - \path [line] (last_feed) -- node{\footnotesize after 6-12 hours} (bread_dough); - \end{tikzpicture} + \includegraphics{figures/fig-stiff-starter-conversion.pdf} \caption{The process to convert your regular starter into a stiff starter. The whole process takes around 3 days. The longer you maintain your starter at the suggested hydration level the more adapted your microorganisms become. The diff --git a/book/sourdough-starter/sourdough-starter.tex b/book/sourdough-starter/sourdough-starter.tex index 083f758..ff5c18f 100644 --- a/book/sourdough-starter/sourdough-starter.tex +++ b/book/sourdough-starter/sourdough-starter.tex @@ -34,19 +34,10 @@ but there is an easier way. This is where baker's math comes in handy. Let's look at the default recipe with baker's math and then adjust it for the 1.4 kilogram flour quantity. -\begin{table}[H] -\centering -\resizebox{\textwidth}{!}{% -\begin{tabular}{|l|r|r|} -\hline -\textbf{Ingredient} & \multicolumn{1}{l|}{\textbf{Percent}} & \multicolumn{1}{l|}{\textbf{Calculation}} \\ \hline -1000g flour & 100\% & 1000g of 1000g = 100\% \\ \hline -600g water & 60\% & 600g of 1000g = 60\% \\ \hline -100g sourdough starter & 10\% & 100g of 1000g = 10\% \\ \hline -20g salt & 2\% & 20g of 1000g = 2\% \\ \hline -\end{tabular}% -} -\end{table} +\begin{figure}[!htb] + \includegraphics[width=\textwidth]{tables/table-bakers-math-example.pdf} + \caption{An example table demonstrating how to properly calclate using baker's math} +\end{figure} Note how each of the ingredients is calculated as a percentage based on the flour. The 100 percent is the baseline as the absolute @@ -57,19 +48,11 @@ Now let's go back to our example and add just the flour, as we have more flour available the next day. As mentioned the next day we have 1.4 kilograms at hand (1400 grams). -\begin{table}[H] -\centering -\resizebox{\textwidth}{!}{% -\begin{tabular}{|l|r|r|} -\hline -\textbf{Ingredient} & \multicolumn{1}{l|}{\textbf{Baker's math}} & \multicolumn{1}{l|}{\textbf{Calculated value}} \\ \hline -Flour & 100\% & 1400*1 = 1400g \\ \hline -Water & 60\% & 1400*0.6 = 840g \\ \hline -Sourdough starter & 10\% & 1400*0.1 = 140g \\ \hline -Salt & 2\% & 1400*0.02 = 28g \\ \hline -\end{tabular}% -} -\end{table} +\begin{figure}[H] + \includegraphics[width=\textwidth]{tables/table-recipe-bakers-math.pdf} + \caption{An example recipe that uses 1400 grams as base and is then + calculated using baker's math} +\end{figure} For each ingredient we calculate the percentage based on the flour available (1400 grams). So for the water @@ -133,26 +116,7 @@ use a glass and place another inverted one on top. The container shouldn't be airtight. You still want some gas exchange to be possible. \begin{figure}[!htb] - \begin{tikzpicture}[node distance = 3cm, auto] - \node [block] (init) {\footnotesize Mix 50g flour + 50g water, stir}; - \node [block, right of=init, node distance=3cm] (wait1) {\footnotesize Wait 24 hours}; - \path [line] (init) -- (wait1); - \node [block, right of=wait1, node distance=3cm] (feed) {\footnotesize 10g of previous day + 50g water + 50g flour, stir}; - \path [line] (wait1) -- (feed); - \node [block, below of=feed] (discard) {\footnotesize Discard the rest}; - \path [line] (feed) -- (discard); - \node [decision, right of=feed, node distance=3.5cm] (decide) {\footnotesize Is good?}; - \node [decision, above of=decide, node distance=3cm] (timeout) {\footnotesize Less than 10 feeds?}; - \node [block, above of=feed, node distance=3cm] (wait2) {\footnotesize Wait 24 hours}; - \node [block, right of=timeout, node distance=3cm] (discard2) {\footnotesize Batch failed}; - \path [line] (timeout) -- node{no} (discard2); - \path [line] (timeout) -- node{yes} (wait2); - \path [line] (feed) -- (decide); - \node [block, right of=decide, node distance=3cm] (use) {\footnotesize Ready to use}; - \path [line] (decide) -- node{no} (timeout); - \path [line] (wait2) -- (feed); - \path [line] (decide) -- node{yes} (use); - \end{tikzpicture} + \includegraphics{figures/fig-starter-process.pdf} \caption{The process of making a sourdough starter from scratch} \label{fig:sourdough-starter-process} \end{figure} @@ -270,23 +234,7 @@ yeast has been isolated like this from century old sourdough starters. \begin{figure}[!htb] - \begin{tikzpicture}[node distance = 3cm, auto] - \node [block] (init) {\footnotesize Make a starter}; - \node [block, right of=init, node distance=3cm] (feed) {\footnotesize Feed your starter}; - \path [line] (init) -- (feed); - \node [block, right of=feed, node distance=3cm] (ready_question) {\footnotesize Perform readiness check}; - \path [line] (feed) -- (ready_question); - \node [block, below of=feed, node distance=3cm] (wait_12) {\footnotesize Wait 12 hours}; - \path [line] (wait_12) -- (feed); - \node [decision, right of=ready_question, node distance=3.5cm] (is_bubbly) {\footnotesize Bubbly? Size Increase?}; - \path [line] (ready_question) -- (is_bubbly); - \path [line] (is_bubbly) -- node{no} (wait_12); - \node [decision, below of=is_bubbly, node distance=4.0cm] (check_smell) {\footnotesize Vinegary, or yogurt smell?}; - \path [line] (is_bubbly) -- node{yes} (check_smell); - \node [block, below of=init, node distance=6cm] (make_dough) {\footnotesize Make your dough}; - \path [line] (check_smell) -- node{yes} (make_dough); - \path [line] (check_smell) -- node{no} (wait_12); - \end{tikzpicture} + \includegraphics{figures/fig-starter-readiness.pdf} \caption{A flow chart showing you how to determine if your sourdough starter is ready to be used. For checking readiness look at a size increase and take note of your starter's smell. Both are important indicators to check for readiness.} @@ -353,38 +301,7 @@ yeast part of your sourdough and balance the fermentation. \section{Maintenance} \begin{figure}[!htb] - \begin{tikzpicture}[node distance = 3cm, auto] - \node [block] (init) {\footnotesize Make your bread dough}; - \node [decision, below of=init, node distance=3.5cm] (all_starter_used) {\footnotesize All starter used?}; - \path [line] (init) -- (all_starter_used); - \node [block, right of=init, node distance=3cm] (use_dough) {\footnotesize Take 10g of your bread dough}; - \node [block, right of=all_starter_used, node distance=3cm] (use_starter) {\footnotesize Take all but not more than 10g of your starter}; - \path [line] (all_starter_used) -- node{yes} (use_dough); - \path [line] (all_starter_used) -- node{no} (use_starter); - \node [block, right of=use_dough, node distance=3cm] (feed_starter) {\footnotesize Feed using 1:5:5 ratio}; - \path [line] (use_dough) -- (feed_starter); - \path [line] (use_starter) -- (feed_starter); - \node [decision, right of=feed_starter, node distance=3cm] (bake_next_day_check) {\footnotesize Bake next day?}; - \path [line] (feed_starter) -- (bake_next_day_check); - \node [block, right of=bake_next_day_check, node distance=3.5cm] (make_bread_dough) {\footnotesize Make bread dough again after 8-12 hours}; - \path [line] (bake_next_day_check) -- node{yes} (make_bread_dough); - \node [decision, right of=use_starter, node distance=3cm] (bake_next_week_check) {\footnotesize Baking in next 2 weeks?}; - \node [block, right of=bake_next_week_check, node distance=3.5cm] (store_fridge) {\footnotesize Store starter in fridge at 4°C(40°F)}; - \path [line] (bake_next_week_check) -- node{yes} (store_fridge); - \node [block, right of=store_fridge, node distance=3cm] (feed_after_fridge) {\footnotesize Feed again using 1:5:5 ration 8-12 hours before making dough}; - \path [line] (store_fridge) -- (feed_after_fridge); - \path [line] (bake_next_day_check) -- node{no} (bake_next_week_check); - \node [decision, below of=use_starter, node distance=3cm] (freezer_check) {\footnotesize Have a freezer?}; - \path [line] (bake_next_week_check) -- (store_fridge); - \path [line] (bake_next_week_check) -- node{no} (freezer_check); - \node [block, right of=freezer_check, node distance=3cm] (dry_starter) {\footnotesize Dry your starter}; - \node [block, below of=dry_starter, node distance=3cm] (freeze_starter) {\footnotesize Freeze your starter}; - \path [line] (freezer_check) -- node{no} (dry_starter); - \path [line] (freezer_check) -- node{yes} (freeze_starter); - \node [block, right of=dry_starter, node distance=3.5cm] (reactivate_freezer) {\footnotesize Reactivate starter for 3 days with daily 1:5:5 feedings}; - \path [line] (dry_starter) -- (reactivate_freezer); - \path [line] (freeze_starter) -- (reactivate_freezer); - \end{tikzpicture} + \includegraphics{figures/fig-starter-maintenance.pdf} \caption{A full flowchart showing you how to conduct proper sourdough starter maintenance. You can use a piece of your dough as the next starter. You can also use left-over starter and feed it again. Choose an option that works fest for your own schedule. The chart assumes that you are using a starter at a 100 percent diff --git a/book/storing-bread/storing-bread.tex b/book/storing-bread/storing-bread.tex index 59926af..6ac3225 100644 --- a/book/storing-bread/storing-bread.tex +++ b/book/storing-bread/storing-bread.tex @@ -3,19 +3,12 @@ methods of storing your bread. This way your bread can best be enjoyed at a later time. -\begin{table}[!htb] - \begin{tabular}{|l|l|l|} - \hline - \textbf{Method} & \textbf{Advantages} & \textbf{Disadvantages} \\ \hline - \textbf{\begin{tabular}[c]{@{}l@{}}Room\\ temperature\end{tabular}} & \begin{tabular}[c]{@{}l@{}}The easiest option. Best for bread that\\ is eaten within a day. Crust typically\\ stays crisp when humidity not too high.\end{tabular} & Bread dries out very quickly. \\ \hline - \textbf{\begin{tabular}[c]{@{}l@{}}Room\\ temperature\\ in container\end{tabular}} & \begin{tabular}[c]{@{}l@{}}Good for up to a week. Catches mold\\ more quickly.\end{tabular} & \begin{tabular}[c]{@{}l@{}}Bread needs to be toasted\\ for crust to become crisp again.\end{tabular} \\ \hline - \textbf{Fridge} & \begin{tabular}[c]{@{}l@{}}Bread stays good for weeks. Can dry\\ out a little bit when not using air-tight\\ container.\end{tabular} & \begin{tabular}[c]{@{}l@{}}Bread needs to be toasted.\\ Requires fridge and energy.\end{tabular} \\ \hline - \textbf{Freezer} & Bread stays good for years. & \begin{tabular}[c]{@{}l@{}}Requires thawing and then\\ toasting. Requires freezer and\\ energy.\end{tabular} \\ \hline - \end{tabular} +\begin{figure}[!htb] + \includegraphics[width=\textwidth]{tables/table-storing-bread-overview.pdf} \caption{A table visualizing the advantages and disadvantages of different bread storing options.} \label{table:bread-storage} -\end{table} +\end{figure} \section{Room temperature} @@ -116,4 +109,4 @@ that you like. This option is great for the very long-term storage. Personally I like having a few slices of bread frozen as an emergency -backup when I had no time to bake. \ No newline at end of file +backup when I had no time to bake. diff --git a/book/tables/table-bakers-math-example.tex b/book/tables/table-bakers-math-example.tex new file mode 100644 index 0000000..dc80fb9 --- /dev/null +++ b/book/tables/table-bakers-math-example.tex @@ -0,0 +1,12 @@ +\input{./vars} + +\begin{document} +\begin{tabular}{|l|r|r|} +\hline +\textbf{Ingredient} & \multicolumn{1}{l|}{\textbf{Percent}} & \multicolumn{1}{l|}{\textbf{Calculation}} \\ \hline +1000g flour & 100\% & 1000g of 1000g = 100\% \\ \hline +600g water & 60\% & 600g of 1000g = 60\% \\ \hline +100g sourdough starter & 10\% & 100g of 1000g = 10\% \\ \hline +20g salt & 2\% & 20g of 1000g = 2\% \\ \hline +\end{tabular} +\end{document} diff --git a/book/tables/table-baking-process-stages.tex b/book/tables/table-baking-process-stages.tex new file mode 100644 index 0000000..b350d7f --- /dev/null +++ b/book/tables/table-baking-process-stages.tex @@ -0,0 +1,16 @@ +\input{./vars} + +\begin{document} +\begin{tabular}{|l|l|l|} +\hline +\textbf{°C °F} & \textbf{Stage} & \textbf{Description} \\ \hline +60 - 140 & Sterilisation & \begin{tabular}[c]{@{}l@{}}The temperature is too hot for your\\ microorganisms and they die\end{tabular} \\ \hline +75 - 167 & Gel building & \begin{tabular}[c]{@{}l@{}}A gel builds on the surface persisting\\ your dough's structure. It is still\\ extensible and can spring in the\\ oven\end{tabular} \\ \hline +100 - 212 & Water evaporates & \begin{tabular}[c]{@{}l@{}}Water begins to evaporate and\\ inflates your dough's alveoli\end{tabular} \\ \hline +118 - 244 & Acetic acid evaporates & \begin{tabular}[c]{@{}l@{}}The vinegary tasting acid starts\\ to evaporate. The sourness decreases\end{tabular} \\ \hline +122 - 252 & Lactic acid evaporates & \begin{tabular}[c]{@{}l@{}}The dairy tasting lactic acid begins\\ to evaporate. Sourness further decreases\end{tabular} \\ \hline +140 - 284 & Maillard reaction & \begin{tabular}[c]{@{}l@{}}The maillard reaction starts to deform\\ starches and proteins. The dough starts\\ browning\end{tabular} \\ \hline +170 - 338 & Caramelization & \begin{tabular}[c]{@{}l@{}}Remaining sugars begin to caramelise\\ giving your bread a distinct flavor\end{tabular} \\ \hline +\end{tabular} +\end{document} + diff --git a/book/tables/table-dough-size-increase.tex b/book/tables/table-dough-size-increase.tex new file mode 100644 index 0000000..47d2c98 --- /dev/null +++ b/book/tables/table-dough-size-increase.tex @@ -0,0 +1,12 @@ +\input{./vars} + +\begin{document} +\begin{tabular}{|r|r|} +\hline +\multicolumn{1}{|l|}{\textbf{Flour protein content}} & \multicolumn{1}{l|}{\textbf{Relative aliquot size increase}} \\ \hline +8-10\% & 25\% \\ \hline +10-12\% & 50\% \\ \hline +12-15\% & 100\% \\ \hline +\textgreater 15\% & \textgreater 100\% \\ \hline +\end{tabular} +\end{document} diff --git a/book/tables/table-fermentation-effects.tex b/book/tables/table-fermentation-effects.tex new file mode 100644 index 0000000..f3bd80a --- /dev/null +++ b/book/tables/table-fermentation-effects.tex @@ -0,0 +1,13 @@ +\input{./vars} + +\begin{document} +\begin{tabular}{|l|l|l|l|} +\hline +\textbf{} & \textbf{\begin{tabular}[c]{@{}l@{}}Too short\\ fermentation\end{tabular}} & \textbf{\begin{tabular}[c]{@{}l@{}}Too long\\ fermentation\end{tabular}} & \textbf{\begin{tabular}[c]{@{}l@{}}Perfect\\ fermentation\end{tabular}} \\ \hline +\textbf{\begin{tabular}[c]{@{}l@{}}Crumb\\ texture\end{tabular}} & \begin{tabular}[c]{@{}l@{}}Unbaked gummy areas\\ towards the bottom of\\ the bread\end{tabular} & \begin{tabular}[c]{@{}l@{}}Crumb can be\\ perceived as\\ gummy, as most\\ gluten broken\\ down\end{tabular} & \begin{tabular}[c]{@{}l@{}}Crumb evenly baked.\\ Crumb can be perceived\\ as moist, but not\\ gummy\end{tabular} \\ \hline +\textbf{Alveoli} & \begin{tabular}[c]{@{}l@{}}Overly large alveoli\\ in the crumb "craters"\end{tabular} & \begin{tabular}[c]{@{}l@{}}Many tiny alveoli\\ equally distributed\end{tabular} & \begin{tabular}[c]{@{}l@{}}Alveoli evenly\\ distributed, no\\ "craters"\end{tabular} \\ \hline +\textbf{Taste} & Pale neutral taste & \begin{tabular}[c]{@{}l@{}}Strong acidic flavor\\ profile. Acidity\\ overweighs when\\ tasting\end{tabular} & \begin{tabular}[c]{@{}l@{}}Balanced flavor profile,\\ not too mild but also\\ not too sour. Depending\\ on starter vinegary\\ or lactic notes\end{tabular} \\ \hline +\textbf{Texture} & Overall poor Texture & \begin{tabular}[c]{@{}l@{}}Good consistency,\\ crumb is not as fluffy\\ as it could be\end{tabular} & \begin{tabular}[c]{@{}l@{}}Great combination of \\ textures\end{tabular} \\ \hline +\textbf{\begin{tabular}[c]{@{}l@{}}Oven\\ spring\end{tabular}} & \begin{tabular}[c]{@{}l@{}}Vertical oven spring,\\ mostly due to water\\ evaporating and\\ inflating the dough\end{tabular} & \begin{tabular}[c]{@{}l@{}}Very flat pancake like \\ structure after baking\end{tabular} & \begin{tabular}[c]{@{}l@{}}Great vertical oven\\ spring. Dough grows\\ more upwards rather\\ than sideways\end{tabular} \\ \hline +\end{tabular} +\end{document} diff --git a/book/tables/table-flat-bread-pancake-recipe.tex b/book/tables/table-flat-bread-pancake-recipe.tex new file mode 100644 index 0000000..5ec6493 --- /dev/null +++ b/book/tables/table-flat-bread-pancake-recipe.tex @@ -0,0 +1,13 @@ +\input{./vars} + +\begin{document} +\begin{tabular}{|l|l|l|} +\hline + & \textbf{Flat breads} & \textbf{Pancakes} \\ \hline +\textbf{Flour} & 100g & 100g \\ \hline +\textbf{Water} & 100g (100\%) & 300g (300\%) \\ \hline +\textbf{Sourdough starter} & 5-20g (5-20\%) & 5-20g (5-20\%) \\ \hline +\textbf{Salt} & 2g (2\%) & 2g (2\%) \\ \hline +\textbf{When bake?} & Dough increased 50 percent in size & Bubbles visible on surface \\ \hline +\end{tabular} +\end{document} diff --git a/book/tables/table-flour-types.tex b/book/tables/table-flour-types.tex new file mode 100644 index 0000000..30c0cf4 --- /dev/null +++ b/book/tables/table-flour-types.tex @@ -0,0 +1,13 @@ +\input{./vars} + +\begin{document} +\begin{tabular}{|l|l|r|r|r|} +\hline +\textbf{Type USA} & \textbf{Type UK} & \multicolumn{1}{l|}{\textbf{Type Germany}} & \multicolumn{1}{l|}{\textbf{Type France}} & \multicolumn{1}{l|}{\textbf{Type Italy}} \\ \hline +Cake & Soft flour & T405 & T45 & 00 \\ \hline +All purpose & Plain flour & T550 & T55 & 0 \\ \hline + & & T812 & T80 & 1 \\ \hline + & & T1050 & T110 & 2 \\ \hline +Whole & Whole & Vollkorn & T150 & Integrale \\ \hline +\end{tabular} +\end{document} diff --git a/book/tables/table-grains-bread-making-process.tex b/book/tables/table-grains-bread-making-process.tex new file mode 100644 index 0000000..67e8045 --- /dev/null +++ b/book/tables/table-grains-bread-making-process.tex @@ -0,0 +1,16 @@ +\input{./vars} + +\begin{document} +\begin{tabular}{|l|l|l|l|l|} +\hline +\textbf{Grain type} & \textbf{Homogenize} & \textbf{Knead} & \textbf{Stretch \& Fold} & \textbf{Shape} \\ \hline +\textbf{Wheat} & Yes & Yes & Yes & Yes \\ \hline +\textbf{\textgreater 70\% Wheat} & Yes & Yes & Yes & Yes \\ \hline +\textbf{Spelt} & Yes & Yes & Yes & Yes \\ \hline +\textbf{Rye} & Yes & No & No & No \\ \hline +\textbf{Emmer} & Yes & No & No & No \\ \hline +\textbf{Einkorn} & Yes & No & No & No \\ \hline +\textbf{Rice} & Yes & No & No & No \\ \hline +\textbf{Corn} & Yes & No & No & No \\ \hline +\end{tabular} +\end{document} diff --git a/book/tables/table-oven-baking-overview.tex b/book/tables/table-oven-baking-overview.tex new file mode 100644 index 0000000..bbca38b --- /dev/null +++ b/book/tables/table-oven-baking-overview.tex @@ -0,0 +1,12 @@ +\input{./vars} + +\begin{document} +\begin{tabular}{|l|l|l|l|} +\hline +\textbf{Oven type} & \textbf{Plain (no tools)} & \textbf{Inverted tray} & \textbf{Dutch oven} \\ \hline +Gas & No & No & Yes \\ \hline +\begin{tabular}[c]{@{}l@{}}Convection\\ (Fan always on)\end{tabular} & No & No & Yes \\ \hline +\begin{tabular}[c]{@{}l@{}}Convection\\ (Fan can be disabled)\end{tabular} & No & Yes & Yes \\ \hline +Steam & Yes & Yes & Yes \\ \hline +\end{tabular} +\end{document} diff --git a/book/tables/table-overview-bread-types.tex b/book/tables/table-overview-bread-types.tex new file mode 100644 index 0000000..d50f154 --- /dev/null +++ b/book/tables/table-overview-bread-types.tex @@ -0,0 +1,13 @@ +\input{./vars} + +\begin{document} +\begin{tabular}{|l|l|l|l|} +\hline + & \textbf{Flat bread} & \textbf{Loaf pan bread} & \textbf{Free standing bread} \\ \hline +\textbf{Cooking method} & Fire, pan, barbecue & Oven & Oven \\ \hline +\textbf{Working time in minutes} & 3 & 5 & 60 \\ \hline +\textbf{Flour types} & All & All & Gluten flours \\ \hline +\textbf{Difficulty} & Very easy & Easy & Difficult \\ \hline +\textbf{Cost} & Low & Medium & High \\ \hline +\end{tabular} +\end{document} diff --git a/book/tables/table-overview-w-values.tex b/book/tables/table-overview-w-values.tex new file mode 100644 index 0000000..569a969 --- /dev/null +++ b/book/tables/table-overview-w-values.tex @@ -0,0 +1,12 @@ +\input{./vars} + +\begin{document} +\begin{tabular}{|l|r|l|r|} +\hline +\textbf{W-Value} & \multicolumn{1}{l|}{\textbf{Hydration in \%}} & \textbf{Uses} & \multicolumn{1}{l|}{\textbf{Fermentation times}} \\ \hline +0-150 & 50 & Cookies & Very short \\ \hline +150-250 & 50-60 & Cakes, Bread, Pizza & Short-Medium \\ \hline +250-350 & 60-70 & Bread, Pizza & Long \\ \hline +350+ & 70-90 & Bread, Pizza & Very long \\ \hline +\end{tabular} +\end{document} diff --git a/book/tables/table-ph-values-dough.tex b/book/tables/table-ph-values-dough.tex new file mode 100644 index 0000000..3879438 --- /dev/null +++ b/book/tables/table-ph-values-dough.tex @@ -0,0 +1,15 @@ +\input{./vars} + +\begin{document} +\begin{tabular}{|l|r|} +\hline +\textbf{Step} & \multicolumn{1}{l|}{\textbf{pH Value}} \\ \hline +Starter ready & 4.20 \\ \hline +Mixing & 6.00 \\ \hline +Dividing/preshaping & 4.10 \\ \hline +Shaping & 4.05 \\ \hline +Before proofing & 4.03 \\ \hline +After proofing & 3.80 \\ \hline +After baking & 3.90 \\ \hline +\end{tabular} +\end{document} diff --git a/book/tables/table-recipe-bakers-math.tex b/book/tables/table-recipe-bakers-math.tex new file mode 100644 index 0000000..2f6b859 --- /dev/null +++ b/book/tables/table-recipe-bakers-math.tex @@ -0,0 +1,12 @@ +\input{./vars} + +\begin{document} +\begin{tabular}{|l|r|r|} +\hline +\textbf{Ingredient} & \multicolumn{1}{l|}{\textbf{Baker's math}} & \multicolumn{1}{l|}{\textbf{Calculated value}} \\ \hline +Flour & 100\% & 1400*1 = 1400g \\ \hline +Water & 60\% & 1400*0.6 = 840g \\ \hline +Sourdough starter & 10\% & 1400*0.1 = 140g \\ \hline +Salt & 2\% & 1400*0.02 = 28g \\ \hline +\end{tabular} +\end{document} diff --git a/book/tables/table-starter-types.tex b/book/tables/table-starter-types.tex new file mode 100644 index 0000000..88ede4e --- /dev/null +++ b/book/tables/table-starter-types.tex @@ -0,0 +1,11 @@ +\input{./vars} + +\begin{document} +\begin{tabular}{|l|l|l|r|l|} +\hline +\textbf{Starter type} & \textbf{Hydration in \%} & \textbf{Flour type} & \multicolumn{1}{l|}{\textbf{Yeast activity}} & \textbf{Bacterial activity} \\ \hline +Regular & 100 & Strong wheat flour & Balanced & Balanced \\ \hline +Liquid & 500 & Very strong wheat flour & Minimal & High \\ \hline +Stiff & 50-60 & All wheat flour & High & Low \\ \hline +\end{tabular} +\end{document} diff --git a/book/tables/table-starter-usage-activity.tex b/book/tables/table-starter-usage-activity.tex new file mode 100644 index 0000000..7a9d9bc --- /dev/null +++ b/book/tables/table-starter-usage-activity.tex @@ -0,0 +1,14 @@ +\input{./vars} + +\begin{document} +\begin{tabular}{|l|l|l|l|} +\hline +\textbf{\begin{tabular}[c]{@{}l@{}}Temperature\\ in °C\end{tabular}} & \textbf{\begin{tabular}[c]{@{}l@{}}Temperature\\ in °F\end{tabular}} & \textbf{\begin{tabular}[c]{@{}l@{}}Starter\\ recently fed?\end{tabular}} & \textbf{\begin{tabular}[c]{@{}l@{}}Amount\\ of starter in\%\end{tabular}} \\ \hline +30 & 86 & Yes & 5 \\ \hline +25 & 77 & Yes & 10 \\ \hline +20 & 68 & Yes & 15 \\ \hline +30 & 86 & No & 2.5 \\ \hline +25 & 77 & No & 5 \\ \hline +20 & 68 & No & 10 \\ \hline +\end{tabular} +\end{document} diff --git a/book/tables/table-storing-bread-overview.tex b/book/tables/table-storing-bread-overview.tex new file mode 100644 index 0000000..1daa8db --- /dev/null +++ b/book/tables/table-storing-bread-overview.tex @@ -0,0 +1,12 @@ +\input{./vars} + +\begin{document} +\begin{tabular}{|l|l|l|} +\hline +\textbf{Method} & \textbf{Advantages} & \textbf{Disadvantages} \\ \hline +\textbf{\begin{tabular}[c]{@{}l@{}}Room\\ temperature\end{tabular}} & \begin{tabular}[c]{@{}l@{}}The easiest option. Best for bread that\\ is eaten within a day. Crust typically\\ stays crisp when humidity not too high.\end{tabular} & Bread dries out very quickly. \\ \hline +\textbf{\begin{tabular}[c]{@{}l@{}}Room\\ temperature\\ in container\end{tabular}} & \begin{tabular}[c]{@{}l@{}}Good for up to a week. Catches mold\\ more quickly.\end{tabular} & \begin{tabular}[c]{@{}l@{}}Bread needs to be toasted\\ for crust to become crisp again.\end{tabular} \\ \hline +\textbf{Fridge} & \begin{tabular}[c]{@{}l@{}}Bread stays good for weeks. Can dry\\ out a little bit when not using air-tight\\ container.\end{tabular} & \begin{tabular}[c]{@{}l@{}}Bread needs to be toasted.\\ Requires fridge and energy.\end{tabular} \\ \hline +\textbf{Freezer} & Bread stays good for years. & \begin{tabular}[c]{@{}l@{}}Requires thawing and then\\ toasting. Requires freezer and\\ energy.\end{tabular} \\ \hline +\end{tabular} +\end{document} diff --git a/book/tables/vars.tex b/book/tables/vars.tex new file mode 100644 index 0000000..be12b11 --- /dev/null +++ b/book/tables/vars.tex @@ -0,0 +1 @@ +\documentclass{standalone} diff --git a/book/tex4ebook.cfg b/book/tex4ebook.cfg new file mode 100644 index 0000000..b84c63a --- /dev/null +++ b/book/tex4ebook.cfg @@ -0,0 +1,8 @@ +\Preamble{xhtml} +\begin{document} +\Configure{DocumentLanguage}{en} +\Configure{OpfScheme}{URI} +\Configure{UniqueIdentifier}{https://the-bread-code.io} +\Configure{CoverMimeType}{image/jpeg} +\CoverMetadata{images/cover-page.jpg} +\EndPreamble diff --git a/book/troubleshooting/crumb-structures/baked-too-hot-v2.JPG b/book/troubleshooting/crumb-structures/baked-too-hot-v2.jpg similarity index 100% rename from book/troubleshooting/crumb-structures/baked-too-hot-v2.JPG rename to book/troubleshooting/crumb-structures/baked-too-hot-v2.jpg diff --git a/book/troubleshooting/crumb-structures/baked-too-hot.JPG b/book/troubleshooting/crumb-structures/baked-too-hot.jpg similarity index 100% rename from book/troubleshooting/crumb-structures/baked-too-hot.JPG rename to book/troubleshooting/crumb-structures/baked-too-hot.jpg diff --git a/book/troubleshooting/crumb-structures/flat-bread.jpeg b/book/troubleshooting/crumb-structures/flat-bread.jpg similarity index 100% rename from book/troubleshooting/crumb-structures/flat-bread.jpeg rename to book/troubleshooting/crumb-structures/flat-bread.jpg diff --git a/book/troubleshooting/crumb-structures/no-steam.jpeg b/book/troubleshooting/crumb-structures/no-steam.jpg similarity index 100% rename from book/troubleshooting/crumb-structures/no-steam.jpeg rename to book/troubleshooting/crumb-structures/no-steam.jpg diff --git a/book/wheat-sourdough/wheat-sourdough.tex b/book/wheat-sourdough/wheat-sourdough.tex index 3253f68..95efd48 100644 --- a/book/wheat-sourdough/wheat-sourdough.tex +++ b/book/wheat-sourdough/wheat-sourdough.tex @@ -43,28 +43,7 @@ that tastes much better than any store-bought bread. \section{The process} \begin{figure}[!htb] - \begin{tikzpicture}[node distance = 3cm, auto] - \node [block] (init) {\footnotesize Ready starter}; - \node [block, right of=init, node distance=3cm] (mix_ingredients) {\footnotesize Mix ingredients}; - \node [block, right of=mix_ingredients, node distance=3cm] (dough_strength) {\footnotesize Create dough strength}; - \node [block, right of=dough_strength, node distance=3cm] (bulk) {\footnotesize Bulk ferment}; - \node [decision, below of=dough_strength, node distance=3cm] (divide_test) {\footnotesize Making 1 loaf?}; - \node [block, left of=divide_test, node distance=3cm] (divide) {\footnotesize Divide}; - \node [block, left of=divide, node distance=3cm] (preshape) {\footnotesize Preshape}; - \node [block, below of=preshape, node distance=3cm] (shape) {\footnotesize Shape}; - \node [block, right of=shape, node distance=3cm] (proof) {\footnotesize Proof}; - \node [block, right of=proof, node distance=3cm] (bake) {\footnotesize Bake}; - \path [line] (init) -- (mix_ingredients); - \path [line] (mix_ingredients) -- (dough_strength); - \path [line] (dough_strength) -- (bulk); - \path [line] (bulk) -- (divide_test); - \path [line] (divide_test) -- node{yes} (shape); - \path [line] (divide_test) -- node{no} (divide); - \path [line] (divide) -- (preshape); - \path [line] (preshape) -- (shape); - \path [line] (shape) -- (proof); - \path [line] (proof) -- (bake); - \end{tikzpicture} + \includegraphics{figures/fig-wheat-sourdough-process.pdf} \caption{The typical process of making a wheat-based sourdough bread} \label{fig:wheat-sourdough-process} \end{figure} @@ -116,36 +95,7 @@ doesn't have a good balance of yeast to bacteria, so will your main dough. \begin{figure}[!htb] - \begin{tikzpicture}[node distance = 3cm, auto] - \node [decision] (init) {\footnotesize Starter last fed within 3 days?}; - \node [block, right of=init, node distance=4cm] (feed_no_branch) - {\footnotesize Feed starter twice. 48 hours before and 6-12 hours before}; - \node [block, below of=feed_no_branch, node distance=3cm] (feed_yes_branch) - {\footnotesize Feed starter once 6-12 hours before making dough}; - \node [block, right of=feed_no_branch, node distance=6cm] (high_ratio) - {\footnotesize Use a 1:10:10 ratio. 10g starter, 100g flour, 100g water}; - \node [block, right of=feed_yes_branch, node distance=3cm] (low_ratio) - {\footnotesize Use a 1:5:5 ratio. 10g starter, 50g flour, 50g water}; - \node [block, below of=high_ratio, node distance=6cm] (check_starter) - {\footnotesize Check if starter is ready to be used}; - \node [decision, below of=init, node distance=6cm] (size_check) - {\footnotesize Bubbly? Increased in size?}; - \node [decision, below of=size_check, node distance=5cm] (smell_check) - {\footnotesize Vinegary or yogurty smell?}; - \node [block, right of=smell_check, node distance=6cm] (make_dough) - {\footnotesize Prepare dough}; - \path [line] (init) -- node{no} (feed_no_branch); - \path [line] (init) -- node{yes} (feed_yes_branch); - \path [line] (feed_yes_branch) -- (low_ratio); - \path [line] (feed_no_branch) -- (high_ratio); - \path [line] (high_ratio) -- (check_starter); - \path [line] (low_ratio) -- (check_starter); - \path [line] (check_starter) -- (size_check); - \path [line] (size_check) -- node{no} (feed_yes_branch); - \path [line] (size_check) -- node{yes} (smell_check); - \path [line] (smell_check) -- node{no} (feed_yes_branch); - \path [line] (smell_check) -- node{yes} (make_dough); - \end{tikzpicture} + \includegraphics{figures/fig-wheat-sourdough-starter-process.pdf} \caption{The process to check your sourdough starter when making wheat-based doughs. In practice I frequently use a stiff sourdough starter. The stiff starter features enhanced yeast activity. In that case, you can use the same ratios as shown in the chart except for the water quantity. The stiff starter has a hydration of 50 to @@ -550,19 +500,10 @@ autolysis step might call for 20 percent sourdough starter. Simply reduce this value to 5-10 percent. The other option could be to place the dough in a colder environment and thus reduce the speed at which your microorganisms replicate. -\begin{table}[!htb] - \begin{tabular}{|l|l|l|l|} - \hline - \textbf{\begin{tabular}[c]{@{}l@{}}Temperature\\ in °C\end{tabular}} & \textbf{\begin{tabular}[c]{@{}l@{}}Temperature\\ in °F\end{tabular}} & \textbf{\begin{tabular}[c]{@{}l@{}}Starter\\ recently fed?\end{tabular}} & \textbf{\begin{tabular}[c]{@{}l@{}}Amount\\ of starter in\%\end{tabular}} \\ \hline - 30 & 86 & Yes & 5 \\ \hline - 25 & 77 & Yes & 10 \\ \hline - 20 & 68 & Yes & 15 \\ \hline - 30 & 86 & No & 2.5 \\ \hline - 25 & 77 & No & 5 \\ \hline - 20 & 68 & No & 10 \\ \hline - \end{tabular} +\begin{figure}[!htb] + \includegraphics[width=\textwidth]{tables/table-starter-usage-activity.pdf} \caption{A table visualizing how much sourdough starter to use depending on temperature and the starter's activity level} -\end{table} +\end{figure} Based on my experience and my sourdough my ideal bread always take around 8 to 12 hours during bulk fermentation. Based on my availability throughout @@ -597,35 +538,7 @@ all the gases during the fermentation process. Without the gluten network, the gases would just diffuse out of your dough. \begin{figure}[!htb] - \begin{tikzpicture}[node distance = 3cm, auto] - \node [block] (init) {\footnotesize Homogenize recipe ingredients}; - \node [block, right of=init, node distance=3cm] (wait1) {\footnotesize Wait 15 minutes}; - \path [line] (init) -- (wait1); - \node [block, right of=wait1, node distance=3cm] (knead1) {\footnotesize Knead 5 minutes}; - \path [line] (wait1) -- (knead1); - \node [block, right of=knead1, node distance=3cm] (wait2) {\footnotesize Wait 15 minutes}; - \path [line] (knead1) -- (wait2); - \node [decision, below of=wait2, node distance=3cm] (windowpane_test) {\footnotesize Window-pane?}; - \path [line] (wait2) -- (windowpane_test); - \path [line] (windowpane_test) -- node{no} (knead1); - \node [decision, left of=windowpane_test, node distance=4.5cm] (more_water) {\footnotesize Bassinage for more water?}; - \path [line] (windowpane_test) -- node{yes} (more_water); - \node [block, left of=more_water, node distance=4.5cm] (add_water) {\footnotesize Add water}; - \path [line] (more_water) -- node{yes} (add_water); - \path [line] (add_water) -- (knead1); - \node [block, below of=add_water, node distance=4cm] (wait3) {\footnotesize Wait 15 minutes}; - \path [line] (add_water) -- (wait3); - \node [decision, right of=wait3, node distance=4.5cm] (dough_sample) {\footnotesize Aliquot jar?}; - \path [line] (wait3) -- (dough_sample); - \path [line] (more_water) -- node{no} (dough_sample); - \node [block, right of=dough_sample, node distance=4.5cm] (dough_ball) {\footnotesize Make round dough ball}; - \path [line] (dough_sample) -- node{no} (dough_ball); - \node [block, below of=dough_sample, node distance=3cm] (extract_sample) {\footnotesize Extract sample}; - \path [line] (dough_sample) -- node{yes} (extract_sample); - \path [line] (extract_sample) -- (dough_ball); - \node [block, below of=dough_ball, node distance=3cm] (begin_bulk) {\footnotesize Begin bulk fermentation}; - \path [line] (dough_ball) -- (begin_bulk); - \end{tikzpicture} + \includegraphics{figures/fig-kneading-process.pdf} \caption{The gluten development process for a wheat-based dough} \label{fig:wheat-sourdough-kneading-process} \end{figure} @@ -811,19 +724,10 @@ the dough more toward a longer fermentation. The flavor of the resulting bread is better compared to a pale underfermented dough. -\begin{table}[!htb] - \small - \begin{tabular}{|l|l|l|l|} - \hline - \textbf{} & \textbf{\begin{tabular}[c]{@{}l@{}}Too short\\ fermentation\end{tabular}} & \textbf{\begin{tabular}[c]{@{}l@{}}Too long\\ fermentation\end{tabular}} & \textbf{\begin{tabular}[c]{@{}l@{}}Perfect\\ fermentation\end{tabular}} \\ \hline - \textbf{\begin{tabular}[c]{@{}l@{}}Crumb\\ texture\end{tabular}} & \begin{tabular}[c]{@{}l@{}}Unbaked gummy areas\\ towards the bottom of\\ the bread\end{tabular} & \begin{tabular}[c]{@{}l@{}}Crumb can be\\ perceived as\\ gummy, as most\\ gluten broken\\ down\end{tabular} & \begin{tabular}[c]{@{}l@{}}Crumb evenly baked.\\ Crumb can be perceived\\ as moist, but not\\ gummy\end{tabular} \\ \hline - \textbf{Alveoli} & \begin{tabular}[c]{@{}l@{}}Overly large alveoli\\ in the crumb "craters"\end{tabular} & \begin{tabular}[c]{@{}l@{}}Many tiny alveoli\\ equally distributed\end{tabular} & \begin{tabular}[c]{@{}l@{}}Alveoli evenly\\ distributed, no\\ "craters"\end{tabular} \\ \hline - \textbf{Taste} & Pale neutral taste & \begin{tabular}[c]{@{}l@{}}Strong acidic flavor\\ profile. Acidity\\ overweighs when\\ tasting\end{tabular} & \begin{tabular}[c]{@{}l@{}}Balanced flavor profile,\\ not too mild but also\\ not too sour. Depending\\ on starter vinegary\\ or lactic notes\end{tabular} \\ \hline - \textbf{Texture} & Overall poor Texture & \begin{tabular}[c]{@{}l@{}}Good consistency,\\ crumb is not as fluffy\\ as it could be\end{tabular} & \begin{tabular}[c]{@{}l@{}}Great combination of \\ textures\end{tabular} \\ \hline - \textbf{\begin{tabular}[c]{@{}l@{}}Oven\\ spring\end{tabular}} & \begin{tabular}[c]{@{}l@{}}Vertical oven spring,\\ mostly due to water\\ evaporating and\\ inflating the dough\end{tabular} & \begin{tabular}[c]{@{}l@{}}Very flat pancake like \\ structure after baking\end{tabular} & \begin{tabular}[c]{@{}l@{}}Great vertical oven\\ spring. Dough grows\\ more upwards rather\\ than sideways\end{tabular} \\ \hline - \end{tabular} +\begin{figure}[!htb] + \includegraphics[width=\textwidth]{tables/table-fermentation-effects.pdf} \caption{The different stages of sourdough fermentation and the effects on crumb, alveoli, texture, and overall taste.} -\end{table} +\end{figure} The worst thing you can do when fermenting sourdough is to rely on a recipe's timing suggestions. In 99 percent @@ -867,17 +771,10 @@ I recommend beginning with a size increase of 25 percent and testing up to 100 percent with subsequent bakes. Then identify a value that you are happy with. -\begin{table}[!htb] - \begin{tabular}{|r|r|} - \hline - \multicolumn{1}{|l|}{\textbf{Flour protein content}} & \multicolumn{1}{l|}{\textbf{Relative aliquot size increase}} \\ \hline - 8-10\% & 25\% \\ \hline - 10-12\% & 50\% \\ \hline - 12-15\% & 100\% \\ \hline - \textgreater 15\% & \textgreater 100\% \\ \hline - \end{tabular} +\begin{figure}[!htb] + \includegraphics[width=\textwidth]{tables/table-dough-size-increase.pdf} \caption{Reference values for how much size increase to aim for with an aliquot jar depending on the dough's protein content} -\end{table} +\end{figure} The beauty of the aliquot is that no matter the surrounding temperature, you will always know when your dough is ready. @@ -951,21 +848,11 @@ you can use them as a reference for your next batch. If the bread didn't turn out the way you like, either shorten the fermentation or extend it a little bit. -\begin{table}[!htb] - \begin{tabular}{|l|r|} - \hline - \textbf{Step} & \multicolumn{1}{l|}{\textbf{pH Value}} \\ \hline - Starter ready & 4.20 \\ \hline - Mixing & 6.00 \\ \hline - Dividing/preshaping & 4.10 \\ \hline - Shaping & 4.05 \\ \hline - Before proofing & 4.03 \\ \hline - After proofing & 3.80 \\ \hline - After baking & 3.90 \\ \hline - \end{tabular} +\begin{figure}[!htb] + \includegraphics[width=\textwidth]{tables/table-ph-values-dough.pdf} \caption{Example pH values for the different breakpoints of my own sourdough process} \label{table:sample-ph-values} -\end{table} +\end{figure} The beauty of this method is its reliability. Once you found out your good working values, you can reproduce @@ -1179,15 +1066,7 @@ The step is required if you are making multiple loaves in one batch. It is optional if you are making a single loaf. \begin{figure}[!htb] - \begin{tikzpicture}[node distance = 3cm, auto] - \node [block] (init) {\footnotesize Dividing required?}; - \node [decision, right of=init, node distance=5cm] (more_than_one_loaf) {\footnotesize More than 1 loaf?}; - \node [block, right of=more_than_one_loaf, node distance=5cm] (yes) {\footnotesize Yes}; - \node [block, below of=yes, node distance=3cm] (no) {\footnotesize No}; - \path [line] (init) -- (more_than_one_loaf); - \path [line] (more_than_one_loaf) -- (yes); - \path [line] (more_than_one_loaf) -- (no); - \end{tikzpicture} + \includegraphics{figures/fig-dividing-preshaping.pdf} \caption{Dividing is only required when you are making multiple loaves in a single dough batch} \label{fig:dividing-decision-tree} \end{figure} @@ -1298,23 +1177,7 @@ your environment. \section{Shaping} \begin{figure}[!htb] - \begin{tikzpicture}[node distance = 3cm, auto] - \node [block] (init) {\footnotesize Begin shaping}; - \node [decision, right of=init, node distance=5cm] (overfermented_decision) {\footnotesize Dough overly sticky or dough tears?}; - \node [block, right of=overfermented_decision, node distance=4cm] (overfermented) {\footnotesize Your dough is likely overfermented}; - \node [block, right of=overfermented, node distance=3cm] (loafpan) {\footnotesize Move to loaf pan, short proof, then bake directly}; - \node [block, below of=init, node distance=4cm] (shaping_technique) {\footnotesize Proceed with shaping technique}; - \node [block, right of=shaping_technique, node distance=3cm] (flour) {\footnotesize Flour shaped dough}; - \node [block, right of=flour, node distance=3cm] (banneton) {\footnotesize Place upside down in banneton}; - \node [block, right of=banneton, node distance=3cm] (proof) {\footnotesize Begin proofing}; - \path [line] (init) -- (overfermented_decision); - \path [line] (overfermented_decision) -- node{yes} (overfermented); - \path [line] (overfermented_decision) -- node{no} (shaping_technique); - \path [line] (shaping_technique) -- (flour); - \path [line] (flour) -- (banneton); - \path [line] (banneton) -- (proof); - \path [line] (overfermented) -- (loafpan); - \end{tikzpicture} + \includegraphics{figures/fig-shaping-process.pdf} \caption{A schematic visualization of the shaping process including checks for an overfermented dough.} \label{fig:shaping-decision-tree} \end{figure} @@ -1532,30 +1395,8 @@ at a slower rate at colder temperatures. But I doubt that they alter their biochemical processes. More research is needed on the topic of retarding and flavor development. - \begin{figure}[!htb] - \begin{tikzpicture}[node distance = 3cm, auto] - \node [decision] (init) {\footnotesize Room temperature proofing?}; - \node [decision, right of=init, node distance=9cm] (retard_bake_decision) {\footnotesize Bake in less than 10 hours from now?}; - \node [block, below of=init, node distance=4cm] (poke) {\footnotesize Poke the dough}; - \node [block, right of=poke, node distance=4cm] (wait_poke) {\footnotesize Wait 15 minutes}; - \node [decision, below of=poke, node distance=3cm] (dent_visible_decision) {\footnotesize Dent still visible after 1 minute?}; - \node [block, right of=dent_visible_decision, node distance=4cm] (bake) {\footnotesize Score and bake}; - \node [block, below of=retard_bake_decision, node distance=3cm] (wait_retard) {\footnotesize Wait 15 minutes}; - \node [block, below of=wait_retard, node distance=3cm] (retard) {\footnotesize Proof in fridge at 4°C (40°F)}; - \node [block, right of=wait_retard, node distance=3cm] (move_to_fridge) {\footnotesize Move dough directly to fridge}; - \path [line] (init) -- node{yes} (poke); - \path [line] (init) -- node{no} (retard_bake_decision); - \path [line] (poke) -- (dent_visible_decision); - \path [line] (dent_visible_decision) -- node{yes} (bake); - \path [line] (dent_visible_decision) -- node{no} (wait_poke); - \path [line] (wait_poke) -- (poke); - \path [line] (retard_bake_decision) -- node{yes} (wait_retard); - \path [line] (retard_bake_decision) -- node{no} (move_to_fridge); - \path [line] (wait_retard) -- (retard); - \path [line] (move_to_fridge) -- (retard); - \path [line] (retard) -- (bake); - \end{tikzpicture} + \includegraphics{figures/fig-proofing-process.pdf} \caption{A schematic overview of the different steps of the sourdough proofing process. The proofing technique to choose depends on your availability and schedule.} \label{fig:proofing-process} @@ -1772,4 +1613,4 @@ scoring easier. Another interesting trick is to bake your dough for 30 seconds without steam. The hot air will dry out the dough's surface even further and simplify the scoring technique. Experiment with the timing to identify your personal -sweet spot. \ No newline at end of file +sweet spot.