2 Commits

Author SHA1 Message Date
itottogit
87c4ab5f0b Merge dcc52806ef into 6ef6901348 2024-12-25 13:27:18 -05:00
itottogit
dcc52806ef Update baking.tex
Evaporation happens at room temperature, too - therefore we cover doughs that rest before baking.
The inside of a loaf does not reach temps above 100 °C - unless you seriously overbake until you end up with a brick instead of a loaf.
2024-05-15 21:53:38 +02:00
62 changed files with 470 additions and 1907 deletions

View File

@@ -64,7 +64,7 @@ jobs:
options: -v ${{ github.workspace }}:/app
run: |
cd /app/book
make -j -O bake
make bake
- name: Release baked book to S3
uses: shallwefootball/s3-upload-action@master
with:
@@ -74,13 +74,21 @@ jobs:
source_dir: book/release
destination_dir: release
- name: Upload book Artifacts
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v3
with:
name: books
path: |
book/book_serif/book.log
book/book_serif/book.pdf
book/book-epub/book.epub
- name: Bake the website
uses: addnab/docker-run-action@v3
with:
image: ${{ env.LATEST_IMAGE }}
options: -v ${{ github.workspace }}:/app
run: |
cd /app/book
make mrproper && make website
- name: Release baked website to S3
uses: shallwefootball/s3-upload-action@master
with:
@@ -90,7 +98,7 @@ jobs:
source_dir: website/static_website_html
destination_dir: static_html_root
- name: Upload website Artifacts
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v3
with:
name: website
path: website/static_website_html

View File

@@ -1,12 +1,6 @@
name: Test book and website for given image
on:
push:
branches-ignore:
- main
pull_request:
branches:
- '**'
on: [push, pull_request]
env:
DOCKER_IMAGE: ghcr.io/${{ github.repository }}:latest
@@ -33,24 +27,32 @@ jobs:
run: |
cd /app/book
make printvars
- name: Test baking the release versions and website
- name: Test baking the release versions
uses: addnab/docker-run-action@v3
with:
image: ${{ env.DOCKER_IMAGE }}
options: -v ${{ github.workspace }}:/app
run: |
cd /app/book
make -j -O serif ebook website
make -j build_serif_pdf build_ebook
- name: Upload book Artifacts
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v3
with:
name: books
path: |
book/book_serif/book.log
book/book_serif/book.pdf
book/book-epub/book.epub
- name: Test building website
uses: addnab/docker-run-action@v3
with:
image: ${{ env.DOCKER_IMAGE }}
options: -v ${{ github.workspace }}:/app
run: |
cd /app/book
make mrproper && make website
- name: Upload website Artifacts
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v3
with:
name: website
path: website/static_website_html

3
.gitignore vendored
View File

@@ -41,6 +41,3 @@ book/epub/
book/book-epub/
book/bw-book-epub/*
book/release/*
book/low-res-book-epub/*
book/epub_build/*
book/website_build/*

View File

@@ -53,7 +53,7 @@ make
```
If you want to 🍞 bake all the versions including ebook variants (.pdf, .epub
in colour and size optimized Black&White, as well as website), run:
in colour and size optimized Black&White), run:
```console
cd book/
@@ -80,7 +80,7 @@ There's an additional enhanced accessibility version using a sans-serif font:
* [Download compiled sans-serif .pdf version](https://www.the-bread-code.io/book-sans-serif.pdf)
An additional black and white ebook is provided with a greatly reduced file
size. This shrinks the book from more than 20MB down to ~5MB:
size. This shrinks the book from more than 50MB down to ~5MB:
* [Download compiled B&W .epub version](https://www.the-bread-code.io/bw-book.epub)

View File

@@ -1,4 +0,0 @@
% Common abbreviations
\newcommand{\ie}{\emph{i.e.}\@ifnextchar.{\!\@gobble}{}}
\newcommand{\eg}{\emph{e.g.}\@ifnextchar.{\!\@gobble}{}}
\newcommand{\etc}{etc\@ifnextchar.{}{.\@}}

Binary file not shown.

After

Width:  |  Height:  |  Size: 369 KiB

View File

@@ -37,24 +37,24 @@ At \qty{75}{\degreeCelsius} (\qty{167}{\degF}) the surface of your dough turns
holds together nicely but is still extensible. This gel is essential
for oven spring as it retains the gas inside your dough.
At around \qty{100}{\degreeCelsius} (\qty{212}{\degF}) the water starts to evaporate out of your
dough. If this weren't the case, your dough would taste soggy and
doughy. The higher hydration your dough has, the more water your bread
As the dough warms up in the oven, the water starts to evaporate out of your
dough. If this weren't the case, your bread would come out soggy and
doughy. The higher the hydration of your dough, the more water your bread
still contains after the bake, changing its consistency. As a result the
crumb is going to taste a bit more moist.
crumb will be somewhat moister.
Another often undervalued step is the evaporation of acids.
Another often undervalued step is the evaporation of acids from the crust.
At~\qty{118}{\degreeCelsius} (\qty{244}{\degF}) the acetic acid in your dough
starts to evaporate.
Shortly after at~\qty{122}{\degreeCelsius} (\qty{252}{\degF}) the lactic acid begins evaporating.
This is crucial to understand and it opens the door to many interesting
ways to influence your final bread's taste. As more and more water
begins to evaporate the acids in your dough become more concentrated.
There is less water but in relation you have more acids, therefore a shorter
evaporates the acids in your dough become more concentrated.
There is less water but in relation you have more acids, therefore a longer
bake will lead to a more tangy dough. The longer you bake the bread,
the more of the water evaporates, but also ultimately the acids will follow.
The longer you bake, the less sour your bread is going to be. By controlling
baking time you can influence which sourness level you would like to achieve.
baking time you can somewhat influence which sourness level you would like to achieve. Since the inside of the bread will never go above \qty{100}{\degreeCelsius} (\qty{212}{\degF}), acids cannot evaporate from there.
It would be a very interesting experiment to bake a bread at different exact
temperatures. How would a bread taste with only evaporated water but
@@ -62,7 +62,7 @@ full acidity? What if you were to just completely get rid of the acetic
acid? How would the taste change?
\begin{figure}[!htb]
\input{plots/fig-temperature-surface.tex}
\includegraphics[width=\textwidth]{baking-experiment-temperatures.png}
\caption[Surface temperature for different steaming methods]{This
chart shows how surface temperatures change using different steaming
methods. In this case I~used a Dutch oven and an apple as dough

View File

@@ -12,97 +12,52 @@
\input{cover/cover.tex}
\titlepage
\frontmatter
{%
\hypersetup{hidelinks}
\ifdefined\HCode\else\tableofcontents\fi
}
\input{intro/preface}
\input{intro/acknowledgments}
\input{intro/acknowledgements}
\begin{flowchart}[!htb]
\begin{center}
\input{figures/fig-dutch-oven-process.tex}
\caption[Baking process with a dutch oven]{A visualization of the baking
process using a dutch oven (DO). The dough is steamed for the first half
of the bake and then baked without cover for the second half of the
bake. The desired darkness and thickness of the crust depends on your
personal preference. Some bakers prefer a lighter crust and others a
darker.}%
\label{fig:dutch-oven-process}
\end{center}
\end{flowchart}
\mainmatter
At around \qty{60}{\degreeCelsius} (\qty{140}{\degF}) the microbes in your
dough start to die. There are rumors that until this happens the microbes
produce a lot of \ch{CO2}.
\input{history/sourdough-history}
% Does not work
\begin{figure}[!htb]
\begin{center}
\input{figures/fig-ethanol-oxidation.tex}
\caption[Acetic acid creation]{Oxygen is required to create acetic
acid~\cite{acetic+acid+production}.}%
\label{fig:ethanol-oxidation}
\end{center}
\end{figure}
\input{basics/how-sourdough-works}
%% Works
%% Generate first with: cd figures && pdflatex fig-ethanol-oxidation-external.tex
%\begin{figure}[!htb]
% \begin{center}
% \includegraphics{figures/fig-ethanol-oxidation-external.png}
% \caption[Acetic acid creation]{Oxygen is required to create acetic
% acid~\cite{acetic+acid+production}.}%
% \end{center}
%\end{figure}
%
%% Does not work
%\begin{figure}[!htb]
%\begin{center}
% \input{figures/fig-life-planet-sourdough-timeline.tex}
% \caption[Sourdough microbiology timeline]{Timeline giberrish on website}%
%\end{center}
%\end{figure}
%
%% Works
%% Generate first with: cd figures && pdflatex fig-life-planet-sourdough-timeline-external.pdf
%\begin{figure}[!htb]
% \includegraphics{figures/fig-life-planet-sourdough-timeline-external.png}
% \caption[Sourdough microbiology timeline]{Timeline works embedded as png}%
%\end{figure}
%
%\begin{figure}[!htb]
% \includegraphics[width=\textwidth]{baking-experiment-temperatures.png}
% \caption[Surface temperature for different steaming methods]{png file}
%\end{figure}
\input{sourdough-starter/sourdough-starter}
\begin{figure}[!htb]
\includegraphics[width=\textwidth]{baking-process-steam.jpg}
\caption[Steam building with inverted tray]{jpg file}%
\label{flc:inverted-tray}
\end{figure}
If you're a hobby brewer, you'll know that it's important to keep your beer at
certain temperatures to allow the different amylases to convert the contained
starches into sugar~\cite{beer+amylase}.
This test, called the \emph{Iodine Starch Test}, involves mixing iodine into
a sample of your brew and checking the color.
\input{sourdough-starter/sourdough-starter-types}
% https://github.com/hendricius/the-sourdough-framework/issues/358
\begin{table}[!htb]
\begin{center}
\input{tables/table-starter-usage-activity.tex}
\caption[Different oven types]{An overview of different oven types and
eheir different baking methods.}
\end{center}
\end{table}
\input{flour-types/flour-types}
\begin{table}[!htb]
\begin{center}
\input{tables/table-oven-baking-overview.tex}
\caption[Different oven types]{An overview of different oven types and their
different baking methods.}
\end{center}
\end{table}
\input{bread-types/bread-types}
\chapter{Wheat sourdough}%
\label{chapter:wheat-sourdough}
\input{wheat-sourdough/wheat-sourdough}
\input{non-wheat-sourdough/non-wheat-sourdough}
\input{mix-ins/mix-ins.tex}
\input{baking/baking}
\input{storing-bread/storing-bread}
\chapter{Troubleshooting}
\input{troubleshooting/misc}
\backmatter
\input{glossary/glossary}
{%
\hypersetup{hidelinks}
\listofflowcharts
\listoftables
\listoffigures
}
\printbibliography
\end{document}

View File

@@ -10,7 +10,6 @@ if [ "$#" -ne 1 ]; then
done
else
target=figures/`basename $1 .png.pdf`.png
echo ${target}
echo "Converting: " $1 " to: " ${target}
convert -density 900 -trim $1 -quality 100 ${target}
fi

View File

@@ -20,10 +20,10 @@
% Same tricks not to get double lines and also we do _not_ want arrows
\path [draw, thick] (ph_value) -- node{} ++(2, 0);
\path [draw, thick] (smell) -| node{} ++(2, 4);
\path [line] (dough_ready) -- node{Yes} (divide_preshape);
\path [line] (dough_ready) |- node[right=3pt]{No} (dough_flattened);
\path [line] (dough_flattened) |- node[right=3pt]{Yes} (stretch_fold);
\path [line] (dough_flattened) -- node{No} (wait_60_minutes);
\path [line] (dough_ready) -- node{yes} (divide_preshape);
\path [line] (dough_ready) |- node[right=3pt]{no} (dough_flattened);
\path [line] (dough_flattened) |- node[right=3pt]{yes} (stretch_fold);
\path [line] (dough_flattened) -- node{no} (wait_60_minutes);
\path [line] (stretch_fold) -- (wait_60_minutes);
\path [line] (wait_60_minutes) -- (check_dough);
\end{tikzpicture}

View File

@@ -1,8 +1,32 @@
\begin{tikzpicture}[node distance = 3cm, auto]
\node [start] (heat_oven) {Preheat DO to \qty{230}{\degreeCelsius} (\qty{446}{\degF}) for 30~minutes};
\node [block, right of=heat_oven] (remove_oven) {Remove DO from oven ° \text{°} \textup{°}};
\node [decision, below of=heat_oven, node distance=4cm] (is_ready_check) {Core temperature \qty{92}{\degreeCelsius} (\qty{197}{\degF})?};
\node [block, right of=is_ready_check, node distance=4cm] (remove_do_lid) {%
Jörg bäckt quasi zwei Haxenfüße vom Wildpony .Dès Noël, où un zéphyr haï me
vêt};
\node [block, right of=heat_oven] (remove_oven) {Remove DO from oven };
\node [block, right of=remove_oven] (open_load_dough) {Open DO \& load your dough};
\node [block, right of=open_load_dough] (score) {Score your dough};
\node [block, right of=score] (spritz) {Spritz dough with water};
\node [block, below of=spritz] (close) {Close DO};
\node [block, left of=close] (back_oven) {Place DO back in oven};
\node [block, left of=back_oven] (bake) {Bake 30~minutes at \qty{230}{\degreeCelsius} (\qty{446}{\degF})};
\node [decision, below right= 5cm and -1 cm of heat_oven] (is_ready_check)
{Core temperature \qty{92}{\degreeCelsius} (\qty{197}{\degF})?};
\node [block, below of=is_ready_check, node distance=4cm] (wait_5_minutes) {Wait\\ 5 minutes};
\node [block, right of=is_ready_check, node distance=4cm] (remove_do_lid) {Remove DO lid};
\node [decision, right of=remove_do_lid, node distance=3.5cm] (dark_enough_decision) {Crust color dark enough?};
\node [success, below of=dark_enough_decision, node distance=4cm] (finish_baking) {Bread is finished};
\node [block, right of=dark_enough_decision, node distance=3.5cm] (bake_5_more_minutes) {Bake another 5~minutes};
\path [line] (heat_oven) -- (remove_oven);
\path [line] (remove_oven) -- (open_load_dough);
\path [line] (open_load_dough) -- (score);
\path [line] (score) -- (spritz);
\path [line] (spritz) -- (close);
\path [line] (close) -- (back_oven);
\path [line] (back_oven) -- (bake);
\path [line] (bake.west) -- node{} ++(-2, 0) -| (is_ready_check.north);
\path [line] (is_ready_check) -- node{yes} (remove_do_lid);
\path [line] (is_ready_check) -- node{no} (wait_5_minutes);
\path [line] (wait_5_minutes.west) -- node{} ++(-1.5, 0) |- (is_ready_check.west);
\path [line] (remove_do_lid) -- (dark_enough_decision);
\path [line] (dark_enough_decision) -- node{yes} (finish_baking);
\path [line] (dark_enough_decision) -- node{no} (bake_5_more_minutes);
\path [line] (bake_5_more_minutes.east) -- node{} ++(1, 0) -- node{} ++(0, 2.3) -| (dark_enough_decision.north);
\end{tikzpicture}

View File

@@ -8,18 +8,18 @@
\path [line] (knead) -- (wait2);
\node [decision, below of=wait2, node distance=4cm] (windowpane_test) {Window-pane?};
\path [line] (wait2) -- (windowpane_test);
\path [line] (windowpane_test.east) -- node{No} ++(1, 0) -- node{} ++(0, 5.7) -| (knead.north);
\path [line] (windowpane_test.east) -- node{no} ++(1, 0) -- node{} ++(0, 5.7) -| (knead.north);
\node [decision] at (windowpane_test -| knead) (more_water) {Bassinage for more water?};
\path [line] (windowpane_test) -- node{Yes} (more_water);
\path [line] (windowpane_test) -- node{yes} (more_water);
\node [block] at (wait1 |- more_water) (add_water) {Add water};
\path [line] (more_water) -- node{Yes} (add_water);
\path [line] (more_water) -- node{yes} (add_water);
\path [line] (add_water.north east) -- (knead.south west);
\node [decision, below of=more_water, node distance=4.5cm] (dough_sample) {Aliquot sample?};
\path [line] (more_water) -- node{No} (dough_sample);
\path [line] (more_water) -- node{no} (dough_sample);
\node [block] at (dough_sample -| wait2) (dough_ball) {Make round dough ball};
\path [line] (dough_sample) -- node{No} (dough_ball);
\path [line] (dough_sample) -- node{no} (dough_ball);
\node [block, below of=dough_sample] (extract_sample) {Extract sample};
\path [line] (dough_sample) -- node{Yes} (extract_sample);
\path [line] (dough_sample) -- node{yes} (extract_sample);
\path [line] (extract_sample.north east) -- (dough_ball.south west);
\node [success, below of=dough_ball] (begin_bulk) {Begin bulk fermentation};
\path [line] (dough_ball) -- (begin_bulk);

View File

@@ -8,10 +8,10 @@
\path [line] (init) -- (feed_new_ratio);
\path [line] (feed_new_ratio) -- node{Wait \qty{24}{\hour}} (ready_signs);
\path [line] (feed_again) -- node[anchor=east] {} ++(2.2,0) |- (feed_new_ratio);
\path [line] (ready_signs) -- node{No} (feed_again);
\path [line] (ready_signs) -- node[above=2pt]{~Yes} (last_feed);
\path [line] (ready_signs) -- node{no} (feed_again);
\path [line] (ready_signs) -- node[above=2pt]{~yes} (last_feed);
\path [line] (last_feed) -- node{after \qtyrange{6}{12}{\hour}} (bread_dough);
\draw [thick, ->] ($ (feed_again.north) +(0.7cm, 1cm)$) arc (-45:220:1cm);
\node [anchor=north, text width=5em] at ($(feed_again.north west)+(1.8cm, 2.3cm)$) {Repeat 3~times};
\node [above of=feed_again, text width=5em, align=center, node distance=3cm] (repeat_text) {Repeat 3~times};
\draw [line] ($(repeat_text) +(0, 1 cm)$) arc (90:420:1cm);
\end{tikzpicture}

View File

@@ -7,14 +7,14 @@
\node [success, right of=dent_visible_decision, node distance=4cm] (bake) {Score and bake};
\node [block] at (retard_bake_decision |- poke) (wait_retard) {Wait\\ 15~minutes};
\node [block] at (wait_retard |- bake) (retard) {Proof in fridge at \qty{4}{\degreeCelsius} (\qty{40}{\degF})};
\path [line] (init) -- node{Yes} (poke);
\path [line] (init) -- node{No} (retard_bake_decision);
\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.west) -- node{No} ++(-1.4, 0) -- node{} (wait_poke.south);
\path [line] (dent_visible_decision) -- node{yes} (bake);
\path [line] (dent_visible_decision.west) -- node{no} ++(-1.4, 0) -- node{} (wait_poke.south);
\path [line] (wait_poke) -- (poke);
\path [line] (retard_bake_decision) -- node{Yes} (wait_retard);
\path [line] (retard_bake_decision.east) -- node{No} ++(1, 0) |- node{} (retard.east);
\path [line] (retard_bake_decision) -- node{yes} (wait_retard);
\path [line] (retard_bake_decision.east) -- node{no} ++(1, 0) |- node{} (retard.east);
\path [line] (wait_retard) -- (retard);
\path [line] (retard) -- (bake);
\end{tikzpicture}

View File

@@ -8,8 +8,8 @@
\node [block, right of=flour] (banneton) {Place upside down in banneton};
\node [success, right of=banneton] (proof) {Begin proofing};
\path [line] (init) -- (overfermented_decision);
\path [line] (overfermented_decision) -- node{Yes} (overfermented);
\path [line] (overfermented_decision) -- node{No} (shaping_technique);
\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);

View File

@@ -4,8 +4,8 @@
\path [line] (init) -- (all_starter_used);
\node [block, right of=init, node distance=3cm] (use_dough) {Take \qty{10}{\gram} of your bread dough};
\node [block, right of=all_starter_used, node distance=3cm] (use_starter) {Take all but not more than \qty{10}{\gram} of your starter};
\path [line] (all_starter_used) -- node{Yes} (use_dough);
\path [line] (all_starter_used) -- node{No} (use_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) {Feed using 1:5:5 ratio};
\path [line] (use_dough) -- (feed_starter);
\path [line] (use_starter) -- (feed_starter);
@@ -13,20 +13,20 @@
\path [line] (feed_starter) -- (bake_next_day_check);
\node [success, right of=bake_next_day_check, node distance=3.5cm]
(make_bread_dough) {Make bread dough again after \qtyrange{8}{12}{\hour}};
\path [line] (bake_next_day_check) -- node{Yes} (make_bread_dough);
\path [line] (bake_next_day_check) -- node{yes} (make_bread_dough);
\node [decision, right of=use_starter, node distance=3cm] (bake_next_week_check) {Baking in next 2 weeks?};
\node [block, right of=bake_next_week_check, node distance=3.5cm] (store_fridge) {Store starter in fridge at \qty{4}{\degreeCelsius} (\qty{40}{\degF})};
\path [line] (bake_next_week_check) -- node{Yes} (store_fridge);
\path [line] (bake_next_week_check) -- node{yes} (store_fridge);
\node [success, right of=store_fridge, node distance=3cm] (feed_after_fridge) {Feed again using 1:5:5 ratio \qtyrange{8}{12}{\hour} before making dough};
\path [line] (store_fridge) -- (feed_after_fridge);
\path [line] (bake_next_day_check) -- node{No} (bake_next_week_check);
\path [line] (bake_next_day_check) -- node{no} (bake_next_week_check);
\node [decision, below of=use_starter, node distance=3cm] (freezer_check) {Have a freezer?};
\path [line] (bake_next_week_check) -- (store_fridge);
\path [line] (bake_next_week_check) -- node{No} (freezer_check);
\path [line] (bake_next_week_check) -- node{no} (freezer_check);
\node [block, right of=freezer_check, node distance=3cm] (dry_starter) {Dry your starter};
\node [block, below of=dry_starter, node distance=3cm] (freeze_starter) {Freeze your starter};
\path [line] (freezer_check) -- node{No} (dry_starter);
\path [line] (freezer_check) -- node{Yes} (freeze_starter);
\path [line] (freezer_check) -- node{no} (dry_starter);
\path [line] (freezer_check) -- node{yes} (freeze_starter);
\node [success, right of=dry_starter, node distance=3.5cm] (reactivate_freezer) {Reactivate starter for 3 days with daily 1:5:5 feedings};
\path [line] (dry_starter) -- (reactivate_freezer);
\path [line] (freeze_starter) -- (reactivate_freezer);

View File

@@ -1,22 +1,19 @@
\begin{tikzpicture}[node distance = 3.5cm, auto]
\node [start] (start_n) {Mix \qty{50}{\gram} flour + \qty{50}{\gram} water, stir};
\node [block, right of=start_n, node distance = 3.5cm] (wait_n) {Wait\\ \qty{24}{\hour}};
\node [decision, right of=wait_n, node distance = 3.5cm] (readycheck_n) {Ready?};
\node [block, below of=wait_n, node distance = 3.2cm] (feed_n) {Feed the mixture };
\node [decision, right of=feed_n, node distance = 3.5cm] (limitcheck_n) {>10 feeds?};
\node [fail, right of=limitcheck_n, node distance = 3.5cm] (abort_n) {Discard all. Start over};
\node [success, right of=readycheck_n, node distance = 3.5cm] (final_n) {Ready to use};
\draw [line] (start_n) -- (wait_n);
\draw [line] (wait_n) -- (readycheck_n);
\draw [line] (feed_n) -- (wait_n);
\draw [line] (readycheck_n) -- node {No} (limitcheck_n);
\draw [line] (limitcheck_n) -- node (feedok_n) {No} (feed_n) ;
\draw [line] (limitcheck_n) -- node {Yes} (abort_n);
\draw [line] (readycheck_n) -- node {Yes} (final_n);
\node [below of=feedok_n, node distance=2cm, align=left] (details2) [shape=rectangle, draw, fill=maingray]{%
\textbf{Ready}: Mixture has \emph{grown}, has \emph{bubbles}, and \emph{smells} vinegary/yoghurty. \\
\textbf{Feed the mixture}: Discard all but \qty{10}{\gram}, mix in \qty{50}{\gram} flour and \qty{50}{\gram} water.
};
\node [start] (init) {Mix \qty{50}{\gram} flour + \qty{50}{\gram} water, stir};
\node [block, right of=init] (wait2) {Wait\\ \qty{24}{\hour}};
\path [line] (init) -- (wait2);
\node [block, below of=wait2, node distance=3.5cm] (feed) {\qty{10}{\gram} of previous day + \qty{50}{\gram} water + \qty{50}{\gram} flour, stir};
\path [line] (wait2) -- (feed);
\node [block, below of=feed] (discard) {Discard the rest};
\path [line] (feed) -- (discard);
\node [decision, right of=feed, node distance=3.5cm] (decide) {Is good?};
\node [decision, above of=decide, node distance=3.5cm] (timeout) {Less than 10 feeds?};
\node [fail, right of=timeout, node distance=3.5cm] (discard2) {Batch failed};
\path [line] (timeout) -- node{no} (discard2);
\path [line] (timeout) -- node{yes} (wait2);
\path [line] (feed) -- (decide);
\node [success, right of=decide, node distance=3.5cm] (use) {Ready to use};
\path [line] (decide) -- node{no} (timeout);
\path [line] (wait2) -- (feed);
\path [line] (decide) -- node{yes} (use);
\end{tikzpicture}

View File

@@ -23,16 +23,16 @@
{Prepare dough};
\path [line] (init) -- (decision_start);
\path [line] (decision_start) -- node{No} (feed_no_branch);
\path [line] (decision_start) -- node[below=2pt]{Yes} (feed_yes_branch.north west);
\path [line] (decision_start) -- node{no} (feed_no_branch);
\path [line] (decision_start) -- node[below=2pt]{yes} (feed_yes_branch.north west);
\path [line] (feed_yes_branch) -- (low_ratio);
\path [line] (feed_no_branch) -- (high_ratio);
\path [line] (high_ratio) -- node[anchor=east, above=2pt] {} ++(2.2,0) |-(size_check);
\path [line] (low_ratio) -- (size_check);
\path [line] (size_check) -- node{No} (feed_yes_branch.south east);
\path [line] (size_check) -- node{Yes} (smell_check);
\path [line] (smell_check) -- node{No} (feed_yes_branch.south west);
\path [line] (smell_check) -- node{Yes} (make_dough);
\path [line] (size_check) -- node{no} (feed_yes_branch.south east);
\path [line] (size_check) -- node{yes} (smell_check);
\path [line] (smell_check) -- node{no} (feed_yes_branch.south west);
\path [line] (smell_check) -- node{yes} (make_dough);
% braces
\draw[BC] (size_check.south) --

View File

@@ -11,15 +11,14 @@
\path [line] (init) -- (feed_new_ratio);
\path [line] (feed_again) -- (feed_new_ratio);
\path [line] (next_day) -- (ready_signs);
\path [line] (ready_signs) -- node{No} (feed_again |- last_feed) -| (feed_again.south);
\path [line] (ready_signs) -- node{Yes} (last_feed);
\path [line] (ready_signs) -- node{no} (feed_again |- last_feed) |- (feed_again.south);
\path [line] (ready_signs) -- node{yes} (last_feed);
\path [line] (last_feed) -- node{after \qtyrange{6}{12}{\hour}} (bread_dough);
\path [line] (feed_new_ratio) -- (too_dry);
\path [line] (add_water.north) -- node{} ++(0, 1.3) -| (too_dry.north);
\path [line] (too_dry) -- node{No} (next_day);
\path [line] (too_dry) -- node{Yes} (add_water);
\path [line] (ready_signs) -- node{Yes} (last_feed);
\node [text width=5em, align=center] (repeat_text) at ($(feed_new_ratio)!0.5!(next_day)$) {Repeat 3~times};
\draw [line] ($(repeat_text) +(0, 1 cm)$) arc (90:-210:1cm);
\path [line] (too_dry) -- node{no} (next_day);
\path [line] (too_dry) -- node{yes} (add_water);
\path [line] (ready_signs) -- node{yes} (last_feed);
\draw [thick, <-] ($ (feed_again.east) +(2.1cm, 0.7cm)$) arc (-45:220:1cm);
\node [anchor=north, text width=5em] at ($(feed_again.east)+(2cm, 2cm)$) {Repeat 3~times};
\end{tikzpicture}

View File

@@ -13,8 +13,8 @@
\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_test) -- node{yes} (shape);
\path [line] (divide_test) -- node{no} (divide);
\path [line] (divide) -- (preshape);
\path [line] (preshape) -- (shape);
\path [line] (shape) -- (proof);

View File

@@ -1,5 +1,5 @@
\tikzstyle{every picture}+=[font=\footnotesize\sffamily]
\usetikzlibrary{calc, shapes, arrows.meta, decorations.pathreplacing, calligraphy,
\usetikzlibrary{calc, shapes, arrows, decorations.pathreplacing, calligraphy,
positioning}
\tikzstyle{decision} = [diamond, draw=codeblack, fill=codeblack, text=white,
text width=4.5em, text badly centered, node distance=3cm, inner sep=0pt,
@@ -19,8 +19,7 @@
\tikzstyle{fail} = [rectangle, draw=codeblack, fill=redpic, text=black,
text width=5em, text centered, rounded corners, minimum height=4em,
line width=0.4mm]
% The arrowed connector line between nodes
\tikzstyle{line} = [draw, thick, ->, >={Latex}]
\tikzstyle{line} = [draw, -latex', thick, ->,>=to]
\tikzstyle{BC} = [decorate, % Brace Calligraphic
decoration={calligraphic brace, amplitude=3mm, raise=1mm},
@@ -31,5 +30,3 @@
\tikzstyle{timeline_timespan} = [rectangle, draw=codeblack, fill=pinkpic, text=black,
text centered, rounded corners, line width=0.4mm]
\pgfplotsset{compat=1.18}
\pgfplotsset{width=\textwidth}

View File

@@ -1,9 +1,6 @@
\documentclass[tikz]{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{chemfig}
\usepackage[mode=match, reset-text-family=false]{siunitx}
\DeclareSIUnit\degF{\text{°}F}
\input{flowcharts_tikz.tex}
\input{../colors.tex}
\input{../abbreviations.tex}

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 564 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

View File

@@ -1,5 +1,5 @@
\chapter{Acknowledgments}%
\label{ch:Acknowledgments}
\chapter{Acknowledgements}%
\label{ch:Acknowledgements}
This book would not have been possible without your help.
With all your donations I~have been able to focus on finishing
this book. Your continuous support allows me to focus

View File

@@ -1,7 +1,7 @@
# Macros for commands {{{
# Macros for commands
LATEX := latexmk -cd -pdflua -lualatex="lualatex -interaction=nonstopmode" -synctex=1 -use-make
EBOOK := tex4ebook --lua -d epub -f epub -c tex4ebook.cfg -B epub_build
WEBSITE := make4ht --lua -c website.cfg -uf html5+tidy+common_domfilters -B website_build
EBOOK := tex4ebook --lua -d epub -f epub -c tex4ebook.cfg
WEBSITE := make4ht --lua -c website.cfg -a debug -uf html5+tidy+common_domfilters
CLEAN := latexmk -cd -lualatex -c -use-make
CHECK_1 := lacheck
CHECK_2 := chktex
@@ -9,10 +9,7 @@ CONVERT_PIC := convert
REDUCE_PIC := -resize '800x800>' \
-strip -interlace Plane -gaussian-blur 0.05 -quality 85\% \
-set colorspace Gray -separate -evaluate-sequence Mean
REDUCE_PIC_COLOR := -quality 80\%
RSYNC := rsync -au --exclude 'book.epub' --exclude '*.jpg'
GIT := git --no-pager
SPELL_CHECK := hunspell -t -l -d en_US
RSYNC := rsync -au --exclude 'book.epub' --exclude '*.jpg' --exclude '*.png'
# We want bash as shell
SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
@@ -24,35 +21,23 @@ LATEX += -diagnostics
EBOOK += -a debug
WEBSITE += -a debug
endif
# }}}
# Default target is not all because most of the time we just want a pdf...
# and building everything take a long time.
.DEFAULT_GOAL := serif
website_dir := static_website_html
# List all files that are dependencies {{{
# List all files that are dependencies
chapters = baking basics bread-types cover flour-types history intro mix-ins\
non-wheat-sourdough sourdough-starter storing-bread troubleshooting\
wheat-sourdough glossary
# Actual book text and LaTeX code {{{
src_tex := $(foreach directory, $(chapters), $(wildcard $(directory)/*.tex))
src_tex += book.tex book_sans_serif.tex references.bib figures/vars.tex
src_tex += supporters.csv sourdough.sty colors.tex abbreviations.tex
src_tex += $(src_recipes)
# }}}
# Tables and TikZ flowcharts/plots/drawings... {{{
src_tables := $(wildcard tables/table-*.tex)
src_figures := $(wildcard figures/fig-*.tex) figures/flowcharts_tikz.tex
src_figures += $(wildcard plots/fig-*.tex) abbreviations.tex colors.tex
src_recipes := $(wildcard recipes/*.tex)
src_plots := $(wildcard plots/*.table)
# }}}
tgt_figures := $(patsubst %.tex, %.png,$(src_figures))
src_tex := $(foreach directory, $(chapters), $(wildcard $(directory)/*.tex))
src_tex += book.tex book_sans_serif.tex references.bib figures/vars.tex
src_tex += supporters.csv sourdough.sty colors.tex
src_tex += $(src_recipes)
# Photos {{{
images := $(wildcard images/*/*.jpg)
images += $(wildcard images/*.jpg)
images += $(wildcard images/*.png)
@@ -66,47 +51,47 @@ images += $(foreach directory, $(chapters), $(wildcard $(directory)/*/*.png))
# images to lower resolution and greyscale
bw_images := $(addprefix bw-book-epub/OEBPS/, $(images))
# For lower resolution colour ebook (see below) we will not convert png as it
# only get worst we will copy them instead... so remove them as a dependency.
low_res_images := $(addprefix low-res-book-epub/OEBPS/, $(images))
low_res_images := $(filter-out %.png, $(low_res_images))
# }}}
src_all := $(src_tex) $(src_figures) $(src_tables) $(images)
# All together.
src_all := $(src_tex) $(src_figures) $(src_tables) $(images) $(src_plots)
# And format specific configurations
ebook_src := $(src_all) tex4ebook.cfg book.mk4 book-ebook.css
website_src := $(src_all) website.cfg style.css
website_dir := static_website_html
# This is more than what is actually needed but keeps the makefile simple
# and latexmk will handle the rest
booklet_src := $(src_figures) $(src_tables) $(src_recipes) $(images)
booklet_src += booklet.tex
website_assets := $(wildcard ../website/assets/*)
ruby_src := ../website/modify_build.rb $(website_assets)
ruby_pkg := ../website/Gemfile ../website/Gemfile.lock
# This is more than what is actually needed but keeps the makefile simple
booklet_src := $(src_figures) $(src_tables) $(src_recipes) $(images)
booklet_src += booklet.tex
# }}}
tgt_figures := $(patsubst %.tex, %.png,$(src_figures))
# Default target is not all because most of the time we just want a pdf...
# and ebook take a long time to build.
.DEFAULT_GOAL := build_serif_pdf
# Default rules for pdf and ebooks, getting overwritten when built in a
# sub-directory
%.pdf: %.tex
$(LATEX) $<
# Flowcharts {{{
# TODO: check if it works on github CI
%.png: %.tex
@printf '%s\n' "\input{./vars.tex}" > $@.in
@printf '%s\n' "\begin{document}" >> $@.in
@echo "\input{./vars.tex}" > $@.in
# \b is backspace..
@echo "\\\begin{document}" >> $@.in
@cat $< >> $@.in
@printf '%s\n' "\end{document}" >> $@.in
@echo "\\\end{document}" >> $@.in
$(LATEX) $@.in
figures/export_figures.sh $@.pdf
%.xbb: %.jpg
ebb -x $<
# }}}
# pdf {{{
# Default rules for pdf, getting overwritten when built in a sub-directory
%.pdf: %.tex
$(LATEX) $<
booklet/booklet.pdf: $(booklet_src)
$(LATEX) -output-directory=booklet booklet.tex
book_serif/book.pdf: $(src_all)
$(LATEX) -output-directory=book_serif book.tex
@@ -114,28 +99,13 @@ book_serif/book.pdf: $(src_all)
book_sans_serif/book_sans_serif.pdf: $(src_all)
$(LATEX) -output-directory=book_sans_serif book_sans_serif.tex
# We don't want to use latexmk as there is no biber nor references and it
# seems to make it somehow unhappy
booklet/booklet.pdf: $(booklet_src)
mkdir -p booklet
lualatex --output-directory=booklet booklet.tex
# }}}
.PHONY: copy_ebook_files
# Ebook {{{
###################################
.PHONY: copy_ebook_files copy_ebook_files_low_res
epub/%.epub: %.tex $(ebook_src) cover/cover-page.xbb
$(EBOOK) $<
copy_ebook_files: build_ebook
$(RSYNC) --exclude '*.png' epub_build/book-epub/ bw-book-epub/
# Now that we have built the ebook we will generate 2 more versions
#
# 1) With kindle app on phone we want a colour version with size < 50 MB
# 2) A black-white version for actual eink readers
#
# In both cases we just convert images and repack the ebpub
$(RSYNC) book-epub/ bw-book-epub/
# We do not convert SVG to B&W or lower res for now as they are super small
# anyway
@@ -151,21 +121,164 @@ epub/bw_book.epub: copy_ebook_files $(bw_images)
cd bw-book-epub; zip -q0X ../epub/bw_book.epub mimetype
cd bw-book-epub; zip -q9XrD ../epub/bw_book.epub ./
# Now the low res
copy_ebook_files_low_res: ebook
$(RSYNC) epub_build/book-epub/ low-res-book-epub/
# Now with the rules
# Expected usual rules first
.PHONY: all
all: bake
low-res-book-epub/OEBPS/%.jpg: %.jpg
mkdir -p $(dir $@)
$(CONVERT_PIC) $< $(REDUCE_PIC_COLOR) $@
.PHONY: help
help:
@echo ""
@echo "default: builds the book in pdf format (serif)"
@echo ""
@echo "all: pdf serif and sans-serif accessible version, as well as ebooks"
@echo " in colour and black&white versions"
@echo ""
@echo "bake: same as build all"
@echo ""
@echo "check: runs static analysis checker on LaTeX source to spot"
@echo " programming or typographic mistakes"
@echo ""
@echo "clean: delete all intermediate files keep targets (pdf/ebooks/website)"
@echo ""
@echo "mrproper: delete all generated files intermediate and pdf/ebooks/website"
@echo " clean_figures: delete intermediate TikZ files"
@echo " clean_website_build: delete intermediate website files"
@echo " clean_ebook_build: delete intermediate ebook files"
@echo ""
@echo "build_pdf: builds both serif and accessible pdf"
@echo ""
@echo "build_ebook: builds only the colour ebook"
@echo ""
@echo "build_booklet: builds only the short booklet"
@echo ""
@echo "build_bw_ebook: builds the low res black & white ebook"
@echo ""
@echo "build_sans_serif_pdf: build accessible pdf only"
@echo ""
@echo "build_serif_pdf: build serif pdf only"
@echo ""
@echo "figures: build TikZ figures"
@echo ""
@echo "release_serif: build serif only version of pdf and ebooks"
@echo "release_sans_serif: build sans-serif/accessible version of pdf"
@echo ""
@echo "website: build the static website from LaTeX sources and post-process it"
@echo "html: build the static website from LaTeX sources _without_ post-processing"
@echo ""
@echo "Debug targets:"
@echo ""
@echo "quick: compiles serif_pdf but runs lulatex only once"
@echo ""
@echo "quick_ebook: compiles ebook but runs lulatex only once"
@echo ""
@echo "quick_booklet: compiles booklet but runs lulatex only once"
@echo ""
@echo "show_tools_version: Show version of tools used on the build machine"
@echo ""
@echo "print-X: print makefile variable X"
@echo ""
@echo "printvars: print all variables in the makefile"
@echo ""
@echo "set DEBUG i.e make DEBUG=1 build_ebook to add debug flags to commands"
epub/low_res_book.epub: copy_ebook_files_low_res $(low_res_images)
cd low-res-book-epub; zip -q0X ../epub/low_res_book.epub mimetype
cd low-res-book-epub; zip -q9XrD ../epub/low_res_book.epub ./
#}}}
# Website {{{
###################################
# Finally actual project targets (i.e. build pdf and ebooks)
.PHONY: build_pdf build_booklet build_serif_pdf build_sans_serif_pdf build_ebook
build_pdf: build_serif_pdf build_sans_serif_pdf
build_booklet: booklet/booklet.pdf
build_serif_pdf: book_serif/book.pdf
build_sans_serif_pdf: book_sans_serif/book_sans_serif.pdf
build_ebook: epub/book.epub
build_bw_ebook: epub/bw_book.epub
.PHONY: export_figures check
# Requires that you have docker running on your computer.
export_figures: build_pdf $(tgt_figures)
cd figures/ && bash export_figures.sh
# Goal is not really to have 0 warning reported but we should check we don't
# add many and if we do, we know they are false positive
check: $(SRC_TEX)
@echo "Running: " $(CHECK_1)
$(CHECK_1) book.tex
@echo ""
@echo "Running: " $(CHECK_2)
$(CHECK_2) book.tex
# Clean up and delete generated files
.PHONY: clean_figures clean_ebook_build clean_website_build clean mrproper
clean_figures:
- $(CLEAN) $(patsubst %.tex, %.png.in, $(src_figures))
- rm $(patsubst %.tex, %.png.pdf, $(src_figures))
- rm $(patsubst %.tex, %.png.in, $(src_figures))
- rm $(wildcard figures/*.png.*)
- rm cover/cover-page.xbb
clean_ebook_build:
-rm book*.{4ct,4tc,aux,bbl,bcf,blg,dvi,fdb_latexmk,fls,html}
-rm book*.{idv,lg,loc,log,ncx,run.xml,tmp,xref}
-rm book*x.svg
-rm book.css
-rm content.opf
clean_website_build: clean_ebook_build
-rm book-*.svg
-rm book.{loc,dlog}
-rm $(subst $(website_dir)/,, $(wildcard $(website_dir)/*.html))
clean: clean_ebook_build clean_figures clean_website_build
$(CLEAN) -output-directory=book_serif book.tex
$(CLEAN) -output-directory=book_sans_serif book_sans_serif.tex
$(CLEAN) -output-directory=booklet booklet.tex
-rm book*/*.{bbl,loc,.run.xml}
-rm -rf *book-epub/META-INF
-rm -rf *book-epub/OEBPS
-rm *book-epub/mimetype
mrproper: clean
$(CLEAN) -C $(src_figures)
$(CLEAN) -C -output-directory=book_serif book.tex
$(CLEAN) -C -output-directory=book_sans_serif book_sans_serif.tex
$(CLEAN) -C -output-directory=booklet booklet.tex
-rm figures/*.png
-rm *.html
-rm *.svg
-rm -rf epub/
-rm -rf release/
-rm -rf book_serif/
-rm -rf book_sans_serif/
-rm -rf booklet/
-rm -rf *book-epub/
-rm -rf $(website_dir)
# top level releases rules
.PHONY: bake release_serif release_sans_serif
bake: release_serif release_sans_serif release_booklet
release:
mkdir -p release
release_serif: build_serif_pdf build_ebook build_bw_ebook | release
cp book_serif/book.pdf release/TheBreadCode-The-Sourdough-Framework.pdf
cp epub/book.epub release/TheBreadCode-The-Sourdough-Framework.epub
cp epub/bw_book.epub release/TheBreadCode-The-Sourdough-Framework-black-and-white.epub
release_sans_serif: build_sans_serif_pdf | release
cp book_sans_serif/book_sans_serif.pdf release/TheBreadCode-The-Sourdough-Framework-sans-serif.pdf
release_booklet: build_booklet | release
cp booklet/booklet.pdf release/TheBreadCode-The-Sourdough-Framework-booklet.pdf
# Website stuff
.PHONY: html website
$(website_dir)/book.html: $(website_src) cover/cover-page.xbb
$(WEBSITE) -d $(website_dir) book.tex
@@ -176,208 +289,17 @@ html: $(website_dir)/book.html
# Because packages will be installed in hard to predict places use a file as
# marker..
../website/_bundle_install_done: $(ruby_pkg)
-rm ../website/$@
- rm ../website/$@
cd ../website && bundle install
touch ../website/$@
# TODO: this will run every single time, but is so fast we don't really care
website: html ../website/_bundle_install_done $(ruby_src)
cd ../website && ruby modify_build.rb
#}}}
# Figures only {{{
###################################
.PHONY: export_figures
# Requires that you have docker running on your computer.
export_figures: pdf $(tgt_figures)
cd figures/ && bash export_figures.sh
# }}}
# Now with the targets {{{
# Expected usual targets first
.PHONY: all
all: bake
# Finally actual project targets (i.e. build pdf and ebooks)
.PHONY: pdf booklet serif sans_serif ebook
pdf: serif sans_serif
booklet: booklet/booklet.pdf
serif: book_serif/book.pdf
sans_serif: book_sans_serif/book_sans_serif.pdf
ebook: epub/book.epub
bw_ebook: epub/bw_book.epub
low_res_ebook: epub/low_res_book.epub
# We keep the old target names for backward compatibility
build_pdf: pdf
build_booklet: booklet
build_serif_pdf: serif
build_sans_serif_pdf: sans_serif
build_ebook: ebook
build_bw_ebook: bw_ebook
build_low_res_ebook: low_res_ebook
# top level releases rules
.PHONY: bake release_serif release_sans_serif
bake: release_serif release_sans_serif release_booklet website
release:
mkdir -p release
release_serif: serif ebook bw_ebook low_res_ebook | release
cp book_serif/book.pdf release/TheBreadCode-The-Sourdough-Framework.pdf
cp epub/bw_book.epub release/TheBreadCode-The-Sourdough-Framework-black-and-white.epub
cp epub/low_res_book.epub release/TheBreadCode-The-Sourdough-Framework.epub
# Kindle does not allow files larger than 50 MB... so let's check
@if [ `du -sb epub/low_res_book.epub | cut -f1` -gt 49500000 ]; then \
echo "ERROR: epub File too big"; \
exit 1; \
fi
release_sans_serif: sans_serif | release
cp book_sans_serif/book_sans_serif.pdf release/TheBreadCode-The-Sourdough-Framework-sans-serif.pdf
release_booklet: booklet | release
cp booklet/booklet.pdf release/TheBreadCode-The-Sourdough-Framework-booklet.pdf
# }}}
# Clean up {{{
###################################
# delete generated files
.PHONY: clean_figures clean_ebook_build clean_website_build clean mrproper
clean_figures:
-$(CLEAN) $(patsubst %.tex, %.png.in, $(src_figures))
-rm $(patsubst %.tex, %.png.pdf, $(src_figures))
-rm $(patsubst %.tex, %.png.in, $(src_figures))
-rm $(wildcard figures/*.png.*)
-rm cover/cover-page.xbb
clean_ebook_build:
-rm epub_build/book*.{4ct,4tc,aux,bbl,bcf,blg,dvi,fdb_latexmk,fls,html}
-rm epub_build/book*.{idv,lg,loc,log,ncx,run.xml,tmp,xref}
-rm epub_build/book*x.svg
-rm epub_build/book.css
-rm epub_build/content.opf
-rm epub_build/book-epub/mimetype
-rm -rf epub_build/book-epub/META-INF
-rm -rf epub_build/book-epub/OEBPS
clean_website_build:
-rm website_build/book*.{4ct,4tc,aux,bbl,bcf,blg,dvi,fdb_latexmk,fls,html}
-rm website_build/book*.{idv,lg,loc,log,ncx,run.xml,tmp,xref}
-rm website_build/book.{loc,dlog}
clean: clean_ebook_build clean_figures clean_website_build
$(CLEAN) -output-directory=book_serif book.tex
$(CLEAN) -output-directory=book_sans_serif book_sans_serif.tex
$(CLEAN) -output-directory=booklet booklet.tex
-rm book*/*.{bbl,loc,run.xml}
mrproper: clean
$(CLEAN) -C $(src_figures)
$(CLEAN) -C -output-directory=book_serif book.tex
$(CLEAN) -C -output-directory=book_sans_serif book_sans_serif.tex
$(CLEAN) -C -output-directory=booklet booklet.tex
-rm figures/*.png
-rm -rf epub/
-rm -rf release/
-rm -rf book_serif/
-rm -rf book_sans_serif/
-rm -rf booklet/
-rm -rf *book-epub/
-rm -rf epub_build/
-rm -rf website_build/
-rm -rf $(website_dir)
#}}}
# Help {{{
###################################
.PHONY: help
help:
@echo ""
@echo "default: builds the book in pdf format (serif)"
@echo ""
@echo "Releases:"
@echo " all: pdf serif and sans-serif accessible version, ebooks in colours"
@echo " and black&white versions as well as the website"
@echo ""
@echo " bake: same as build all"
@echo ""
@echo " release_serif: build serif only version of pdf and ebook"
@echo " release_sans_serif: build sans-serif/accessible version of pdf"
@echo ""
@echo "Portable Document Format (pdf):"
@echo " sans_serif: build accessible pdf only (same as release_sans_serif)"
@echo " serif: build serif pdf only"
@echo " pdf: builds both serif and accessible pdf"
@echo ""
@echo "Ebooks (epub):"
@echo " ebook: builds only the colour ebook"
@echo " low_res_ebook: builds the colour ebook in lower resolution"
@echo " bw_ebook: builds the low res black & white ebook"
@echo ""
@echo "Website:"
@echo " website: build the static website from LaTeX sources and post-process it"
@echo " html: build the static website from LaTeX sources _without_ post-processing"
@echo ""
@echo "Cleanup:"
@echo " mrproper: delete all generated files intermediate and pdf/ebooks/website"
@echo " clean: delete all intermediate files keep targets (pdf/ebooks/website)"
@echo " clean_figures: delete intermediate TikZ files"
@echo " clean_website_build: delete intermediate website files"
@echo " clean_ebook_build: delete intermediate ebook files"
@echo ""
@echo "Debug targets:"
@echo ""
@echo "figures: build TikZ figures only"
@echo ""
@echo "Quick builds:"
@echo " quick: compiles serif_pdf but runs lulatex only once"
@echo " quick_ebook: compiles ebook but runs lulatex only once"
@echo " quick_booklet: compiles booklet but runs lulatex only once"
@echo ""
@echo "Checks:"
@echo " tex-check: runs static analysis checker on LaTeX source to spot"
@echo " programming or typographic mistakes"
@echo " spell-check: runs a spell checker"
@echo " check: runs both checkers"
@echo ""
@echo "Dump informations:"
@echo " show_tools_version: Show version of tools used on the build machine"
@echo " printvars: print all variables in the makefile"
@echo " print-X: print makefile variable X"
@echo ""
@echo "set DEBUG i.e make DEBUG=1 ebook to add debug flags to commands"
# }}}
# Debug Stuff from now on {{{
###################################
# Verify your spelling and TeX warnings {{{
.PHONY: check tex-check spell-check
# Goal is not really to have 0 warning reported but we should check we don't
# add many and if we do, we know they are false positive
check: spell-check tex-check
tex-check: $(src_tex)
@echo "Running: " $(CHECK_1)
$(CHECK_1) book.tex
@echo ""
@echo "Running: " $(CHECK_2)
$(CHECK_2) book.tex
# Should be 0 if not and you are really sure update the exception file
spell-check: $(src_tex) spelling_exceptions.txt
# Generate exceptions this way to avoid false positives
# hunspell -t -l -d en_US **/*.tex *.csv *.sty *.sty | cut -f 2 -d ':' | sort -u > spelling_exceptions.txt
$(SPELL_CHECK) -p spelling_exceptions.txt $(src_tex)
#}}}
# Debug Stuff from now on
.PHONY: quick quick_ebook show_tools_version printvars
# Those 2 targets allow fast debug cycles but not resolving references etc
# They also ignore dependencies and run each time you call them.
quick: # run latex only once no biber, no references etc...
@@ -389,8 +311,8 @@ quick_booklet:
quick_ebook: cover/cover-page.xbb # run latex only once no biber, ref etc...
$(EBOOK) --mode draft book.tex
show_tools_version: # Show version of tools used on the build machine {{{
- $(GIT) log -1 --pretty=%B
show_tools_version: # Show version of tools used on the build machine
- git log -n 1
@echo ""
- uname -a
@echo ""
@@ -411,7 +333,7 @@ show_tools_version: # Show version of tools used on the build machine {{{
@echo ""
- dvisvgm --version
@echo ""
- lacheck | head -5 | tail -1
- lacheck --version
@echo ""
- chktex --version
@echo ""
@@ -424,7 +346,6 @@ show_tools_version: # Show version of tools used on the build machine {{{
- $(CONVERT_PIC) --version
@echo ""
- rsync --version
# }}}
# You can find the value of variable X with the following command:
# make print-X
@@ -434,4 +355,3 @@ printvars: # Print all variables in the makefile
@$(foreach V,$(sort $(.VARIABLES)), \
$(if $(filter-out environ% default automatic, \
$(origin $V)),$(info $V=$($V) ($(value $V)))))
# }}}

View File

@@ -8,7 +8,6 @@
\end{quoting}
\begin{figure}[htb!]
\centering
\includegraphics[width=\textwidth]{pumpkin-sourdough}
\caption[Pumpkin sourdough softbuns]{These soft pull-apart sourdough
buns have been made with the addition of pumpkin purée. The mashed pumpkin
@@ -24,13 +23,12 @@ to express yourself.
\section{Categories}
\begin{figure}[htb!]
\centering
\includegraphics[width=\textwidth]{pumpkin-on-flour}
\caption[Pumpkin purée]{A popular method is to substitute part of the
dough's water with another liquid, such as puréed pumpkin. When
incorporating the purée, add any extra water gradually, as the purée
will release its own liquid into the dough over time.}%
\label{fig:pumpkin-on-flour}
\caption[Pumpkin puré]{A common mix-in technique is to replace some of
the dough's water with another liquid. In this case, puréd pumpkin replaced
some of the water. When adding puré to the dough only slowly add
additional water as the puré slowly releases additional water to the
dough.}%
\end{figure}
One approach to categorizing the mixins is to look at their respective shape.
@@ -66,12 +64,10 @@ Many of the above-listed mix-ins can't be pinpointed to a single category. They
change multiple aspects of the final bread at the same time.
\begin{figure}[htb!]
\centering
\includegraphics[width=\textwidth]{seeded-sourdough}
\caption[Seeded sourdough]{In this case a combination of flax, sunflower and
sesame was added to the dough. The seeds will slightly dehydrate the dough
during fermentation and thus adding a bit more water
(\qtyrange{1}{2}{\percent}) is advised.}%
during fermentation and thus adding a bit more water (\qtyrange{1}{2}{\percent}) is advised.}%
\end{figure}
Mix-ins affect the structure of the dough. One aspect is the impact on
@@ -101,7 +97,6 @@ regular bread flour. Different flours change the taste of the bread and
usually moderately affect the color.
\begin{figure}[htb!]
\centering
\includegraphics[width=\textwidth]{broa}
\caption[Broa de milho]{Broa de milho is a traditional Portuguese bread
made out of half rye and half corn flour.}%
@@ -125,11 +120,9 @@ Instead of using water, you can substitute it with a different liquid,
affecting taste and texture.
\begin{figure}[htb!]
\centering
\includegraphics[width=\textwidth]{beer-bread}
\caption[Stout beer bread]{Dark hearty stouts work excellently as a water
replacement when making sourdough bread. The resulting loaf features a
hearty malty taste}%
\caption[Stout beer bread]{Dark hearty stouts work excellently as a water replacement
when making sourdough bread. The resulting loaf features a hearty malty taste}%
\end{figure}
\begin{itemize}
@@ -173,14 +166,12 @@ seeds benefit from being boiled for about 10~minutes before adding them to the
dough.
\begin{figure}[htb!]
\centering
\includegraphics[width=\textwidth]{stollen-close-up}
\caption[Stollen closeup]{The Stollen is a traditional German sweet Christmas
bread featuring a variety of mix-ins. The dough typically contains candied
lemon, candied orange, and raisins. The mix-ins are soaked in rum before
being added to the dough. While the stollen matures after baking (up to
\num{6} months) the candied ingredients release their aroma to the baked
product.}%
bread featuring a variety of mix-ins. The dough typically contains candied lemon,
candied orange, and raisins. The mix-ins are soaked in rum before being added to
the dough. While the stollen matures after baking (up to \num{6} months) the candied ingredients release
their aroma to the baked product.}%
\end{figure}
\begin{itemize}
@@ -199,13 +190,11 @@ dough.
\begin{figure}[htb!]
\centering
\includegraphics[width=\textwidth]{seeds-bread}
\caption[Whole-rye with rye berries]{A sourdough bread made with half
whole-rye flour and half rye berries. The berries are typically boiled
for 10~minutes to allow them to soften a bit. When baking a loaf it is
advised to use a thermometer to measure whether it is done baking. The
final bread features a hearty tangy flavor and has a moist crumb.}%
\caption[Whole-rye with rye berries]{A sourdough bread made with half whole-rye flour and half rye berries. The
berries are typically boiled for 10~minutes to allow them to soften a bit. When baking a loaf
it is advised to use a thermometer to measure whether it is done baking. The final bread
features a hearty tangy flavor and has a moist crumb.}%
\end{figure}
\subsection{Spices and flavor mix-ins}
@@ -259,63 +248,40 @@ A few combinations where multiple mix-ins complement each other:
\section{Techniques}
Adding mix-ins to the dough is just the simplest approach. Add the mix-ins
directly when you knead the dough. After the first kneading wait for 30
minutes to see if the dough has enough or too much water. In the case of
whole-soaked berries (\eg~rye or wheat) chances are that the berries will
release some water and make the dough wetter. In this case, you will want to
add a bit more flour to the dough to compensate for the high hydration.
\subsection[Incorporating seeds into the dough]{What is the best stage to
incorporate inclusions (seeds) into the dough?}%
\label{subec:incorporate-seeds}
You can include seeds directly at the start when mixing the dough. If you use
whole seeds such as wheat or rye kernels, soak them in water overnight and
then rinse them before adding them to the dough. This makes sure that they are
not crunchy and are soft enough when eating the bread. If you forgot to soak
them you can cook the seeds for 10~minutes in hot water. Rinse them with cold
water before adding them to your dough.
If you want to sweeten the dough, your best option is to add sugar during the
shaping stage. Sugar added too early in the process typically gets fermented
until none of it remains. Adjust your shaping technique a little bit and
spread your sugar mixture over a flattened-out dough. You can then roll the
dough together, incorporating layers of sugar.
directly when you knead the dough. After the first kneading wait for 30 minutes to see
if the dough has enough or too much water. In the case of whole-soaked berries
(\eg~rye or wheat) chances are that the berries will release some water and make the dough
wetter. In this case, you will want to add a bit more flour to the dough to
compensate for the high hydration.
\subsection{Adding before shaping}
\begin{figure}[htb!]
\centering
\includegraphics[width=\textwidth]{apple-swirl}
\caption[Apple swirl buns]{A great technique is to add some of your mix-ins
directly before shaping. In this case, a mixture of apples, cinnamon and
brown sugar was applied. Proceed and roll the dough together. Afterward
cut the roll into smaller pieces using a sharp knife, dough scraper or
dental floss. Place each piece of dough next to each other in a greased
bowl to allow them to be proofed. Proceed and bake as you would
normally do. The benefit of this technique is that the mix-ins will not
be fermented. This is typically required in the case of sugar since you
want the final baked goods to feature sweetness. If included upon
initial mixing most of the sugar would be fermented and the bread would
not taste sweet.}%
\label{fig:apple-swirl}
directly before shaping. In this case, a mixture of apples, cinnamon and brown
sugar was applied. Proceed and roll the dough together. Afterward cut the roll
into smaller pieces using a sharp knife, dough scraper or dental floss. Place
each piece of dough next to each other in a greased bowl to allow them to be proofed.
Proceed and bake as you would normally do. The benefit of this technique is that
the mix-ins will not be fermented. This is typically required in the case of sugar
since you want the final baked goods to feature sweetness. If included upon
initial mixing most of the sugar would be fermented and the bread would not taste sweet.}%
\end{figure}
Another approach is to lay the dough out flat after the bulk fermentation.
Then using a spatula spread your ingredient over the flat dough. Continue with
your regular shaping and/or roll up the dough. When creating a roll you can
use a sharp knife to cut the dough, dental floss works great too. Afterward,
place the tiny swirls in a container to let them proof and become fluffier.
This is an excellent way to add sweet mix-ins as the microbes will not ferment
them. When adding sugar to the initial dough it will be fermented and the
resulting dough will not taste sweet (depending on the fermentation duration).
This approach is excellent for garlic/cheese rolls, garlic/herb rolls, and
cinnamon rolls
place the tiny swirls in a container to let them proof and become fluffier. This is an
excellent way to add sweet mixins as the microbes will not ferment them. When
adding sugar to the initial dough it will be fermented and the resulting dough
will not taste sweet (depending on the fermentation duration). This approach
is excellent for garlic/cheese rolls, garlic/herb rolls, and cinnamon rolls
\subsection{Covering the surface}
\begin{figure}[htb!]
\centering
\includegraphics[width=\textwidth]{surface-seeds}
\caption[Surface seeds]{These are chop buns which are created by chopping
up a retarded dough into smaller pieces before baking. Then each piece of
@@ -324,7 +290,6 @@ cinnamon rolls
coverings add superb additional flavor and can be adjusted depending on
your preference. I love adding a mixture of sunflower, flax, and
sesame seeds.}%
\label{fig:surface-seeds}
\end{figure}
This works best for either powders or small bits. After shaping wrap your
@@ -334,9 +299,8 @@ these coverings also help to make the container stick less.
Another approach commonly used with buns is to wet the surface or dump the
dough in water. Afterward, dip the wetted piece of dough into your bowl of
mix-ins. This does not work for all mix-ins, as some can't handle the high
temperatures during baking and char. Most commonly done with seeds
(\eg~sesame, oats, flax-seed).
mixins. This does not work for all mix-ins, as some can't handle the high temperatures
during baking and char. Most commonly done with seeds (\eg~sesame, oats, flax-seed).
\subsection{Swirled colors}
Mix-ins that change the color of the dough bring the opportunity for even more

View File

@@ -1,75 +0,0 @@
% Copyright 2021-2024 by Michal Hoftich
% Copyright 2006 by Till Tantau
%
% This file may be distributed and/or modified
%
% 1. under the LaTeX Project Public License and/or
% 2. under the GNU Public License.
%
% See the file doc/generic/pgf/licenses/LICENSE for more details.
\ProvidesFileRCS{pgfsys-dvisvgm4ht.def}
% Driver commands for tex4ht
%
% Load common pdf commands:
%
% we switched to dvisvgm driver by default. it supports patterns and other features
% dvips driver is available through the tikz+ option. It doesn't support everything,
% but it worked better with nested pictures in the past.
\ifdefined\ifOption
\ifOption{tikz+}{\input pgfsys-dvips.def}{\input pgfsys-dvisvgm.def}
\else
% load the dvips driver by default
\input pgfsys-dvisvgm.def
\fi
\catcode`\:=11%
% we must call most of these redefinitions in \AtBeginDocument, because \HLet is available
% only at that moment
\AtBeginDocument{%
% configure the output picture format to svg, as it will require dvisvgm
% post processing.
\Configure{Picture}{.svg}%
% insert picture hooks to pgfsys commands
% these redefinitions are usually called only with the \tikz command,
% they are ignored in tikzpicture environment
\def\:tempa#1{%
\texfourht@tikz@begin%
\csname o:pgfsys@typesetpicturebox:\endcsname{#1}
\texfourht@tikz@end%
}
\HLet\pgfsys@typesetpicturebox\:tempa
% we must remove Picture-alt in \pgfsys@beginpicture, because it can result in alt text included in the image
\def\:tempa{\Configure{Picture-alt}{}\texfourht@tikz@begin\o:pgfsys@beginpicture:}
\HLet\pgfsys@beginpicture\:tempa
\let\o:pgfsys@endpicture:\pgfsys@endpicture
\def\:tempa{\o:pgfsys@endpicture:}
\HLet\pgfsys@endpicture\:tempa
% start picture around TikZ and PGF environments
\ConfigureEnv{tikzpicture}{\begingroup\texfourht@tikz@begin}{\texfourht@tikz@end\endgroup}{}{}%
\ConfigureEnv{pgfpicture}{\begingroup\texfourht@tikz@begin}{\texfourht@tikz@end\endgroup}{}{}%
}
\def\texfourht@tikz@begin{
\protect\csname nested:math\endcsname% support display math
\Picture*[\csname a:Picture-alt\endcsname]{}%
}
\def\texfourht@tikz@end{\EndPicture}
\catcode`\:=12%
\endinput
%%% Local Variables:
%%% mode: latex
%%% End:

View File

@@ -1,30 +0,0 @@
\begin{tikzpicture}
\tikzstyle{every node}+=[font=\normalsize\rmfamily]
\begin{axis}[
title=Ambient temperature,
grid=both,
major grid style={line width=.2pt,draw=gray!30},
axis x line=middle,
axis y line=middle,
axis line style={-Latex},
width=\textwidth,
height=0.5\textwidth,
xmax=35, xmin=-0.1,
ymax=205, ymin=-0.1,
every axis y label/.style={%
at={(ticklabel cs:0.5)},rotate=90,anchor=near ticklabel},
every axis x label/.style={%
at={(ticklabel cs:0.5)},anchor=near ticklabel},
legend pos = south east,
legend style={draw=none},
legend cell align={left},
xlabel=Duration (minutes), ylabel=Temperature (\SI{}{\degree} C)
]
\addplot [color=redpic,smooth,ultra thick] table {plots/icecube_ambient.table};
\addplot [color=codeblack,smooth,ultra thick] table {plots/preheated_ambient.table};
\addplot [color=codeblue,smooth,ultra thick] table {plots/non-preheated_ambient.table};
\addplot [color=yellowpic,smooth,ultra thick] table {plots/preheated_bottom_ambient.table};
\addplot [color=pinkpic,smooth,ultra thick] table {plots/spritzing_ambient.table};
\legend{Ice cube, Preheated, Non-preheated, Preheated bottom, Spritzing};
\end{axis}
\end{tikzpicture}

View File

@@ -1,30 +0,0 @@
\begin{tikzpicture}
\tikzstyle{every node}+=[font=\normalsize\rmfamily]
\begin{axis}[
title=Surface temperature,
grid=both,
major grid style={line width=.2pt,draw=gray!30},
axis x line=middle,
axis y line=middle,
axis line style={-Latex},
width=\textwidth,
height=0.5\textwidth,
xmax=35, xmin=-0.1,
ymax=108, ymin=-0.1,
every axis y label/.style={%
at={(ticklabel cs:0.5)},rotate=90,anchor=near ticklabel},
every axis x label/.style={%
at={(ticklabel cs:0.5)},anchor=near ticklabel},
legend pos = south east,
legend style={draw=none},
legend cell align={left},
xlabel=Duration (minutes), ylabel=Temperature (\SI{}{\degree} C)
]
\addplot [color=redpic,smooth,ultra thick] table {plots/icecube_surface.table};
\addplot [color=codeblack,smooth,ultra thick] table {plots/preheated_surface.table};
\addplot [color=codeblue,smooth,ultra thick] table {plots/non-preheated_surface.table};
\addplot [color=yellowpic,smooth,ultra thick] table {plots/preheated_bottom_surface.table};
\addplot [color=pinkpic,smooth,ultra thick] table {plots/spritzing_surface.table};
\legend{Ice cube, Preheated, Non-preheated, Preheated bottom, Spritzing};
\end{axis}
\end{tikzpicture}

View File

@@ -1,43 +0,0 @@
\begin{tikzpicture}
\tikzstyle{every node}+=[font=\normalsize\rmfamily]
\begin{axis}[
title style={align=center},
title={Gluten development of a sourdough and yeast based dough\\
\qty{22}{\degreeCelsius} (\qty{72}{\degF}) and
\qty{60}{\percent}~hydration},
axis x line=middle,
axis y line=middle,
axis line style={-Latex},
width=\textwidth,
height=0.5\textwidth,
xmax=44, xmin=-0.1,
ymax=12, ymin=-0.1,
every axis y label/.style={%
at={(ticklabel cs:0.5)},rotate=90,anchor=near ticklabel},
every axis x label/.style={%
at={(ticklabel cs:0.5)},anchor=near ticklabel},
xtick distance=6,
ytick style={draw=none},
yticklabels={empty},
legend style={draw=none},
legend cell align={left},
xlabel=Duration (hours), ylabel=Dough strength
]
\addplot [color=redpic,smooth,ultra thick] table {plots/yeast.table};
\addplot [color=codeblue,smooth,ultra thick] table {plots/sourdough.table};
\node at (axis cs:18,7) [anchor=south west] {%
\begin{tabular}{@{}lll@{}} \textbf{Dough type}&
\textbf{Kneading} & \textbf{Stretch \& Fold}\\
\midrule
\textcolor{redpic}{Yeast} & \textcolor{redpic}{None}&
\textcolor{redpic}{None} \\ \textcolor{codeblue}{Sourdough}&
\textcolor{codeblue}{None} & \textcolor{codeblue}{None} \\
\end{tabular}
};
\node at (axis cs:8,8.3) [anchor=south] {Peak stage};
\node at (axis cs:1,1) [anchor=west] {Development stage};
\node at (axis cs:9.5,5) [anchor=west] {Extensibility stage};
\node at (axis cs:25.8,4) [anchor=west] {Decay stage};
\end{axis}
\end{tikzpicture}

View File

@@ -1,24 +0,0 @@
#Ice Cube
#Time Ambient
1 95
2 148
3 165
4 172
5 175
6 179
7 179
8 180
9 181
10 182
11 182
12 182
13 182
14 181
15 182
16 182
17 181
18 182
19 182
20 181
21 182
22 182

View File

@@ -1,24 +0,0 @@
#Ice Cube
#Time Surface
1 13
2 50
3 66
4 71
5 72
6 74
7 78
8 81
9 84
10 86
11 89
12 91
13 92
14 94
15 95
16 96
17 97
18 98
19 98
20 99
21 99
22 99

View File

@@ -1,28 +0,0 @@
#Non preheated
#Time Ambient
1 22
2 25
3 31
4 36
5 43
6 49
7 56
8 63
9 70
10 77
11 85
12 91
13 96
14 102
15 107
16 113
17 119
18 124
19 128
20 132
21 137
22 141
23 144
24 147
25 151
26 151

View File

@@ -1,28 +0,0 @@
#Non preheated
#Time Surface
1 13
2 14
3 15
4 15
5 17
6 18
7 19
8 21
9 23
10 26
11 28
12 31
13 34
14 37
15 40
16 43
17 47
18 50
19 53
20 57
21 61
22 65
23 68
24 71
25 74
26 75

View File

@@ -1,18 +0,0 @@
#Pre-heated
#Time Ambient
1 110
2 163
3 181
4 186
5 189
6 190
7 190
8 189
9 189
10 188
11 188
12 188
13 189
14 189
15 190

View File

@@ -1,37 +0,0 @@
#Preheated Bottom
#Time Ambient
1 31
2 105
3 133
4 143
5 149
6 151
7 152
8 152
9 153
10 154
11 157
12 159
13 161
14 162
15 164
16 167
17 169
18 171
19 172
20 173
21 174
22 176
23 176
24 176
25 176
26 176
27 176
28 176
29 176
30 176
31 176
32 176
33 176
34 176
35 176

View File

@@ -1,36 +0,0 @@
#Preheated bottom
#Time Surface
#1 0
2 7
3 13
4 18
5 23
6 29
7 33
8 38
9 42
10 47
11 51
12 55
13 60
14 64
15 68
16 71
17 74
18 78
19 83
20 90
21 95
22 97
23 99
24 99
25 99
26 100
27 100
28 100
29 100
30 100
31 100
32 100
33 100
34 101

View File

@@ -1,17 +0,0 @@
#Ice Cube
#Time Surface
1 7
2 16
3 25
4 35
5 43
6 51
7 58
8 65
9 70
10 74
11 78
12 82
13 85
14 85
15 85

View File

@@ -1,100 +0,0 @@
0.000000000000000000e+00 0.000000000000000000e+00
2.424242424242424310e-01 4.240754653977794608e-01
4.848484848484848619e-01 8.471491777276901614e-01
7.272727272727272929e-01 1.268219383921863175e+00
9.696969696969697239e-01 1.686284330912430240e+00
1.212121212121212155e+00 2.100342265631521599e+00
1.454545454545454586e+00 2.509391435011269600e+00
1.696969696969697017e+00 2.912430085983805039e+00
1.939393939393939448e+00 3.308456465481258935e+00
2.181818181818181657e+00 3.696468820435762304e+00
2.424242424242424310e+00 4.075465397779447052e+00
2.666666666666666963e+00 4.444444444444444642e+00
2.909090909090909172e+00 4.802404207362885202e+00
3.151515151515151381e+00 5.148342933466899751e+00
3.393939393939394034e+00 5.481258869688621971e+00
3.636363636363636687e+00 5.800150262960180214e+00
3.878787878787878896e+00 6.104015360213707275e+00
4.121212121212121104e+00 6.391852408381334172e+00
4.363636363636363313e+00 6.662659654395191033e+00
4.606060606060606410e+00 6.915435345187411542e+00
4.848484848484848619e+00 7.149177727690124051e+00
5.090909090909090828e+00 7.362885048835461355e+00
5.333333333333333925e+00 7.555555555555555358e+00
5.575757575757576134e+00 7.726187494782536191e+00
5.818181818181818343e+00 7.873779113448534872e+00
6.060606060606060552e+00 7.997328658485683306e+00
6.303030303030302761e+00 8.095834376826111622e+00
6.545454545454545858e+00 8.168294515401953504e+00
6.787878787878788067e+00 8.213707321145337303e+00
7.030303030303030276e+00 8.231071040988396703e+00
7.272727272727273373e+00 8.219383921863260056e+00
7.515151515151515582e+00 8.177644210702062821e+00
7.757575757575757791e+00 8.104850154436931575e+00
8.000000000000000000e+00 8.000000000000000000e+00
8.242424242424242209e+00 7.878787878787878896e+00
8.484848484848484418e+00 7.757575757575757791e+00
8.727272727272726627e+00 7.636363636363636687e+00
8.969696969696970612e+00 7.515151515151514694e+00
9.212121212121212821e+00 7.393939393939393590e+00
9.454545454545455030e+00 7.272727272727272485e+00
9.696969696969697239e+00 7.151515151515151381e+00
9.939393939393939448e+00 7.030303030303030276e+00
1.018181818181818166e+01 6.909090909090909172e+00
1.042424242424242387e+01 6.787878787878788067e+00
1.066666666666666785e+01 6.666666666666666075e+00
1.090909090909091006e+01 6.545454545454544970e+00
1.115151515151515227e+01 6.424242424242423866e+00
1.139393939393939448e+01 6.303030303030302761e+00
1.163636363636363669e+01 6.181818181818181657e+00
1.187878787878787890e+01 6.060606060606060552e+00
1.212121212121212110e+01 5.939393939393939448e+00
1.236363636363636331e+01 5.818181818181818343e+00
1.260606060606060552e+01 5.696969696969697239e+00
1.284848484848484951e+01 5.575757575757575246e+00
1.309090909090909172e+01 5.454545454545454142e+00
1.333333333333333393e+01 5.333333333333333037e+00
1.357575757575757613e+01 5.212121212121211933e+00
1.381818181818181834e+01 5.090909090909090828e+00
1.406060606060606055e+01 4.969696969696969724e+00
1.430303030303030276e+01 4.848484848484848619e+00
1.454545454545454675e+01 4.727272727272726627e+00
1.478787878787878896e+01 4.606060606060605522e+00
1.503030303030303116e+01 4.484848484848484418e+00
1.527272727272727337e+01 4.363636363636363313e+00
1.551515151515151558e+01 4.242424242424242209e+00
1.575757575757575779e+01 4.121212121212121104e+00
1.600000000000000000e+01 4.000000000000000000e+00
1.624242424242424221e+01 3.878787878787878896e+00
1.648484848484848442e+01 3.757575757575757791e+00
1.672727272727272663e+01 3.636363636363636687e+00
1.696969696969696884e+01 3.515151515151515582e+00
1.721212121212121104e+01 3.393939393939394478e+00
1.745454545454545325e+01 3.272727272727273373e+00
1.769696969696969902e+01 3.151515151515150492e+00
1.793939393939394122e+01 3.030303030303029388e+00
1.818181818181818343e+01 2.909090909090908283e+00
1.842424242424242564e+01 2.787878787878787179e+00
1.866666666666666785e+01 2.666666666666666075e+00
1.890909090909091006e+01 2.545454545454544970e+00
1.915151515151515227e+01 2.424242424242423866e+00
1.939393939393939448e+01 2.303030303030302761e+00
1.963636363636363669e+01 2.181818181818181657e+00
1.987878787878787890e+01 2.060606060606060552e+00
2.012121212121212110e+01 1.939393939393939448e+00
2.036363636363636331e+01 1.818181818181818343e+00
2.060606060606060552e+01 1.696969696969697239e+00
2.084848484848484773e+01 1.575757575757576134e+00
2.109090909090908994e+01 1.454545454545455030e+00
2.133333333333333570e+01 1.333333333333332149e+00
2.157575757575757791e+01 1.212121212121211045e+00
2.181818181818182012e+01 1.090909090909089940e+00
2.206060606060606233e+01 9.696969696969688357e-01
2.230303030303030454e+01 8.484848484848477312e-01
2.254545454545454675e+01 7.272727272727266268e-01
2.278787878787878896e+01 6.060606060606055223e-01
2.303030303030303116e+01 4.848484848484844179e-01
2.327272727272727337e+01 3.636363636363633134e-01
2.351515151515151558e+01 2.424242424242422089e-01
2.375757575757575779e+01 1.212121212121211045e-01
2.400000000000000000e+01 0.000000000000000000e+00

View File

@@ -1,37 +0,0 @@
#Spritzing
#Time Ambient
1 31
2 135
3 168
4 182
5 189
6 190
7 190
8 190
9 190
10 189
11 190
12 190
13 189
14 190
15 190
16 190
17 189
18 190
19 190
20 190
21 190
22 190
23 189
24 190
25 190
26 190
27 190
28 190
29 190
30 189
31 190
32 190
33 190
34 190
35 190

View File

@@ -1,38 +0,0 @@
#Spritzing
#Time Surface
1 6
2 13
3 29
4 40
5 47
6 54
7 60
8 65
9 70
10 74
11 78
12 82
13 85
14 88
15 91
16 94
17 96
18 97
19 98
20 99
21 99
22 99
23 99
24 99
25 99
26 99
27 99
28 100
29 100
30 101
31 101
32 101
33 102
34 103
35 103

View File

@@ -1,100 +0,0 @@
0.000000000000000000e+00 0.000000000000000000e+00
4.242424242424242542e-01 7.169229458362316176e-01
8.484848484848485084e-01 1.428572670524745458e+00
1.272727272727272707e+00 2.130208499298593239e+00
1.696969696969697017e+00 2.817089757390826232e+00
2.121212121212121104e+00 3.484475770034495934e+00
2.545454545454545414e+00 4.127625862462654283e+00
2.969696969696969724e+00 4.741799359908352329e+00
3.393939393939394034e+00 5.322255587604640681e+00
3.818181818181818343e+00 5.864253870784571276e+00
4.242424242424242209e+00 6.363053534681196055e+00
4.666666666666666963e+00 6.813913904527567844e+00
5.090909090909090828e+00 7.212094305556735030e+00
5.515151515151515582e+00 7.552854063001753104e+00
5.939393939393939448e+00 7.831452502095669566e+00
6.363636363636364202e+00 8.043148948071538129e+00
6.787878787878788067e+00 8.183202726162404517e+00
7.212121212121211933e+00 8.246873161601330438e+00
7.636363636363636687e+00 8.229419579621360725e+00
8.060606060606060552e+00 8.142734264051528115e+00
8.484848484848484418e+00 8.049102099819306133e+00
8.909090909090910060e+00 7.954963367078545566e+00
9.333333333333333925e+00 7.860318065829249967e+00
9.757575757575757791e+00 7.765166196071416671e+00
1.018181818181818166e+01 7.669507757805047454e+00
1.060606060606060552e+01 7.573342751030141429e+00
1.103030303030303116e+01 7.476671175746698594e+00
1.145454545454545503e+01 7.379493031954719839e+00
1.187878787878787890e+01 7.281808319654204276e+00
1.230303030303030276e+01 7.183617038845151903e+00
1.272727272727272840e+01 7.084919189527563610e+00
1.315151515151515227e+01 6.985714771701438508e+00
1.357575757575757613e+01 6.886003785366776597e+00
1.400000000000000000e+01 6.785786230523578766e+00
1.442424242424242387e+01 6.685062107171844126e+00
1.484848484848484951e+01 6.583831415311573565e+00
1.527272727272727337e+01 6.482094154942766195e+00
1.569696969696969724e+01 6.379850326065422905e+00
1.612121212121212110e+01 6.277123761538812907e+00
1.654545454545454675e+01 6.174324510640207819e+00
1.696969696969696884e+01 6.071597983435813362e+00
1.739393939393939448e+01 5.968940305132156787e+00
1.781818181818182012e+01 5.866347600935763573e+00
1.824242424242424221e+01 5.763815996053158308e+00
1.866666666666666785e+01 5.661341615690869133e+00
1.909090909090908994e+01 5.558920585055421526e+00
1.951515151515151558e+01 5.456549029353340075e+00
1.993939393939394122e+01 5.354223073791151144e+00
2.036363636363636331e+01 5.251938843575382876e+00
2.078787878787878896e+01 5.149692463912558082e+00
2.121212121212121104e+01 5.047480060009204905e+00
2.163636363636363669e+01 4.945297757071848821e+00
2.206060606060606233e+01 4.843141680307013530e+00
2.248484848484848442e+01 4.741007954921228951e+00
2.290909090909091006e+01 4.638892706121018783e+00
2.333333333333333570e+01 4.536792059112909392e+00
2.375757575757575779e+01 4.434702139103427143e+00
2.418181818181818343e+01 4.332619071299096625e+00
2.460606060606060552e+01 4.230538980906445978e+00
2.503030303030303116e+01 4.128457993131998016e+00
2.545454545454545681e+01 4.026372233182281768e+00
2.587878787878787890e+01 3.924277826263822710e+00
2.630303030303030454e+01 3.822170897583144988e+00
2.672727272727272663e+01 3.720047572346776743e+00
2.715151515151515227e+01 3.617903975761242119e+00
2.757575757575757791e+01 3.515736233033067482e+00
2.800000000000000000e+01 3.413540469368780528e+00
2.842424242424242564e+01 3.311312809974904514e+00
2.884848484848484773e+01 3.209049380057968470e+00
2.927272727272727337e+01 3.106746304824495208e+00
2.969696969696969902e+01 3.004399709481012870e+00
3.012121212121212110e+01 2.902005719234047376e+00
3.054545454545454675e+01 2.799560459290122427e+00
3.096969696969696884e+01 2.697060054855767497e+00
3.139393939393939448e+01 2.594500631137504953e+00
3.181818181818182012e+01 2.491878313341862938e+00
3.224242424242424221e+01 2.389189226675367816e+00
3.266666666666666430e+01 2.286429496344544621e+00
3.309090909090909349e+01 2.183595247555917496e+00
3.351515151515151558e+01 2.080682605516016359e+00
3.393939393939393767e+01 1.977687695431364912e+00
3.436363636363636687e+01 1.874606642508488630e+00
3.478787878787878896e+01 1.771435571953915211e+00
3.521212121212121104e+01 1.668170608974169244e+00
3.563636363636364024e+01 1.564807878775775540e+00
3.606060606060606233e+01 1.461343506565263128e+00
3.648484848484848442e+01 1.357773617549156597e+00
3.690909090909091361e+01 1.254094336933980092e+00
3.733333333333333570e+01 1.150301789926262863e+00
3.775757575757575779e+01 1.046392101732529056e+00
3.818181818181817988e+01 9.423613975593052583e-01
3.860606060606060908e+01 8.382058026131148365e-01
3.903030303030303116e+01 7.339214421004879307e-01
3.945454545454545325e+01 6.295044412279485746e-01
3.987878787878788245e+01 5.249509252020206906e-01
4.030303030303030454e+01 4.202570192292340301e-01
4.072727272727272663e+01 3.154188485161137923e-01
4.115151515151515582e+01 2.104325382691821789e-01
4.157575757575757791e+01 1.052942136949696628e-01
4.200000000000000000e+01 4.440892098500626162e-16

Binary file not shown.

Before

Width:  |  Height:  |  Size: 284 KiB

View File

@@ -84,8 +84,7 @@ are completely lost when trying to scale it up.
\section{The process of making a starter}
\begin{figure}[!htb]
\centering
\includegraphics[width=\textwidth]{sourdough-starter-activity-indicators}
\includegraphics[width=\textwidth]{sourdough-starter.jpg}
\caption[Very active sourdough]{A very active sourdough starter shown by the
bubbles in the dough.}%
\label{fig:sourdough-starter}
@@ -235,22 +234,11 @@ the starter when the starter itself dried out a lot.
You will
still have some mixture left from your first day. As this contains
possibly dangerous pathogens that have been activated make sure you discard
this mixture. A rule of thumb is to begin keeping the discard,
the moment you made your first successful bread. At that point
your discard is long-fermented flour that is an excellent addon
this mixture. Once your sourdough starter is mature you never need to
discard it. It's long-fermented flour that is an excellent addon
used to make crackers, pancakes or delicious hearty sandwich
bread\ldots I~also frequently dry it and use it as a rolling agent
for pizzas that I~am making.\footnote{Discarding starter when preparing
a new batch can be frustrating. With experience, bread-making
becomes more efficient, and excess discard is rarely produced. It is
possible to prepare just the right amount of starter
needed for bread dough. In fact, a fully depleted starter can even be revived
using a small portion of bread dough. Any leftover discard, rich in spores,
can also serve as a backup to create a new sourdough starter. Simply mix the
discard with a little flour and water, and it will spring back to life. That is a
great option if the starter was accidentally depleted. A practical approach
is to store all discard in a single jar in the fridge, adding new discard on
top as needed and using it whenever required.}
for pizzas that I~am making.
You should hopefully again see some bubbles, the starter increasing
in size and/or the starter changing its smell. Some people give
@@ -284,12 +272,9 @@ starters.
\centering
\input{figures/fig-starter-readiness.tex}
\caption[Determining sourdough starter readiness]{A flow chart showing you how to
determine if your sourdough starter is ready to be used. Make sure to
wait at least \qtyrange{6}{12}{\hour} after feeding your
starter to check its readiness. To evaluate it, look at your starter's size
increase, airy texture and take note of its smell.
All three factors are important to properly evaluate your starter's activity level.
An active starter is an important foundation for a successful dough fermentation}%
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.}%
\label{fig:sourdough-starter-readiness}
\end{flowchart}

View File

@@ -1,11 +1,11 @@
\ProvidesPackage{sourdough}
\usepackage{blindtext}
\usepackage{graphicx}
\usepackage{pgfplots}
\usepackage{booktabs}
\usepackage{longtable}
\usepackage{chemformula}
\usepackage{chemfig}
\usepackage{booktabs}
\usepackage{makecell}
\usepackage[mode=match, reset-text-family=false]{siunitx}
\usepackage{fontspec}
@@ -24,17 +24,16 @@
types=flowcharts,% ,
float,
floattype=4,%
counterwithin=chapter,
name=Flowchart,%
listname = {List of Flowcharts}
]{loc}
\setuptoc{loc}{chapteratlist}
\DeclareTOCStyleEntry[numwidth=3em]{tocline}{figure}
\DeclareTOCStyleEntry[numwidth=3em]{tocline}{flowchart}
\DeclareTOCStyleEntry[numwidth=3em]{tocline}{table}
% Common abbreviations
\input{abbreviations.tex}
\newcommand{\ie}{\emph{i.e.}\@ifnextchar.{\!\@gobble}{}}
\newcommand{\eg}{\emph{e.g.}\@ifnextchar.{\!\@gobble}{}}
\newcommand{\etc}{etc\@ifnextchar.{}{.\@}}
% Consistent pH values
\newcommand{\pHvalue}[1]{pH~\SI{#1}{}}
@@ -52,9 +51,8 @@
\DeclareRobustCommand\sbseries{\fontseries{sb}\selectfont}
% Fonts for accessibility
\ifdefined\isaccessible
\usepackage[mathrm=sym]{unicode-math}
\setmathfont{Fira Math}[Scale=MatchLowercase]
\setmainfont{Open Sans}[Scale=MatchLowercase]
\setmainfont{Open Sans}[
Scale=MatchLowercase]
\else
\setmainfont{TeX Gyre Pagella}[Scale=1.0] % Or Palatino Linotype, etc.
% TODO not available on github CI
@@ -74,11 +72,10 @@
\addbibresource{references.bib}
% Clickable links in the table of contents
\usepackage{hyperref}
\usepackage[ocgcolorlinks]{hyperref}
\usepackage{bookmark}
\hypersetup{%
linktoc=all,
colorlinks = true,
linkcolor = hlorange,
urlcolor = codeblue,
citecolor = hlocre,

View File

@@ -1,572 +0,0 @@
0cm
0pt
100x
10x
1940s
1cm
1em
1in
1mm
1pt
2O
2cm
2mm
2pt
3cm
3em
3mm
3pt
4cm
4em
4mm
4pt
5cm
5em
6cm
7cm
7em
8cm
Abu
Acad
Alanblue
Alveograph
Amaia
Amanor
Amylases
Andail
Andale
Andreas
Andrieu
Andrzej
Anonnn
Antonie
Archaeobotanical
Arranz
Aryal
Aurore
Autolyse
BTSkete
BUtn4HKAiBs
Bangzhu
Banneton
Bassinage
Battista
Berghoff
BigWullie
Biopreservation
Bleve
Blixikan
Blusie
Bouguetaïa
Brigitta
Broa
Brockman
Brühstück
Buehler
Buksa
Böcker
CO2
Cagno
Capusoni
Capyboppy
Catzeddu
Charliefleurene
Chia
Chrillesen
Christiane
Chrysanna
Coeliac
Compostional
Cédric
DIY
DKitSeattle
Danieel
Danois
DeclareDocumentCommand
DeclareNewTOC
DeclareRobustCommand
DeclareSIUnit
DeclareTOCStyleEntry
Dekkera
Delwen
Diastatic
Dichev
Drey
DuBosq
Duivelsjong
Dybedahl
Eicher
Elsevier
Emerg
Ethanoic
FEMS
Fazio
Fermentolyse
Fermentolysis
Fleischmann
Fleischmann's
Flipp
FontFace
François
Fredrik
Fructilactobacillus
Gambu
Gasbarrini
Gelatinization
Geoff
Gianluca
Glutenins
Gobbetti
Gognies
Goldstein
Gottfried
Gruyère
Guidone
Gáliková
HCode
Halina
Hansandremanfredsson
Hendrik
Heterofermentative
Hiroshi
Hito
Holmer
Homofermentative
Horsford
IfUsePrefixLine
IfWideLayout
Ifthispageodd
Ilsefa
Inma
Integrale
Jc
Jessicat
Jimjo
JorisBelmans
Jure
Jz
KAO
KOMA
Kankiti
Kao
Karomizu
Keary
Kirill
KitchenAid
Kleinw
Kleinwächter
Knödel
Kochstück
Koga
Kongraksawech
Kotz
Krawontka
Krzysztof
Kuchengnom
Kuriyama
Labelling
Lausuch
Lecloux
Leeuwen
Leucosporidium
Leung
Levain
Lievito
Lightowler
Lili1232000
Lise
Lizabeth
Lucke
Lukasz
Madjedbebe
Maillard
Maktabdar
Marianito
Marijke
Maryam
MatchLowercase
Matsumoto
Mattson
Mckenney
Mcleish
Meghann
Mello
Mercier
Michaela
Microbiol
Mieke
Mitelski
Moj
Monicaks
MqH3GVfjfBc
NONINFRINGEMENT
Napoli
Nic
Nirpf
Nowak
Nowosiadly
Nowotna
Oest
Otaegui
Overfermented
Paaskus
Pagella
Palatino
Pangea
Parmigiano
Pentosans
Pieter
Piskur
Pitdepitis
Poudel
Praznik
Pre
Preshape
Preshaping
Proteolytic
ProvidesPackage
Pui
Qingfa
Rachana
Rafa
Raffaella
Raptorrich
RedeclareSectionCommand
Rizthebread
Roccato
Roijalbaker
Rori
Saccharomyces
Sagar
Schmid
Schmitz
Sebastianklocke
Semibold
Semmeln
Shar
Shelleymierle
Sherik
Shi
Sivy
Smedt
Smirnov
Sourdoughhome
Spelt
Spicher
Stollen
Strambinha
Sune
T00
T1050
T110
T150
T405
T45
T55
T550
T80
T812
TODO
Tangzhong
Tbonewilly
Teepakorn
Teff
Therealbruce
Toph
Underfermented
Usliv
Valadez
Valdaora
Vassil
Vitis
Voicu
Vollkorn
Wikander
Wittenboer
Yudane
Zhou
Ziobro
Zoltan
a4paper
achter
addbibresource
addon
afterskip
aliquot's
alveogram
alveograph
amylases
arabinoxylan
archae
archaea
archaeon
autodot
autolyse
autolysing
backend
banneton
bannetons
bassinage
batard
beforeskip
bfseries
biber
biblatex
biga
bigskip
biocontrol
blindtext
booktabs
breadmaking
breadrolls
breaklinks
bruxellensis
c8GId0ByASo
caco
cagno
calc
captionsetup
caramelise
carbonarius
cerevisiae
chapappifchapterprefix
chapteratlist
chapterformat
chapterlinesformat
chapterstylebar
chapterstylekao
chapterstylelines
chapterstyleplain
chemfig
chemformula
citecolor
codeblack
codeblue
coeliac
colour
countertop
crum
defaultfontfeatures
degF
dependant
diastatic
dimexpr
discard2
doi
eg
egypt
egyptian
ejcn
emph
endophytes
enskip
enumitem
evans
fermentolyse
fermentolysis
fermentée
fi
flatbreads
flavour
flavours
fleischmann
floattype
flushleft
flushright
fnpct
fontseries
fontspec
foodsafe
footnotesize
frigidum
gMbZeUIVzZY
gelatinization
gestions
giga
github
glucan
glutenin
glycaemic
graphicspath
graphicx
hangfrom
heterofermentative
hfill
hidelinks
hlocre
hlorange
hoffset
homofermentative
howpublished
hrule
hrulefill
hscale
hspace
htb
htp
hydrations
hyperref
hypersetup
ie
ifdefined
ifnextchar
ifthenelse
ifwidelayout
includegraphics
industrialisation
injera
isaccessible
jalapeño
jordan
kao
karl
keepaspectratio
kitchenaid
labelled
lacto
le
leavevmode
leftmargin
lievito
linkcolor
linktoc
listname
lll
loafpan
loc
longtable
madre
make4ht
makebox
makecell
makefile
marginparsep
marginparwidth
mbox
microbiome
microtype
mie
milho
mixins
mtocshift
naïve
newcommand
newif
newlength
nextline
niger
nobreakspace
nordic
nuklei
numwidth
ocgcolorlinks
oddsidemargin
outcompete
outcompeted
outcompeting
overferment
overfermented
overproof
overproofing
pHvalue
paperwidth
parbaked
parbox
parmesan
pathreplacing
pdfinfo
pentosans
ph
pinkpic
png
poolish
pre
preshape
preshaping
purée
pâte
raffaella
redpic
renewcommand
rl
roti
saccharomyces
sanfranciscensis
sanfrancisco
saprotrophic
sbseries
scalebox
scandinavia
scorings
selectfont
semibold
sep
setchapterimage
setchapterpreamble
setchapterstyle
setlength
setlist
setmainfont
setmonofont
setsansfont
setuptoc
sffamily
shelflife
siunitx
sj
smedt
softbuns
spelt
sporulated
sporulates
sporulating
sporulation
standmixer
stollen
sublicense
sug
switzerland
teff
tex
textwidth
th
theadfont
thechapter
thrillist
tikz
tikzpicture
timeframe
timespan
tocline
toolchain
touchpoints
transformative
uk
unchlorinated
underfermented
underproofed
url
urlcolor
usepackage
vfDIfkqBCuk
vienna
vinifera
viscoelastic
vscale
vspace
wahlfeld
wait1
wait2
wetted
xsep
xshift
yYkTrGHNW2w
yeasted
yellowpic
yogurty
ysep
yshift
yudane
ziplock
Örjan
Łukasz

View File

@@ -7,7 +7,7 @@ later time.
\end{quoting}
A summary can be found in Table~\ref{table:bread-storage}, with details and
explanation in the rest of this chapter.
explanation in th rest of this chapter.
\begin{table}[!htb]
\centering
\input{tables/table-storing-bread-overview.tex}
@@ -120,4 +120,4 @@ A 2008 study hints that there might be some health
benefits to freezing and toasting your bread. By doing so
the starch molecules could become more resistant to digestion
and thus lower your body's blood sugar
response by almost 40\%~\cite{freezing+toasting+bread}.
response by almost 40\%~\cite{freezing+toasting+bread}.

View File

@@ -1,3 +1,5 @@
@import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;800&display=swap');
:root{
--ff-sans: 'Open Sans', sans-serif;
--fw-regular: 400;
@@ -13,8 +15,6 @@
--padding-hamburger: 5px;
--c-beige: #F3EDE6;
--border-radius: 7px;
--image-padding: 14px;
--image-background: #ffffff;
}
@media (min-width: 1200px){
@@ -145,6 +145,7 @@ nav.TOC a, nav.TOC a:visited{
/* *** Colors *** */
/* ************** */
body{
background-color: var(--c-beige);
}
@@ -251,10 +252,6 @@ figcaption.caption {
display: block;
}
.chapterToc a, .chapterToc, .likechapterToc a, .likechapterToc, .appendixToc a, .appendixToc, .addchapToc a {
font-weight: var(--fw-bold);
}
@media (max-width: 768px) {
.toggle-menu-label {
display: block;
@@ -318,7 +315,7 @@ figcaption.caption {
display: block;
color: #000;
font-size: 20px;
font-weight: var(--fw-bold);
font-weight: bold;
}
.chapterToc a, .sectionToc a, .subsectionToc a, .likechapterToc a {
@@ -388,6 +385,11 @@ h4 {
margin-top: 1em;
}
img[alt~="PIC"], iframe, a img {
border-radius: var(--border-radius);
border: 2px solid var(--c-black);
}
main.main-content, div.footnotes, main.titlepage {
background-color: var(--c-beige);
}
@@ -476,6 +478,10 @@ nav.TOC span:hover, nav.TOC span:hover *, nav.TOC span.chapterToc.selected, nav.
}
p.flowchart-image-wrapper {
background: white;
padding: 20px;
border-radius: var(--border-radius);
border: 2px solid var(--c-black);
display: flex;
justify-content: center;
}
@@ -499,7 +505,7 @@ blockquote {
border: 2px solid var(--c-black);
color: var(--c-black);
padding: 4px;
font-weight: var(--fw-bold);
font-weight: bold;
text-decoration: none;
}
.crosslinks-bottom a.prev {
@@ -522,19 +528,6 @@ blockquote {
display: none;
}
figure.float, div.figure, figure.figure {
padding: var(--image-padding);
background: var(--image-background);
}
figure.figure p.noindent {
text-align: center;
}
.flowchart-image-wrapper {
text-align: center;
}
@media (max-width: 768px) {
.header {
display: none;
@@ -579,6 +572,10 @@ figure.figure p.noindent {
background: var(--c-black-background);
}
p.flowchart-image-wrapper {
padding: 5px;
}
.menu-entry:hover {
background-color: transparent;
}
@@ -596,8 +593,4 @@ figure.figure p.noindent {
border: none;
border-radius: 0px;
}
figure.float, div.figure, figure.figure {
padding: calc(var(--image-padding) / 2);
}
}
}

View File

@@ -14,6 +14,7 @@ Anna G.,
Anonnn,
Anthony Atkinson,
Aurore,
BTSkete,
Beatriz,
Bee,
Ben Davies,
@@ -22,7 +23,6 @@ Blixikan,
Blusie,
Brigitta,
Brockman,
BTSkete,
C Fazio,
Cal Kotz,
Case,
@@ -36,12 +36,12 @@ Christiane B,
Christine,
Chrysanna,
Colleen Guidone,
DKitSeattle,
Danieel,
Daniel,
David,
Dee,
Desiree S,
DKitSeattle,
Douglas Penna,
Drey,
Duivelsjong,
@@ -68,7 +68,6 @@ Jessicat,
Jimjo,
John E Bergman,
Jonathan,
JorisBelmans,
Jose Lausuch,
Judith Roth,
Julian,
@@ -141,7 +140,7 @@ Sven,
Tbonewilly,
Thales Mello,
Therealbruce,
Tracy and Paul Will,
Tracy \& Paul Will,
Usliv,
Vassil Dichev,
Vladimir Smirnov,
1 Abu
14 Anonnn
15 Anthony Atkinson
16 Aurore
17 BTSkete
18 Beatriz
19 Bee
20 Ben Davies
23 Blusie
24 Brigitta
25 Brockman
BTSkete
26 C Fazio
27 Cal Kotz
28 Case
36 Christine
37 Chrysanna
38 Colleen Guidone
39 DKitSeattle
40 Danieel
41 Daniel
42 David
43 Dee
44 Desiree S
DKitSeattle
45 Douglas Penna
46 Drey
47 Duivelsjong
68 Jimjo
69 John E Bergman
70 Jonathan
JorisBelmans
71 Jose Lausuch
72 Judith Roth
73 Julian
140 Tbonewilly
141 Thales Mello
142 Therealbruce
143 Tracy and Paul Will Tracy \& Paul Will
144 Usliv
145 Vassil Dichev
146 Vladimir Smirnov

View File

@@ -11,26 +11,4 @@
\Configure{AddCss}{book-ebook.css}
\Configure{CoverMimeType}{image/jpeg}
\CoverMetadata{cover/cover-page.jpg}
\AddToHook{env/tikzpicture/begin}{\fontfamily{opensans-TLF}\selectfont}
\Configure{@HEAD}{\HCode{
<style type="text/css">
@import url('https://fonts.cdnfonts.com/css/open-sans');
body{
font-family: 'Open Sans';
}
</style>}}
% Deal with chemical equations in a single svg
\ExplSyntaxOn
\def\standaloneenv#1{}
\pend:def\schemestart{\Picture+{}}
\append:def\CF_schemestop{\EndPicture}
\ExplSyntaxOff
\makeatletter
\def\texfourht@tikz@begin{
\protect\csname nested:math\endcsname% support display math
\Picture+[\csname a:Picture-alt\endcsname]{}%
}
\makeatother
\EndPreamble

View File

@@ -325,7 +325,7 @@ the surface of the apple a lot quicker. When replicating this with a bread dough
I~would achieve less oven spring.
\begin{figure}[ht]
\input{plots/fig-temperature-surface.tex}
\includegraphics[width=\textwidth]{apple-experiment-surface-temperatures}
\caption[Surface temperature versus steaming technique]{A chart showing how
the temperature of the apple's surface changes with different
steaming techniques.}%
@@ -333,7 +333,7 @@ I~would achieve less oven spring.
\end{figure}
\begin{figure}[ht]
\input{plots/fig-temperature-ambient.tex}
\includegraphics[width=\textwidth]{apple-experiment-ambient-temperatures}
\caption[Dutch Oven temperature versus steaming technique]{This figure shows
how the ambient temperatures inside of the Dutch oven change depending
on the steaming technique that is used.}%

View File

@@ -188,7 +188,7 @@ protecting your sourdough starter from aerobic mold entering through
the top.
\begin{figure}[!htb]
\centering
\centering
\includegraphics[width=0.5\textwidth]{sourdough-starter-hooch}
\caption[Hooch] {Hooch building on top of a sourdough
starter~\cite{liquid+on+starter}.}%
@@ -763,3 +763,20 @@ is concentrated extracted gluten from wheat flour.
I~recommend that you add around \qty{5}{\gram} of wheat gluten for every
\qty{100}{\gram} of flour that you are using.
\subsection[Incorporating seeds into the dough]{What's the best stage to
incorporate inclusions (seeds) into the dough?}
You can include seeds directly at the start when mixing the dough. If you use
whole seeds such as wheat or rye kernels, soak them in water overnight and
then rinse them before adding them to the dough. This makes sure that they
are not crunchy and are soft enough when eating the bread. If you forgot to soak
them you can cook the seeds for 10~minutes in hot water. Rinse them with cold
water before adding them to your dough.
If you want to sweeten the dough, your best option is to add sugar during the
shaping stage. Sugar added too early in the process typically gets fermented until none of it
remains. Adjust your shaping technique a little bit and spread your sugar
mixture over a flattened-out dough. You can then roll the dough together,
incorporating layers of sugar.

View File

@@ -9,14 +9,6 @@
}}
\Configure{AddCss}{style.css}
\AddToHook{env/tikzpicture/begin}{\fontfamily{opensans-TLF}\selectfont}
\Configure{@HEAD}{\HCode{
<style type="text/css">
@import url('https://fonts.cdnfonts.com/css/open-sans');
body{
font-family: 'Open Sans';
}
</style>}}
\ConfigureEnv{titlepage}{\ifvmode\IgnorePar\fi\EndP\HCode{<main class="titlepage">}}{\ifvmode\IgnorePar\fi\EndP\HCode{</main>}}{}{}
% Mini TOC
@@ -47,17 +39,5 @@
}
\ConfigureToc{loc}{\HCode{<span class="lofToc">}}{\ }{}{\HCode{</span><br />}}
\ExplSyntaxOn
\def\standaloneenv#1{}
\pend:def\schemestart{\Picture+{}}
\append:def\CF_schemestop{\EndPicture}
\ExplSyntaxOff
\makeatletter
\def\texfourht@tikz@begin{
\protect\csname nested:math\endcsname% support display math
\Picture+[\csname a:Picture-alt\endcsname]{}%
}
\makeatother
\begin{document}
\EndPreamble

Binary file not shown.

Before

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

View File

@@ -45,7 +45,7 @@ that tastes much better than any store-bought bread.
\section{The process}
\begin{flowchart}[!htb]
\centering
\centering
\input{figures/fig-wheat-sourdough-process.tex}
\caption{The typical process of making a wheat-based sourdough bread.}%
\label{fig:wheat-sourdough-process}
@@ -405,7 +405,7 @@ your dough. The warmer the temperature, the faster the process; the colder, the
slower the process.
While food is available, the microorganisms will reproduce and increase in
quantity. The process is self-limiting: it stops when there is no
quantity. The process is a self-limiting: it stops when there is no
more food available. This can be compared to wine making where
the yeast ultimately sporulates and dies as ethanol levels increase. The ethanol creates an
environment that makes it impossible for other
@@ -448,7 +448,7 @@ explained earlier, your
bread dough is essentially a gigantic starter. The low inoculation rate allows
the starter to regrow inside your main dough into a desirable balance.
Furthermore, the enzymes have enough time to break down the flour. This also
allows me to skip the so-called autolysis step completely (more in the next section).
allows me to skip the so-called autolysis step completely (more in the next chapter).
This greatly simplifies the whole process.
\section{Autolysis}%
@@ -465,7 +465,7 @@ The overall time that flour and water are in contact is extended. Thus you get t
beneficial enzymatic reactions that improve the taste and characteristics of the
dough. I~do not recommend autolysis as it adds an unnecessary step to the
process. Instead, I~recommend the fermentolysis technique which will be covered in the
next section of this book.
next chapter of this book.
The effects of autolysis are very interesting. Try to mix just flour and
water and let that sit for a day. During the day, check the consistency of
@@ -579,8 +579,7 @@ your gluten network transforms into a web-like structure. This is what
traps the gases during the fermentation process~\cite{how+does+gluten+work}.
\begin{figure}[!htb]
\centering
\input{plots/fig-yeast-sourdough-strength.tex}
\includegraphics[width=\textwidth]{dough-strength-sourdough-yeast}
\caption[Dough strength over time without kneading]{A schematic
visualization of automatic gluten development. The doughs are not
kneaded, just initially mixed. Note how dough strength deteriorates
@@ -588,6 +587,8 @@ traps the gases during the fermentation process~\cite{how+does+gluten+work}.
sourdough due to the bacteria's gluten proteolysis.}%
\label{fig:wheat-yeast-sourdough-degradation}
\end{figure}
% See https://www.figma.com/file/wTUVe6Nm2INOvT82mJhQur/Dough-strength-visualisation?node-id=0%3A1&t=fjdPvXYuJpsdQfWN-1 for
% the source of this visualization
The soaking process has to be extended the more whole-wheat flour is used.
The purpose of the wheat kernel's outer bran is to soak up water as fast
@@ -615,7 +616,7 @@ by adding water and kneading again. This is a great trick to make
a more extensible dough with lower-gluten flour~\cite{bassinage+technique}.
When machine kneading a dough, opt for the same technique shown in
flowchart~\ref{fig:wheat-sourdough-kneading-process}. Initially opt for a low
figure~\ref{fig:wheat-sourdough-kneading-process}. Initially opt for a low
speed. This helps the homogenization process.
After waiting to allow the flour to soak up the water, proceed on a higher speed
setting. A good sign of a well-developed gluten network is
@@ -1563,7 +1564,7 @@ A reliable way to ensure consistent proofing is to opt for using a pH
meter. By checking the amount of piled-up acidity you can ensure
each of your doughs has the right amount of acidity. Opt for an iterative
approach and check the pH for multiple proofing times. Find the pH
value that creates the best bread for you. Once you have identified
the value that creates the best bread for you. Once you have identified
your perfect pH value you can resort to that number on all following
doughs. See Table~\ref{table:sample-ph-values} for some sample pH values
to follow.
@@ -1610,7 +1611,7 @@ banneton should now be facing you.
\label{fig:artistic-scoring}
\end{figure}
The scoring cut is done at a \ang{45}~angle relative to the dough's
The scoring cut for done at a \ang{45}~angle relative to the dough's
surface slightly off the dough's center. With the \ang{45}~angle cut
the overlaying side will rise more in the oven than the other side.
This way you will achieve a so-called \emph{ear} on the final bread.

View File

@@ -15,13 +15,13 @@ push_docker_image: build_docker_image
docker push $(DOCKER_IMAGE):latest
# Books/website
serif_pdf:
$(DOCKER_CMD) "cd /opt/repo/book && make serif_pdf"
build_serif_pdf:
$(DOCKER_CMD) "cd /opt/repo/book && make build_serif_pdf"
ebook:
$(DOCKER_CMD) "cd /opt/repo/book && make ebook"
build_ebook:
$(DOCKER_CMD) "cd /opt/repo/book && make build_ebook"
pdf:
build_pdf:
$(DOCKER_CMD) "cd /opt/repo/book && make"
bake:
@@ -31,7 +31,7 @@ website:
$(DOCKER_CMD) "cd /opt/repo/book && make website"
booklet:
$(DOCKER_CMD) "cd /opt/repo/book && make booklet"
$(DOCKER_CMD) "cd /opt/repo/book && make build_booklet"
mrproper:
$(DOCKER_CMD) "cd /opt/repo/book && make mrproper"
@@ -48,8 +48,3 @@ print_os_version:
start_shell:
docker run -it -v $(PWD):/opt/repo $(DOCKER_IMAGE) /bin/bash
# Old names for backward compatibility
build_serif_pdf: serif_pdf
build_ebook: ebook
build_pdf: pdf

View File