Compare commits
198 Commits
clarify-ba
...
225-ebook-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ac8f2038ee | ||
|
|
75dc8432bb | ||
|
|
8fd1df9d33 | ||
|
|
70d90781c8 | ||
|
|
d02e99c46e | ||
|
|
9e267a2b4b | ||
|
|
a93a19d40d | ||
|
|
7f2f010571 | ||
|
|
75b015cda6 | ||
|
|
d0a5d6d37e | ||
|
|
2c86529981 | ||
|
|
e73b0f331a | ||
|
|
3b8dfd8d81 | ||
|
|
374fb7adfa | ||
|
|
d1e3390360 | ||
|
|
bcdaf79479 | ||
|
|
8b581f3bc4 | ||
|
|
f6cf15156a | ||
|
|
864127e571 | ||
|
|
d884d588d6 | ||
|
|
42c9f31673 | ||
|
|
d5ae1315ce | ||
|
|
311bd55a7f | ||
|
|
b57089b777 | ||
|
|
ad94b9fabc | ||
|
|
194511d5cf | ||
|
|
7f6fde9e42 | ||
|
|
62880e7ff2 | ||
|
|
157cbb03b7 | ||
|
|
d37e2aa4bc | ||
|
|
9eaff81c49 | ||
|
|
6a2b334c2a | ||
|
|
14e1e7ae2e | ||
|
|
1b5d23a348 | ||
|
|
98a3360348 | ||
|
|
1b90bf669b | ||
|
|
427dcbfa37 | ||
|
|
eea69bb854 | ||
|
|
c3904d2f14 | ||
|
|
e77e7e5260 | ||
|
|
8a3b237f21 | ||
|
|
9ad48ea1a3 | ||
|
|
fe667b82e8 | ||
|
|
19029daf8a | ||
|
|
fa157c350e | ||
|
|
3069b5ff7c | ||
|
|
3a1b247bc4 | ||
|
|
c99efe6f20 | ||
|
|
0a0d227611 | ||
|
|
bbeef2d10f | ||
|
|
d7b2cb6be4 | ||
|
|
d6c862eea4 | ||
|
|
ae7c7fda8f | ||
|
|
1ab7970708 | ||
|
|
221119e6d0 | ||
|
|
bd1050d75d | ||
|
|
2afe5cff49 | ||
|
|
1166f6d925 | ||
|
|
bf6a319e8f | ||
|
|
a87cc723a6 | ||
|
|
127ca9423e | ||
|
|
54461ec45e | ||
|
|
35a0a89765 | ||
|
|
7014b1f5ea | ||
|
|
69c7b8bc5f | ||
|
|
b2dfd2e71c | ||
|
|
99e96c768f | ||
|
|
727cf0a16a | ||
|
|
8efa4fb424 | ||
|
|
48916a5eb7 | ||
|
|
0c0c5db7fe | ||
|
|
b4bce912b3 | ||
|
|
2429ceb825 | ||
|
|
cb73bf735c | ||
|
|
14509a9f4a | ||
|
|
8c5248e455 | ||
|
|
8952b62289 | ||
|
|
324585c172 | ||
|
|
eba366253c | ||
|
|
6efa956165 | ||
|
|
c5019a19f6 | ||
|
|
5753fdcd26 | ||
|
|
e9f6dba1f5 | ||
|
|
99de1839c6 | ||
|
|
d1ca7b8bb9 | ||
|
|
9462f0319e | ||
|
|
6202f44881 | ||
|
|
32d600005c | ||
|
|
d78c29ba66 | ||
|
|
60928bc404 | ||
|
|
e00f853063 | ||
|
|
2dea80a29c | ||
|
|
6eba9635dd | ||
|
|
7804bd8df1 | ||
|
|
cf49ab1ccc | ||
|
|
8743660c0a | ||
|
|
69acb8c04d | ||
|
|
972edd651b | ||
|
|
d462e5adba | ||
|
|
c6a5038d2f | ||
|
|
b57e9ba8c0 | ||
|
|
9adb64c1ee | ||
|
|
d2d79cd992 | ||
|
|
ef92cac0a1 | ||
|
|
a5b1fa93dc | ||
|
|
b588b55c1a | ||
|
|
78cf73bb2c | ||
|
|
16f3fe7338 | ||
|
|
e27e414291 | ||
|
|
d763c78f2f | ||
|
|
85144e4678 | ||
|
|
7565b83dde | ||
|
|
481a041d5d | ||
|
|
0c7756bc76 | ||
|
|
b03a81791b | ||
|
|
e339e73c62 | ||
|
|
a7564e93e3 | ||
|
|
9c18bfcff2 | ||
|
|
abd3a23486 | ||
|
|
296461f13d | ||
|
|
424f4c84c6 | ||
|
|
12bfae0710 | ||
|
|
aa2c80a048 | ||
|
|
e7c4590a0f | ||
|
|
ce2f210f3a | ||
|
|
2b34224954 | ||
|
|
6ef6901348 | ||
|
|
2daba55c3e | ||
|
|
ec589630ed | ||
|
|
792e1af0ef | ||
|
|
7c1feb3699 | ||
|
|
e82475bd74 | ||
|
|
2e4fae3d13 | ||
|
|
07a4657ee8 | ||
|
|
120677b8d7 | ||
|
|
cf935771d6 | ||
|
|
1b99fbe1ca | ||
|
|
fad09e9b26 | ||
|
|
044ed02a7d | ||
|
|
67adc3b54f | ||
|
|
e5bea976cd | ||
|
|
ee5e47de63 | ||
|
|
94c775d511 | ||
|
|
11ff3ca043 | ||
|
|
0c67489980 | ||
|
|
17bc88615f | ||
|
|
ebdf0ad3fc | ||
|
|
37d7ec12a8 | ||
|
|
a0bff5442f | ||
|
|
3d16d58817 | ||
|
|
24a9f5c31e | ||
|
|
5ba0b99b4e | ||
|
|
d371b11686 | ||
|
|
574eca71e6 | ||
|
|
99cf6db279 | ||
|
|
7f86f2fc20 | ||
|
|
266de7b7ee | ||
|
|
66ae206cdc | ||
|
|
7d48364d80 | ||
|
|
2d0e0b2d73 | ||
|
|
52a35bb61d | ||
|
|
92c5e418b3 | ||
|
|
5d95dd4f34 | ||
|
|
8920775067 | ||
|
|
66e8a57b51 | ||
|
|
cf1e2b03be | ||
|
|
8ae707a1c6 | ||
|
|
9faf2cfc63 | ||
|
|
d31372e063 | ||
|
|
20b058fbc6 | ||
|
|
c799d65826 | ||
|
|
d6dfb50beb | ||
|
|
240d6f4591 | ||
|
|
fd9924a7c4 | ||
|
|
c987ddfa92 | ||
|
|
996a6e6e47 | ||
|
|
93fb6bce30 | ||
|
|
e8748b7137 | ||
|
|
4af4287561 | ||
|
|
0fc8bf911b | ||
|
|
ae7e518106 | ||
|
|
e3a04ca337 | ||
|
|
5cd2b6862f | ||
|
|
ec6f9b335d | ||
|
|
dbc7d84610 | ||
|
|
9c7e75b104 | ||
|
|
a31d4c5e70 | ||
|
|
ae8ece92f0 | ||
|
|
042343819e | ||
|
|
29461db9ab | ||
|
|
11580d4647 | ||
|
|
a4235fd028 | ||
|
|
b8c080d17f | ||
|
|
f104287988 | ||
|
|
c73e297585 | ||
|
|
2c78aeb92d | ||
|
|
c85cc7caaa | ||
|
|
400305a172 |
14
.github/workflows/release-book-website.yml
vendored
@@ -64,7 +64,7 @@ jobs:
|
||||
options: -v ${{ github.workspace }}:/app
|
||||
run: |
|
||||
cd /app/book
|
||||
make -j bake
|
||||
make -j -O bake
|
||||
- name: Release baked book to S3
|
||||
uses: shallwefootball/s3-upload-action@master
|
||||
with:
|
||||
@@ -74,21 +74,13 @@ jobs:
|
||||
source_dir: book/release
|
||||
destination_dir: release
|
||||
- name: Upload book Artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
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:
|
||||
@@ -98,7 +90,7 @@ jobs:
|
||||
source_dir: website/static_website_html
|
||||
destination_dir: static_html_root
|
||||
- name: Upload website Artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: website
|
||||
path: website/static_website_html
|
||||
|
||||
24
.github/workflows/test-book-website.yml
vendored
@@ -1,6 +1,12 @@
|
||||
name: Test book and website for given image
|
||||
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
push:
|
||||
branches-ignore:
|
||||
- main
|
||||
pull_request:
|
||||
branches:
|
||||
- '**'
|
||||
|
||||
env:
|
||||
DOCKER_IMAGE: ghcr.io/${{ github.repository }}:latest
|
||||
@@ -27,32 +33,24 @@ jobs:
|
||||
run: |
|
||||
cd /app/book
|
||||
make printvars
|
||||
- name: Test baking the release versions
|
||||
- name: Test baking the release versions and website
|
||||
uses: addnab/docker-run-action@v3
|
||||
with:
|
||||
image: ${{ env.DOCKER_IMAGE }}
|
||||
options: -v ${{ github.workspace }}:/app
|
||||
run: |
|
||||
cd /app/book
|
||||
make -j build_serif_pdf build_ebook
|
||||
make -j -O serif ebook website
|
||||
- name: Upload book Artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
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@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: website
|
||||
path: website/static_website_html
|
||||
|
||||
4
.gitignore
vendored
@@ -15,7 +15,6 @@
|
||||
*.dlog
|
||||
*.bak
|
||||
*.opf
|
||||
.DS_Store
|
||||
book/book.out
|
||||
.vscode/
|
||||
book/bookch*
|
||||
@@ -42,3 +41,6 @@ book/epub/
|
||||
book/book-epub/
|
||||
book/bw-book-epub/*
|
||||
book/release/*
|
||||
book/low-res-book-epub/*
|
||||
book/epub_build/*
|
||||
book/website_build/*
|
||||
|
||||
@@ -8,7 +8,7 @@ LABEL org.opencontainers.image.source="https://github.com/hendricius/the-sourdou
|
||||
# Print release information if needed
|
||||
RUN cat /etc/*release*
|
||||
|
||||
# Install base depdendencies
|
||||
# Install base dependencies
|
||||
RUN apt-get update && \
|
||||
apt-get install --yes -y --no-install-recommends \
|
||||
sudo \
|
||||
|
||||
11
README.md
@@ -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), run:
|
||||
in colour and size optimized Black&White, as well as website), run:
|
||||
|
||||
```console
|
||||
cd book/
|
||||
@@ -80,10 +80,17 @@ 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 50MB down to ~5MB:
|
||||
size. This shrinks the book from more than 20MB down to ~5MB:
|
||||
|
||||
* [Download compiled B&W .epub version](https://www.the-bread-code.io/bw-book.epub)
|
||||
|
||||
If you prefer a very short version (about 10 pages) with main flowcharts and
|
||||
crucial information needed while you are in the kitchen, we also provide a
|
||||
"too long;didn't read" version you could print. Having read the full book is
|
||||
highly recommended to understand this leaflet:
|
||||
|
||||
* [Download a condensed version](https://www.the-bread-code.io/booklet.pdf)
|
||||
|
||||
## Online HTML version
|
||||
|
||||
Head over to [https://www.the-sourdough-framework.com](https://www.the-sourdough-framework.com)
|
||||
|
||||
4
book/abbreviations.tex
Normal file
@@ -0,0 +1,4 @@
|
||||
% Common abbreviations
|
||||
\newcommand{\ie}{\emph{i.e.}\@ifnextchar.{\!\@gobble}{}}
|
||||
\newcommand{\eg}{\emph{e.g.}\@ifnextchar.{\!\@gobble}{}}
|
||||
\newcommand{\etc}{etc\@ifnextchar.{}{.\@}}
|
||||
|
Before Width: | Height: | Size: 369 KiB |
@@ -18,12 +18,11 @@ rise, this is called oven spring. Your bread starts to build a crust of
|
||||
gel-like consistency, the crust is still extensible and can be stretched.
|
||||
|
||||
\begin{table}[htp!]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{tables/table-baking-process-stages.tex}
|
||||
\caption[Stages of dough during baking]{The different stages that
|
||||
your dough undergoes during the baking process.}%
|
||||
\label{tab:baking-stages}
|
||||
\end{center}
|
||||
\end{table}
|
||||
|
||||
At around \qty{60}{\degreeCelsius} (\qty{140}{\degF}) the microbes in your dough start to die.
|
||||
@@ -63,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]
|
||||
\includegraphics[width=\textwidth]{baking-experiment-temperatures.png}
|
||||
\input{plots/fig-temperature-surface.tex}
|
||||
\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
|
||||
@@ -171,12 +170,11 @@ way.
|
||||
|
||||
\section{Building up steam}
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{figures/fig-baking-process.tex}
|
||||
\caption[Different steaming methods]{A schematic visualization of the baking
|
||||
process using different sources of steam in a home oven.}%
|
||||
\label{fig:baking-process}
|
||||
\end{center}
|
||||
\end{flowchart}
|
||||
|
||||
\begin{figure}[!htb]
|
||||
@@ -206,7 +204,7 @@ way.
|
||||
\end{figure}
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\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
|
||||
@@ -215,7 +213,6 @@ way.
|
||||
personal preference. Some bakers prefer a lighter crust and others a
|
||||
darker.}%
|
||||
\label{fig:dutch-oven-process}
|
||||
\end{center}
|
||||
\end{flowchart}
|
||||
|
||||
Dutch ovens are an ideal way to bake with a lot of
|
||||
@@ -277,12 +274,11 @@ created from the dough and water source stays
|
||||
around your dough.
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{figures/fig-inverted-tray-method.tex}
|
||||
\caption[Inverted tray baking process]{A schematic visualization the
|
||||
inverted tray baking method that works great for home ovens.}%
|
||||
\label{fig:inverted-tray-process}
|
||||
\end{center}
|
||||
\end{flowchart}
|
||||
|
||||
|
||||
@@ -335,11 +331,10 @@ crust color. In my case this is another 15--25~minutes typically.
|
||||
\section{Conclusions}
|
||||
|
||||
\begin{table}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\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}
|
||||
|
||||
Depending on your home oven, a different method
|
||||
|
||||
@@ -19,7 +19,7 @@ learn more about the yeast and bacterial microorganisms involved.
|
||||
|
||||
To understand the many enzymatic reactions that take place when flour
|
||||
and water are mixed, we must first understand seeds and their role in
|
||||
the lifecycle of wheat and other grains.
|
||||
the life cycle of wheat and other grains.
|
||||
|
||||
Seeds are the primary means by which many plants, including wheat,
|
||||
reproduce. Each seed contains the embryo of another plant, and must
|
||||
@@ -223,12 +223,11 @@ exception, skip ahead to the end of this section on
|
||||
page~\pageref{aggressive-yeast}.}
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\includegraphics[width=0.8\textwidth]{saccharomyces-cerevisiae-microscope}
|
||||
\caption[Brewer's yeast]{Saccharomyces cerevisiae: Brewer's yeast under the
|
||||
microscope.}%
|
||||
\label{saccharomyces-cerevisiae-microscope}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
|
||||
Yeasts are saprotrophic fungi. This means that they do not produce their own
|
||||
|
||||
113
book/book.tex
@@ -12,52 +12,97 @@
|
||||
\input{cover/cover.tex}
|
||||
\titlepage
|
||||
|
||||
\frontmatter
|
||||
{%
|
||||
\hypersetup{hidelinks}
|
||||
\ifdefined\HCode\else\tableofcontents\fi
|
||||
}
|
||||
|
||||
\input{intro/preface}
|
||||
\input{intro/acknowledgements}
|
||||
\input{intro/acknowledgments}
|
||||
|
||||
\mainmatter
|
||||
\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}
|
||||
|
||||
\input{history/sourdough-history}
|
||||
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{basics/how-sourdough-works}
|
||||
% 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{sourdough-starter/sourdough-starter}
|
||||
%% 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-types}
|
||||
\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{flour-types/flour-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{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
|
||||
\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}
|
||||
|
||||
\end{document}
|
||||
|
||||
174
book/booklet.tex
Normal file
@@ -0,0 +1,174 @@
|
||||
\documentclass[paper=a4, twoside=false, fontsize=12pt]{scrbook}
|
||||
|
||||
% General packages
|
||||
\usepackage{sourdough}
|
||||
\usepackage[
|
||||
paperwidth=210mm,
|
||||
paperheight=260mm,
|
||||
top=10mm,
|
||||
bottom=80mm,
|
||||
inner=10mm,
|
||||
outer=10mm,
|
||||
marginparsep=7mm,
|
||||
marginparwidth=48mm,
|
||||
]{geometry}
|
||||
\usepackage{subcaption}
|
||||
|
||||
\pagenumbering{gobble}
|
||||
% Basic attributes
|
||||
\author{Hendrik Kleinwächter}
|
||||
\title{The Sourdough Framework\\\texttt{tl;dr Booklet Version}}
|
||||
\begin{document}
|
||||
\maketitle
|
||||
|
||||
\section*{Sourdough starter}
|
||||
\begin{flowchart}[!htb]
|
||||
\centering
|
||||
\input{figures/fig-starter-process.tex}
|
||||
\caption*{How to setup a sourdough starter}
|
||||
\end{flowchart}
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\centering
|
||||
\input{figures/fig-starter-readiness.tex}
|
||||
\caption*{Preparing your starter for baking}
|
||||
\end{flowchart}
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\centering
|
||||
\input{figures/fig-starter-maintenance.tex}
|
||||
\caption*{Maintaining your starter, change ratio as per starter hydration
|
||||
type}
|
||||
\end{flowchart}
|
||||
|
||||
\clearpage{}
|
||||
\section*{Baker's math}
|
||||
\begin{table}[!htb]
|
||||
\centering
|
||||
\input{tables/table-bakers-math-example.tex}
|
||||
\caption*{An example table demonstrating how to properly calculate using
|
||||
baker's math. All the ingredients are calculated as a percentage of the
|
||||
flour quantity.}
|
||||
\end{table}
|
||||
|
||||
\section*{Basic recipes}
|
||||
\subsection*{Flat bread}
|
||||
\input{recipes/flat-bread.tex}
|
||||
\clearpage{}
|
||||
|
||||
\subsection*{Freestanding \& sandwich wheat-based breads}
|
||||
\begin{table}[!htb]
|
||||
\centering
|
||||
\begin{tabular}{@{}lrrrp{0.4\linewidth}@{}}
|
||||
\toprule
|
||||
\thead{Ingredient}& & \thead{Percentage} & \thead{Calculation} & \thead{Comments} \\ \midrule
|
||||
Flour & \qty{400}{g} & & & \\
|
||||
Whole-wheat flour & \qty{100}{g} & & & \\
|
||||
Total flour & & \qty{100}{\percent} & \qty{500}{g} & \\
|
||||
Water & & \qty{60}{\percent} & \qty{300}{g} & \\
|
||||
Sourdough starter & & \qty{10}{\percent} & \qty{50}{g} & \\
|
||||
Salt & & \qty{2}{\percent} & \qty{10}{g} & \\ \midrule
|
||||
Flour & & \qty{100}{\percent} & & \\
|
||||
Water & & & & \\
|
||||
Sourdough starter & & & & \\
|
||||
Salt & & & & \\ \midrule
|
||||
Flour & & & & \\
|
||||
& & & & \\
|
||||
& & & & \\
|
||||
& & & & \\
|
||||
& & & & \\ \bottomrule
|
||||
\end{tabular}
|
||||
\caption*{Table for your own calculation using baker's math}
|
||||
\end{table}
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\centering
|
||||
\input{figures/fig-wheat-sourdough-process.tex}
|
||||
\caption*{The whole process of making wheat based sourdough breads}
|
||||
\end{flowchart}
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\centering
|
||||
\input{figures/fig-kneading-process.tex}
|
||||
\caption*{The kneading process to create dough strength}
|
||||
\end{flowchart}
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\centering
|
||||
\input{figures/fig-bulk-fermentation.tex}
|
||||
\caption*{How to properly manage bulk fermentation}
|
||||
\end{flowchart}
|
||||
|
||||
\begin{figure*}[!htb]
|
||||
\centering
|
||||
\includegraphics[width=\textwidth]{stretch-and-fold-steps}
|
||||
\caption*{An overview of the steps involved to perform stretch and folds for
|
||||
wheat-based doughs. They are optional and should only be done when the dough
|
||||
flattened out a lot.}%
|
||||
\end{figure*}
|
||||
\clearpage{}
|
||||
|
||||
\section*{Shaping}
|
||||
|
||||
\begin{figure*}[!htb]
|
||||
\centering
|
||||
\begin{subfigure}{.475\linewidth}
|
||||
\includegraphics[width=\linewidth]{preshape-direction}
|
||||
\caption*{Preshaping: Drag the dough in the direction of the rough
|
||||
surface area.}%
|
||||
\end{subfigure}
|
||||
\begin{subfigure}{.475\linewidth}
|
||||
\includegraphics[width=\linewidth]{step-1-flour-applied}
|
||||
\caption*{Step 1: Apply flour to the dough's surface.}%
|
||||
\end{subfigure}\hfill % <-- "\hfill"
|
||||
\medskip % create some *vertical* separation between the graphs
|
||||
\begin{subfigure}{.475\linewidth}
|
||||
\includegraphics[width=\linewidth]{step-2-flipped-over}
|
||||
\caption*{Step 2: Flipp-over dough. Note how the sticky side is facing
|
||||
you while the floured side is facing the countertop.}
|
||||
\end{subfigure}\hfill % <-- "\hfill"
|
||||
\begin{subfigure}{.475\linewidth}
|
||||
\includegraphics[width=\linewidth]{step-3-rectangular}
|
||||
\caption*{Step 3: Make the dough rectangular, keep the sticky side
|
||||
facing you while the floured side is facing the countertop.}%
|
||||
\end{subfigure}
|
||||
\caption*{First steps of shaping process}
|
||||
\end{figure*}
|
||||
|
||||
\begin{figure*}[htb!]
|
||||
\centering
|
||||
\includegraphics[width=\textwidth]{step-4-folding}
|
||||
\caption*{Step 4: The process of folding a batard. Note how the rectangle
|
||||
is first glued together and then rolled inwards to create a dough roll.
|
||||
Ultimately the edges are sealed to create a more uniform dough.}%
|
||||
\end{figure*}
|
||||
\clearpage{}
|
||||
|
||||
\section*{Proofing}
|
||||
\begin{flowchart}[!htb]
|
||||
\centering
|
||||
\input{figures/fig-proofing-process.tex}
|
||||
\end{flowchart}
|
||||
\clearpage{}
|
||||
|
||||
\section*{Baking}
|
||||
\begin{flowchart}[!htb]
|
||||
\centering
|
||||
\input{figures/fig-baking-process.tex}
|
||||
\caption*{Summary of different bread baking processes}
|
||||
\end{flowchart}
|
||||
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\centering
|
||||
\input{figures/fig-inverted-tray-method.tex}
|
||||
\caption*{Baking with the inverted tray method}
|
||||
\end{flowchart}
|
||||
|
||||
\begin{flowchart*}[!htb]
|
||||
\centering
|
||||
\input{figures/fig-dutch-oven-process.tex}
|
||||
\caption*{Baking with a Dutch Oven}
|
||||
\end{flowchart*}
|
||||
\clearpage{}
|
||||
\end{document}
|
||||
@@ -19,12 +19,11 @@ accessible, least effort type of bread you can make. If you are a busy person
|
||||
and/or don’t have an oven, this might be exactly the type of bread you should
|
||||
consider.
|
||||
\begin{table}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{tables/table-overview-bread-types.tex}
|
||||
\caption[Different bread types]{An overview of different bread types
|
||||
and their respective complexity.}%
|
||||
\label{tab:bread-types-comparison}
|
||||
\end{center}
|
||||
\end{table}
|
||||
|
||||
\section{Flatbread}%
|
||||
@@ -57,7 +56,7 @@ pancake-like consistency, as you can see in
|
||||
Table~\ref{tab:flat-bread-ingredients}
|
||||
|
||||
\begin{table}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{tables/table-flat-bread-pancake-recipe.tex}
|
||||
\caption[Flatbread recipe]{Flatbread or pancake recipe for 1 person.
|
||||
Multiply the ingredients to increase portion size. Refer to the
|
||||
@@ -65,7 +64,6 @@ Table~\ref{tab:flat-bread-ingredients}
|
||||
``\nameref{section:bakers-math}'' to learn how to understand and
|
||||
use the percentages properly.}%
|
||||
\label{tab:flat-bread-ingredients}
|
||||
\end{center}
|
||||
\end{table}
|
||||
|
||||
For a full recipe including the process of making such a flatbread, refer to
|
||||
@@ -80,13 +78,12 @@ few steps, you can stop buying bread forever. This works with
|
||||
any flour, including gluten-free options.
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{figures/fig-process-flat-bread.tex}
|
||||
\caption[The process to make a sourdough flatbread]{The process of making a flatbread is very
|
||||
simple, requiring very little effort. This type of bread is especially
|
||||
handy for busy bakers.}%
|
||||
\label{fig:flat-bread-process}
|
||||
\end{center}
|
||||
\end{flowchart}
|
||||
|
||||
This is my go-to recipe that I~use to make bread whenever
|
||||
@@ -106,13 +103,12 @@ warmer it is, the sooner it will be ready, consider
|
||||
using warm water if it is very cold where you live.
|
||||
|
||||
\begin{figure}[htb!]
|
||||
\begin{center}
|
||||
\centering
|
||||
\includegraphics[width=1.0\textwidth]{flat-bread-wheat}
|
||||
\caption[Wheat flatbread]{A flatbread made with purely wheat flour. The
|
||||
dough is drier at around \qty{60}{\percent} hydration. The drier dough
|
||||
is a little harder to mix. As wheat contains more gluten, the dough
|
||||
puffs up during the baking process.}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
|
||||
This way you should have around \qty{11}{\gram} of sourdough ready in the evening. You will have
|
||||
@@ -135,12 +131,11 @@ when getting started. You can observe the dough more easily and see when
|
||||
it is ready.
|
||||
|
||||
\begin{figure}[htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\includegraphics[width=1.0\textwidth]{ethiopian-woman-checking-bread}
|
||||
\caption[Ethiopian \emph{injera}]{An Ethiopian woman baking an \emph{injera}
|
||||
made using teff flour. The image has been provided by Charliefleurene
|
||||
via Wikipedia.}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
|
||||
If you used the flatbread option with less water, look at the size increase
|
||||
@@ -170,12 +165,11 @@ going to taste relatively sour. I~do this frequently to better evaluate the
|
||||
state of my doughs.
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\includegraphics[width=1.0\textwidth]{injera-pancake-texture.jpg}
|
||||
\caption[Teff sourdough pancake]{A sourdough pancake made with teff flour.
|
||||
The pockets come from evaporated water and \ch{CO2} created by the
|
||||
microbes. The image has been provided by Łukasz Nowak via Wikipedia.}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
|
||||
If you are feeling lazy or don't have time, you could also use older sourdough starter
|
||||
@@ -208,13 +202,12 @@ pancake option, opt for around \qtyrange{0.1}{0.5}{\cm} depending on what you
|
||||
like.
|
||||
|
||||
\begin{figure}[htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\includegraphics[width=1.0\textwidth]{einkorn-crumb.jpg}
|
||||
\caption[Einkorn crum]{The crumb of a flatbread made with einkorn as flour.
|
||||
Einkorn is very low in gluten and thus does not trap as much \ch{CO2} as
|
||||
a wheat based dough. To make the dough fluffier use more water or
|
||||
consider adding more wheat to the mix of your dough.}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
|
||||
After 2--4~minutes flip over the pancake or flatbread. Bake it for the same
|
||||
@@ -249,57 +242,10 @@ culinary applications. Whether you're scooping up a savory dip,
|
||||
wrapping a flavorful filling, or simply enjoying a piece with a drizzle
|
||||
of olive oil, these flatbreads are sure to impress.
|
||||
|
||||
\subsubsection*{Ingredients}
|
||||
\input{recipes/flat-bread.tex}
|
||||
|
||||
\begin{tabular}{r@{}rl@{}}
|
||||
\qty{400}{\gram} &~(\qty{100}{\percent}) & Flour (wheat, rye, corn, whatever you have at hand)\\
|
||||
\qty{320}{\gram} & (\qty{80}{\percent}) & Water, preferably at room temperature\\
|
||||
\qty{80}{\gram} & (\qty{20}{\percent}) & Active sourdough starter\\
|
||||
\qty{8}{\gram} & (\qty{2}{\percent}) & Salt\\
|
||||
\end{tabular}
|
||||
|
||||
\subsubsection*{Instructions}
|
||||
\begin{description}
|
||||
\item[Prepare the dough] In a large mixing bowl, combine the flour and water.
|
||||
Mix until you have a shaggy dough with no dry spots.
|
||||
|
||||
Add the sourdough starter and salt to the mixture. Incorporate them thoroughly
|
||||
until you achieve a smooth and homogenized dough.
|
||||
|
||||
\item[Fermentation:] Cover the bowl with a lid or plastic wrap. Allow the dough
|
||||
to rest and ferment until it has increased by at least \qty{50}{\percent}
|
||||
in size. Depending on the temperature and activity of your starter, this
|
||||
can take anywhere from 4 to 24~hours.
|
||||
|
||||
\item[Cooking preparation:] Once the dough has risen, heat a pan over medium heat.
|
||||
Lightly oil the pan, ensuring to wipe away any excess oil with a paper towel.
|
||||
|
||||
\item[Shaping and cooking:] With a ladle or your hands, scoop out a portion of
|
||||
the dough and place it onto the hot pan, spreading it gently like a pancake.
|
||||
|
||||
Cover the pan with a lid. This traps the steam and ensures even cooking
|
||||
from the top, allowing for easier flipping later.
|
||||
|
||||
After about 5~minutes, or when the bottom of the flatbread has a
|
||||
golden-brown crust, carefully flip it using a spatula.
|
||||
|
||||
\emph{Adjusting cook time.} If the flatbread appears too dark,
|
||||
remember to reduce the cooking time slightly for the next one.
|
||||
Conversely, if it's too pale, allow it to cook a bit longer before flipping.
|
||||
|
||||
Cook the flipped side for an additional 5~minutes or until it's also golden
|
||||
brown.
|
||||
|
||||
\item[Storing:] Once cooked, remove the flatbread from the pan and place it on a
|
||||
kitchen towel. Wrapping the breads in the towel will help retain their
|
||||
softness and prevent them from becoming overly crisp.
|
||||
Repeat the cooking process for the remaining dough.
|
||||
|
||||
\item[Serving suggestion:] Enjoy your sourdough flatbreads warm,
|
||||
paired with your favorite dips, spreads, or as a side to any meal.
|
||||
|
||||
\end{description}
|
||||
\section{Loaf pan bread}
|
||||
\section{Loaf pan bread}%
|
||||
\label{sec:loaf-pan-bread}
|
||||
|
||||
Loaf pan bread is made using the help of a special loaf pan
|
||||
or loaf tin. The edges of the pan provide additional support
|
||||
@@ -377,12 +323,11 @@ baking vessels in your oven. To make a freestanding loaf more steps
|
||||
and tools are required.
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\includegraphics[width=1.0\textwidth]{free-standing-loaf.jpg}
|
||||
\caption[Freestanding sourdough bread]{A freestanding sourdough bread. Note
|
||||
the incision known as an \emph{ear} and the oven spring clearly
|
||||
distinguish this type of bread from flatbread and loaf pan bread.}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
|
||||
When using wheat, make sure to mix your dough enough to develop a gluten network.
|
||||
|
||||
@@ -10,6 +10,7 @@ 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
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -1,32 +1,8 @@
|
||||
\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 };
|
||||
\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);
|
||||
\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};
|
||||
\end{tikzpicture}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -29,11 +29,11 @@
|
||||
% Additional line for dinosaurs since it is so close
|
||||
\draw[line width=1pt] (11.9*\segmentwidth,1.49) -- (11.70*\segmentwidth,1.85);
|
||||
|
||||
% Special lines for december events since they are so close togehter
|
||||
% Special lines for december events since they are so close together
|
||||
\draw[line width=1pt] (12.0*\segmentwidth,3.0) -- (12.0*\segmentwidth,0.2); % Main branch
|
||||
\draw[line width=1pt] (12.0*\segmentwidth,3.0) -- (11.75*\segmentwidth,2.5); % Branch to first humans
|
||||
\draw[line width=1pt] (12.0*\segmentwidth,3.0) -- (11.75*\segmentwidth,3.0); % Branch to Jordan
|
||||
% Move pasteur down a bit so the lines look like they cross
|
||||
% Move Pasteur down a bit so the lines look like they cross
|
||||
\draw[line width=1pt] (12.0*\segmentwidth,2.99) -- (11.75*\segmentwidth,3.5); % Branch to Pasteur
|
||||
|
||||
% Draw months and month separators
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -1,19 +1,22 @@
|
||||
\begin{tikzpicture}[node distance = 3.5cm, auto]
|
||||
\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);
|
||||
\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.
|
||||
};
|
||||
\end{tikzpicture}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
\begin{tikzpicture}[node distance = 3cm, auto]
|
||||
\node [start] (init) {Make a starter};
|
||||
\node [start] (init) {Create a starter};
|
||||
\node [decision, right of=init, node distance=3.5cm] (decision_start) {Starter last fed within 3~days?};
|
||||
\node [block, right of=decision_start, text width=7em, node distance=4cm] (feed_no_branch)
|
||||
{Feed starter twice:\par \qty{48}{\hour} before\par \qtyrange{6}{12}{\hour} before};
|
||||
@@ -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) --
|
||||
|
||||
@@ -11,14 +11,15 @@
|
||||
\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);
|
||||
\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};
|
||||
\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);
|
||||
\end{tikzpicture}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
\tikzstyle{every picture}+=[font=\footnotesize\sffamily]
|
||||
\usetikzlibrary{calc, shapes, arrows, decorations.pathreplacing, calligraphy,
|
||||
\usetikzlibrary{calc, shapes, arrows.meta, 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,7 +19,8 @@
|
||||
\tikzstyle{fail} = [rectangle, draw=codeblack, fill=redpic, text=black,
|
||||
text width=5em, text centered, rounded corners, minimum height=4em,
|
||||
line width=0.4mm]
|
||||
\tikzstyle{line} = [draw, -latex', thick, ->,>=to]
|
||||
% The arrowed connector line between nodes
|
||||
\tikzstyle{line} = [draw, thick, ->, >={Latex}]
|
||||
|
||||
\tikzstyle{BC} = [decorate, % Brace Calligraphic
|
||||
decoration={calligraphic brace, amplitude=3mm, raise=1mm},
|
||||
@@ -30,3 +31,5 @@
|
||||
|
||||
\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}
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
\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}
|
||||
|
||||
@@ -17,12 +17,11 @@ Depending on which layers are still present, different names are used to describ
|
||||
type of flour.
|
||||
|
||||
\begin{table}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{tables/table-flour-types.tex}
|
||||
\caption[Labelling of wheat flour]{A comparison of how different types
|
||||
of wheat flour are labelled in different countries.}%
|
||||
\label{tab:flour-types-comparison}
|
||||
\end{center}
|
||||
\end{table}
|
||||
|
||||
In Germany, the ash content is used to describe the flours. The lab will burn
|
||||
@@ -60,11 +59,10 @@ want the final bread to be too sour. Conversely you do not have to worry about
|
||||
the gluten degradation, removing a huge headache from the equation.
|
||||
|
||||
\begin{table}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{tables/table-grains-bread-making-process.tex}
|
||||
\caption[Different types of grain]{An overview of different grain
|
||||
types and the steps involved in the respective bread making process.}
|
||||
\end{center}
|
||||
\end{table}
|
||||
|
||||
Because gluten has a special role, the rest of this chapter is dedicated to having a
|
||||
@@ -115,13 +113,12 @@ The long fermentation period also means that your microbes will enrich
|
||||
your dough with more flavor.
|
||||
|
||||
\begin{table}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{tables/table-overview-w-values.tex}
|
||||
\caption[Fermentation time versus W-value]{An overview of different
|
||||
levels of W-values and the respective hydrations and fermentation
|
||||
times.}%
|
||||
\label{tab:w-value}
|
||||
\end{center}
|
||||
\end{table}
|
||||
|
||||
Generally, when aiming to
|
||||
|
||||
@@ -157,7 +157,7 @@ and pastries.
|
||||
|
||||
\item[Coil fold] A special stretch and folding technique. The coil fold is
|
||||
very gentle on the dough and is thus excellent throughout the bulk fermentation.
|
||||
By applying the coil fold the dough strength is improved by minimising damage
|
||||
By applying the coil fold the dough strength is improved by minimizing damage
|
||||
to the dough structure.
|
||||
|
||||
\item[Crumb] The inner texture of the bread, which is characterized by the size,
|
||||
@@ -285,7 +285,7 @@ depending on the initial reactants and cooking conditions can produce a wide var
|
||||
of end products with different tastes and aromas. Maillard reactions occur readily
|
||||
above \SI{150}{\celsius}, although will still occur much more slowly below that
|
||||
temperature. Optimal reaction rate occurs between \pHvalue{6.0} to \pHvalue{8.0},
|
||||
although it favours alkaline conditions.
|
||||
although it favors alkaline conditions.
|
||||
|
||||
\item[Maltose] A sugar produced from the enzymatic breakdown of starch by amylases.
|
||||
It's a primary food source for yeast during fermentation.
|
||||
@@ -404,7 +404,7 @@ unpredictable ways. It also provides a controlled aesthetic to the finished loaf
|
||||
|
||||
\item[Soaker] A mixture of grains or seeds with water that is left to soak overnight (or for a
|
||||
specified amount of time) before being incorporated into bread dough. This helps to
|
||||
soften and hydrate the grains or seeds (sesame, pumpkin, etc.), making them
|
||||
soften and hydrate the grains or seeds (sesame, pumpkin, \etc{}), making them
|
||||
easier to integrate into the dough and
|
||||
providing a moister crumb in the finished bread.
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ waters, another single-celled life form, \emph{archaea}, also thrived. These
|
||||
organisms inhabit extreme environments, from boiling vents to icy waters.
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{figures/fig-life-planet-sourdough-timeline.tex}
|
||||
\caption[Sourdough microbiology timeline]{Timeline of significant events
|
||||
starting from the first day of Earth's existence,
|
||||
@@ -34,12 +34,11 @@ organisms inhabit extreme environments, from boiling vents to icy waters.
|
||||
marked at midnight. This visualization shows the pivotal steps
|
||||
of life and sourdough on earth.}%
|
||||
\label{fig:planet-timeline}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
|
||||
Whoever comes first, bacteria or archaea, remains debated. For three
|
||||
months (or approximately 1.1~billion years), these life forms dominated
|
||||
the oceans. Then, on June~25 in an highly unlikely event, an archaeon consumed a bacterium.
|
||||
the oceans. Then, on June~25 in a highly unlikely event, an archaeon consumed a bacterium.
|
||||
Instead of digesting it, they formed a symbiotic relationship. This led to the
|
||||
first nucleated organisms, marking an evolutionary milestone. This event lead
|
||||
to the development of plants, fungi and also ultimately humans.
|
||||
@@ -70,12 +69,11 @@ Ancient Jordan~\cite{jordan+bread}. Looking at the earth's timeline sourdough
|
||||
bread can be considered a very recent invention.
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{figures/fig-sourdough-history-timeline.tex}
|
||||
\caption[Sourdough history timeline]{Timeline of significant discoveries and
|
||||
events leading to modern sourdough bread.}%
|
||||
\label{fig:sourdough-timeline}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
|
||||
The exact origins of fermented
|
||||
|
||||
|
Before Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 73 KiB |
BIN
book/images/infographic-enzymes.jpg
Normal file
|
After Width: | Height: | Size: 564 KiB |
|
Before Width: | Height: | Size: 1.2 MiB |
@@ -1,5 +1,5 @@
|
||||
\chapter{Acknowledgements}%
|
||||
\label{ch:Acknowledgements}
|
||||
\chapter{Acknowledgments}%
|
||||
\label{ch:Acknowledgments}
|
||||
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
|
||||
@@ -81,7 +81,7 @@ sometimes you are faced with issues you don't understand. In \qty{99.95}{\percen
|
||||
of all software bugs, the developer is the issue. Sometimes, however, the framework has a
|
||||
bug. That is when the developer must dig deeper to see the \emph{what} and the
|
||||
\emph{why} behind what
|
||||
the framework is doing. You will need to read other engineer's source code, and you will be forced
|
||||
the framework is doing. You will need to read other engineers' source code, and you will be forced
|
||||
to understand \emph{why} things are happening.
|
||||
|
||||
Being unhappy with what I~was baking, my engineering mindset took over, and I~had
|
||||
|
||||
464
book/makefile
@@ -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
|
||||
WEBSITE := make4ht --lua -c website.cfg -a debug -uf html5+tidy+common_domfilters
|
||||
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
|
||||
CLEAN := latexmk -cd -lualatex -c -use-make
|
||||
CHECK_1 := lacheck
|
||||
CHECK_2 := chktex
|
||||
@@ -9,7 +9,10 @@ CONVERT_PIC := convert
|
||||
REDUCE_PIC := -resize '800x800>' \
|
||||
-strip -interlace Plane -gaussian-blur 0.05 -quality 85\% \
|
||||
-set colorspace Gray -separate -evaluate-sequence Mean
|
||||
RSYNC := rsync -au --exclude 'book.epub' --exclude '*.jpg' --exclude '*.png'
|
||||
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
|
||||
|
||||
# We want bash as shell
|
||||
SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
|
||||
@@ -21,21 +24,35 @@ LATEX += -diagnostics
|
||||
EBOOK += -a debug
|
||||
WEBSITE += -a debug
|
||||
endif
|
||||
# }}}
|
||||
|
||||
website_dir := static_website_html
|
||||
# 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
|
||||
|
||||
# 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
|
||||
|
||||
src_tables := $(wildcard tables/table-*.tex)
|
||||
src_figures := $(wildcard figures/fig-*.tex) figures/flowcharts_tikz.tex
|
||||
|
||||
# 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
|
||||
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))
|
||||
|
||||
# Photos {{{
|
||||
images := $(wildcard images/*/*.jpg)
|
||||
images += $(wildcard images/*.jpg)
|
||||
images += $(wildcard images/*.png)
|
||||
@@ -49,39 +66,47 @@ images += $(foreach directory, $(chapters), $(wildcard $(directory)/*/*.png))
|
||||
# images to lower resolution and greyscale
|
||||
bw_images := $(addprefix bw-book-epub/OEBPS/, $(images))
|
||||
|
||||
src_all := $(src_tex) $(src_figures) $(src_tables) $(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))
|
||||
# }}}
|
||||
|
||||
# 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
|
||||
website_assets := $(wildcard ../website/assets/*)
|
||||
ruby_src := ../website/modify_build.rb $(website_assets)
|
||||
ruby_pkg := ../website/Gemfile ../website/Gemfile.lock
|
||||
|
||||
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) $<
|
||||
# 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
|
||||
# }}}
|
||||
|
||||
# Flowcharts {{{
|
||||
# TODO: check if it works on github CI
|
||||
%.png: %.tex
|
||||
@echo "\input{./vars.tex}" > $@.in
|
||||
# \b is backspace..
|
||||
@echo "\\\begin{document}" >> $@.in
|
||||
@printf '%s\n' "\input{./vars.tex}" > $@.in
|
||||
@printf '%s\n' "\begin{document}" >> $@.in
|
||||
@cat $< >> $@.in
|
||||
@echo "\\\end{document}" >> $@.in
|
||||
@printf '%s\n' "\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) $<
|
||||
|
||||
book_serif/book.pdf: $(src_all)
|
||||
$(LATEX) -output-directory=book_serif book.tex
|
||||
@@ -89,15 +114,30 @@ 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
|
||||
|
||||
.PHONY: copy_ebook_files
|
||||
# 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
|
||||
# }}}
|
||||
|
||||
# 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) book-epub/ bw-book-epub/
|
||||
$(RSYNC) --exclude '*.png' epub_build/book-epub/ bw-book-epub/
|
||||
|
||||
# We not convert SVG to B&W or lower res for now as they are super small
|
||||
# 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
|
||||
|
||||
# We do not convert SVG to B&W or lower res for now as they are super small
|
||||
# anyway
|
||||
bw-book-epub/OEBPS/%.jpg: %.jpg
|
||||
mkdir -p $(dir $@)
|
||||
@@ -111,152 +151,21 @@ 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 with the rules
|
||||
# Expected usual rules first
|
||||
.PHONY: all
|
||||
all: bake
|
||||
# Now the low res
|
||||
copy_ebook_files_low_res: ebook
|
||||
$(RSYNC) epub_build/book-epub/ low-res-book-epub/
|
||||
|
||||
.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_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 "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"
|
||||
low-res-book-epub/OEBPS/%.jpg: %.jpg
|
||||
mkdir -p $(dir $@)
|
||||
$(CONVERT_PIC) $< $(REDUCE_PIC_COLOR) $@
|
||||
|
||||
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 ./
|
||||
#}}}
|
||||
|
||||
# Finally actual project targets (i.e. build pdf and ebooks)
|
||||
.PHONY: build_pdf build_serif_pdf build_sans_serif_pdf build_ebook
|
||||
|
||||
build_pdf: build_serif_pdf build_sans_serif_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
|
||||
-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
|
||||
-rm figures/*.png
|
||||
-rm *.html
|
||||
-rm *.svg
|
||||
-rm -rf epub/
|
||||
-rm -rf release/
|
||||
-rm -rf book_serif/
|
||||
-rm -rf book_sans_serif/
|
||||
-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:
|
||||
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
|
||||
|
||||
# Website stuff
|
||||
# Website {{{
|
||||
###################################
|
||||
.PHONY: html website
|
||||
$(website_dir)/book.html: $(website_src) cover/cover-page.xbb
|
||||
$(WEBSITE) -d $(website_dir) book.tex
|
||||
@@ -267,32 +176,229 @@ 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...
|
||||
$(LATEX) -e '$$max_repeat=1' -halt-on-error -output-directory=book_serif book.tex
|
||||
|
||||
quick_booklet:
|
||||
$(LATEX) -e '$$max_repeat=1' -halt-on-error -output-directory=booklet booklet.tex
|
||||
|
||||
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 -n 1
|
||||
show_tools_version: # Show version of tools used on the build machine {{{
|
||||
- $(GIT) log -1 --pretty=%B
|
||||
@echo ""
|
||||
- uname -a
|
||||
@echo ""
|
||||
- $(SHELL) --version
|
||||
@echo ""
|
||||
- @echo "PATH:"
|
||||
- @echo $(PATH) | tr ':' '\n'
|
||||
@echo ""
|
||||
- latexmk --version
|
||||
@echo ""
|
||||
- lualatex --version
|
||||
@@ -305,7 +411,7 @@ show_tools_version: # Show version of tools used on the build machine
|
||||
@echo ""
|
||||
- dvisvgm --version
|
||||
@echo ""
|
||||
- lacheck --version
|
||||
- lacheck | head -5 | tail -1
|
||||
@echo ""
|
||||
- chktex --version
|
||||
@echo ""
|
||||
@@ -318,6 +424,7 @@ 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
|
||||
@@ -327,3 +434,4 @@ printvars: # Print all variables in the makefile
|
||||
@$(foreach V,$(sort $(.VARIABLES)), \
|
||||
$(if $(filter-out environ% default automatic, \
|
||||
$(origin $V)),$(info $V=$($V) ($(value $V)))))
|
||||
# }}}
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
\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
|
||||
@@ -23,12 +24,13 @@ to express yourself.
|
||||
\section{Categories}
|
||||
|
||||
\begin{figure}[htb!]
|
||||
\centering
|
||||
\includegraphics[width=\textwidth]{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.}%
|
||||
\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}
|
||||
\end{figure}
|
||||
|
||||
One approach to categorizing the mixins is to look at their respective shape.
|
||||
@@ -64,10 +66,12 @@ 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
|
||||
@@ -97,6 +101,7 @@ 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.}%
|
||||
@@ -111,7 +116,7 @@ usually moderately affect the color.
|
||||
\item Semolina (supports Mediterranean flavors)
|
||||
\item Cocoa (replace \qty{10}{\percent} of the flour for a black loaf, goes
|
||||
great with sweet toppings)
|
||||
\item Other non-wheat flours such as: Chickpea, corn, hemp, potato etc.
|
||||
\item Other non-wheat flours such as: Chickpea, corn, hemp, potato\dots{}
|
||||
\end{itemize}
|
||||
|
||||
\subsection{Liquids}
|
||||
@@ -120,9 +125,11 @@ 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}
|
||||
@@ -134,15 +141,15 @@ affecting taste and texture.
|
||||
\item Eggs
|
||||
\item Fruit/vegetable juices (also see Section~\ref{section:colors})
|
||||
\item Milk (for sweet, soft breads)
|
||||
\item Milk alternatives such as: Almond, oat, soy etc.
|
||||
\item Milk alternatives such as: Almond, oat, soy\dots{}
|
||||
\item Mashed potatoes
|
||||
\item Mashed sweet potatoes. Bolo do caco is a typical bread from Madeira,
|
||||
made from \qty{50}{\percent} wheat flour and \qty{50}{\percent} mashed potatoes.
|
||||
\item Olive oil (Mediterranean)
|
||||
\item Other mashed vegetables such as: Beets, pumpkin, etc.
|
||||
\item Other mashed vegetables such as: Beets, pumpkin\dots{}
|
||||
\end{itemize}
|
||||
|
||||
\subsection{Colors}
|
||||
\subsection{Colors}%
|
||||
\label{section:colors}
|
||||
Some mix-ins will change the color and flavor of your bread. Common colorings
|
||||
include:
|
||||
@@ -166,12 +173,14 @@ 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}
|
||||
@@ -190,28 +199,31 @@ 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}
|
||||
These are mostly powders or small bits.
|
||||
|
||||
\begin{itemize}
|
||||
\item Blueberry skins (press through a sieve to remove juice, raw blueberries
|
||||
\item Blueberry skins (press through a sieve to remove juice), raw
|
||||
blueberries
|
||||
\item Browned onions
|
||||
\item Candied fruits such as: Lemon, orange, pineapple, etc.
|
||||
\item Candied fruits such as: Lemon, orange, pineapple\dots{}
|
||||
\item Cinnamon
|
||||
\item Grated hard cheese such as: Gruyère, parmesan, etc.
|
||||
\item Mediterranean herbs such as: Marjoram, oregano, rosemary, thyme, etc.
|
||||
\item Grated hard cheese such as: Gruyère, parmesan\dots{}
|
||||
\item Mediterranean herbs such as: Marjoram, oregano, rosemary, thyme\dots{}
|
||||
\item Miso
|
||||
\item Molasses
|
||||
\item Sugar
|
||||
\item Spices such as: Anise, fennel, cinnamon, coriander, cumin, etc.
|
||||
\item Zests such as: Lime, Lemon, orange, etc.
|
||||
\item Spices such as: Anise, fennel, cinnamon, coriander, cumin\dots{}
|
||||
\item Zests such as: Lime, Lemon, orange\dots{}
|
||||
\end{itemize}
|
||||
|
||||
\subsection{Highlights}
|
||||
@@ -222,12 +234,12 @@ can often be complemented by some flavor or flour mix-in.
|
||||
\begin{itemize}
|
||||
\item Chocolate chunks or drops
|
||||
\item Chunks of black garlic
|
||||
\item Chunks of cheese such as: Cheddar, feta, etc.
|
||||
\item Chunks of cheese such as: Cheddar, feta\dots{}
|
||||
\item Cornflakes
|
||||
\item Dried fruits such as: Cranberries, dates, raisins, etc.
|
||||
\item Dried fruits such as: Cranberries, dates, raisins\dots{}
|
||||
\item Olives
|
||||
\item Pickled pepperoni
|
||||
\item Sundried tomatoes (squeeze out the oil if using pickled ones, or soak
|
||||
\item Sun-dried tomatoes (squeeze out the oil if using pickled ones, or soak
|
||||
dried ones in water)
|
||||
\end{itemize}
|
||||
|
||||
@@ -240,47 +252,70 @@ A few combinations where multiple mix-ins complement each other:
|
||||
\item Cheddar and jalapeño
|
||||
\item Cocoa, cacao nibs, whole hazelnuts
|
||||
\item Cranberry and walnuts
|
||||
\item Semolina, Mediterranean herbs, olives, sundried tomatoes
|
||||
\item Semolina, Mediterranean herbs, olives, sun-dried tomatoes
|
||||
\item Tomato juice instead of water with \qty{20}{\percent} rye flour
|
||||
\end{itemize}
|
||||
|
||||
\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.
|
||||
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.
|
||||
|
||||
\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.}%
|
||||
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}
|
||||
\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 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
|
||||
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
|
||||
|
||||
\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
|
||||
@@ -289,6 +324,7 @@ is excellent for garlic/cheese rolls, garlic/herb rolls, and 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
|
||||
@@ -298,8 +334,9 @@ 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
|
||||
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).
|
||||
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).
|
||||
|
||||
\subsection{Swirled colors}
|
||||
Mix-ins that change the color of the dough bring the opportunity for even more
|
||||
@@ -310,6 +347,6 @@ ferment the dough in separate containers. Then Combine the two (or
|
||||
more) differently colored doughs by laminating and stacking the colored sheets
|
||||
of dough before the last folding, just before shaping. This way the colored
|
||||
layers won't mix and the resulting dough will have differently colored and
|
||||
tasting layers. \footnote{I once made an experimental dough by merging a wheat,
|
||||
tasting layers\footnote{I once made an experimental dough by merging a wheat,
|
||||
rye, spelt and einkorn dough into a single dough. The resulting dough was
|
||||
layered featuring different colors, textures, and flavors.}
|
||||
layered featuring different colors, textures, and flavors.}.
|
||||
|
||||
@@ -17,14 +17,13 @@ a denser crumb compared to wheat, as you can see in
|
||||
Picture~\ref{fig:rye-crumb}.
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{figures/fig-non-wheat-process.tex}
|
||||
\caption[Process for non-wheat sourdough bread]{A visualization of the
|
||||
process to make non-wheat sourdough bread. The process is much simpler
|
||||
than making wheat sourdough bread. There is no gluten development. The
|
||||
ingredients are simply mixed together.}%
|
||||
\label{flc:non-wheat-sourdough}
|
||||
\end{center}
|
||||
\end{flowchart}
|
||||
|
||||
For non-wheat flours---including rye, emmer, and einkorn---no gluten
|
||||
|
||||
75
book/pgfsys-dvisvgm4ht.def
Normal file
@@ -0,0 +1,75 @@
|
||||
% 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:
|
||||
30
book/plots/fig-temperature-ambient.tex
Normal file
@@ -0,0 +1,30 @@
|
||||
\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}
|
||||
30
book/plots/fig-temperature-surface.tex
Normal file
@@ -0,0 +1,30 @@
|
||||
\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}
|
||||
43
book/plots/fig-yeast-sourdough-strength.tex
Normal file
@@ -0,0 +1,43 @@
|
||||
\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}
|
||||
24
book/plots/icecube_ambient.table
Normal file
@@ -0,0 +1,24 @@
|
||||
#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
|
||||
24
book/plots/icecube_surface.table
Normal file
@@ -0,0 +1,24 @@
|
||||
#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
|
||||
28
book/plots/non-preheated_ambient.table
Normal file
@@ -0,0 +1,28 @@
|
||||
#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
|
||||
28
book/plots/non-preheated_surface.table
Normal file
@@ -0,0 +1,28 @@
|
||||
#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
|
||||
18
book/plots/preheated_ambient.table
Normal file
@@ -0,0 +1,18 @@
|
||||
#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
|
||||
|
||||
37
book/plots/preheated_bottom_ambient.table
Normal file
@@ -0,0 +1,37 @@
|
||||
#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
|
||||
36
book/plots/preheated_bottom_surface.table
Normal file
@@ -0,0 +1,36 @@
|
||||
#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
|
||||
17
book/plots/preheated_surface.table
Normal file
@@ -0,0 +1,17 @@
|
||||
#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
|
||||
100
book/plots/sourdough.table
Normal file
@@ -0,0 +1,100 @@
|
||||
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
|
||||
37
book/plots/spritzing_ambient.table
Normal file
@@ -0,0 +1,37 @@
|
||||
#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
|
||||
38
book/plots/spritzing_surface.table
Normal file
@@ -0,0 +1,38 @@
|
||||
#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
|
||||
|
||||
100
book/plots/yeast.table
Normal file
@@ -0,0 +1,100 @@
|
||||
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
|
||||
53
book/recipes/flat-bread.tex
Normal file
@@ -0,0 +1,53 @@
|
||||
\subsubsection*{Ingredients}
|
||||
\begin{tabular}{r@{}rl@{}}
|
||||
\qty{400}{\gram} &~(\qty{100}{\percent}) & Flour (wheat, rye, corn, whatever
|
||||
you have at hand)\\
|
||||
\qty{320}{\gram} & (\qty{80}{\percent}) & Water, preferably at room
|
||||
temperature\\
|
||||
\qty{80}{\gram} & (\qty{20}{\percent}) & Active sourdough starter\\
|
||||
\qty{8}{\gram} & (\qty{2}{\percent}) & Salt\\
|
||||
\end{tabular}
|
||||
|
||||
\subsubsection*{Instructions}
|
||||
\begin{description}
|
||||
\item[Prepare the dough] In a large mixing bowl, combine the flour and water.
|
||||
Mix until you have a shaggy dough with no dry spots.
|
||||
|
||||
Add the sourdough starter and salt to the mixture. Incorporate them
|
||||
thoroughly until you achieve a smooth and homogenized dough.
|
||||
|
||||
\item[Fermentation:] Cover the bowl with a lid or plastic wrap. Allow the dough
|
||||
to rest and ferment until it has increased by at least \qty{50}{\percent}
|
||||
in size. Depending on the temperature and activity of your starter, this
|
||||
can take anywhere from 4 to 24~hours.
|
||||
|
||||
\item[Cooking preparation:] Once the dough has risen, heat a pan over medium
|
||||
heat. Lightly oil the pan, ensuring to wipe away any excess oil with a
|
||||
paper towel.
|
||||
|
||||
\item[Shaping and cooking:] With a ladle or your hands, scoop out a portion of
|
||||
the dough and place it onto the hot pan, spreading it gently like a
|
||||
pancake.
|
||||
|
||||
Cover the pan with a lid. This traps the steam and ensures even cooking
|
||||
from the top, allowing for easier flipping later.
|
||||
|
||||
After about 5~minutes, or when the bottom of the flatbread has a
|
||||
golden-brown crust, carefully flip it using a spatula.
|
||||
|
||||
\emph{Adjusting cook time.} If the flatbread appears too dark, remember to
|
||||
reduce the cooking time slightly for the next one. Conversely, if it's
|
||||
too pale, allow it to cook a bit longer before flipping.
|
||||
|
||||
Cook the flipped side for an additional 5~minutes or until it's also
|
||||
golden brown.
|
||||
|
||||
\item[Storing:] Once cooked, remove the flatbread from the pan and place it on
|
||||
a kitchen towel. Wrapping the breads in the towel will help retain their
|
||||
softness and prevent them from becoming overly crisp. Repeat the cooking
|
||||
process for the remaining dough.
|
||||
|
||||
\item[Serving suggestion:] Enjoy your sourdough flatbreads warm, paired with
|
||||
your favorite dips, spreads, or as a side to any meal.
|
||||
|
||||
\end{description}
|
||||
BIN
book/sourdough-starter/sourdough-starter-activity-indicators.png
Normal file
|
After Width: | Height: | Size: 284 KiB |
@@ -27,14 +27,13 @@ starter has half as much water as flour, as summarized in
|
||||
Table~\ref{tab:starter-types-comparison}.
|
||||
|
||||
\begin{table}[htp!]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{tables/table-starter-types.tex}
|
||||
\caption[Different types of sourdough]{A comparison of different
|
||||
sourdough starter types and their respective properties. The only
|
||||
difference is the amount of water (hydration) that is used when
|
||||
feeding the starter.}%
|
||||
\label{tab:starter-types-comparison}
|
||||
\end{center}
|
||||
\end{table}
|
||||
|
||||
You can change your starter type by just adjusting the feeding ratio of how
|
||||
@@ -123,19 +122,18 @@ starter's flavor by changing the type to a liquid starter.
|
||||
\label{section:liquid-starter}
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\includegraphics[width=0.5\textwidth]{sourdough-starter-liquid.jpg}
|
||||
\caption[Liquid starter]{A liquid sourdough starter features a high level of
|
||||
water. The high water amount boosts lactic acid producing bacteria.
|
||||
After a while the liquid and flour start to separate. Bubbles on the
|
||||
side of the flour indicate that the starter is ready to be used.}%
|
||||
\label{fig:liquid-sourdough-starter}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{figures/fig-liquid-starter-conversion.tex}
|
||||
\caption[Converting to a liquid starter]{The process to convert your regular
|
||||
or stiff starter into a liquid starter. The whole process takes around
|
||||
@@ -149,7 +147,6 @@ starter's flavor by changing the type to a liquid starter.
|
||||
starter your created stiff starter will feature both dairy
|
||||
and vinegary notes.}%
|
||||
\label{flc:liquid-starter-conversion}
|
||||
\end{center}
|
||||
\end{flowchart}
|
||||
|
||||
The liquid starter is made at a hydration of around \qty{500}{\percent}. This means
|
||||
@@ -242,7 +239,7 @@ for a visual example of the starter's required hydration level.
|
||||
\end{figure}
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{figures/fig-stiff-starter-conversion.tex}
|
||||
\caption[Converting to a stiff starter]{The process to convert your regular
|
||||
starter into a stiff starter. The whole process takes around 3 days. The
|
||||
@@ -252,7 +249,6 @@ for a visual example of the starter's required hydration level.
|
||||
\qty{50}{\percent} hydration level for the starter. If the dough is too
|
||||
stiff consider increasing this to \qty{60}{\percent}.}%
|
||||
\label{fig:stiff-starter-conversion}
|
||||
\end{center}
|
||||
\end{flowchart}
|
||||
|
||||
In the stiffer environment the yeast thrives more. This means you will have
|
||||
@@ -302,13 +298,16 @@ pockets of air on the sides of your container. Use your nose to smell the
|
||||
starter. It should have a mild smell. It also tends to smell much more
|
||||
alcoholic than the other starters.
|
||||
|
||||
When using a stiff starter, use around \qtyrange{1}{20}{\percent} starter for your
|
||||
When using a stiff starter, use around \qtyrange{1}{20}{\percent} starter in terms of
|
||||
baker's math for your
|
||||
dough. This depends on the ripeness of your starter.
|
||||
In summer I~typically use around
|
||||
\qty{10}{\percent} and in winter around \qty{20}{\percent}. This way you can
|
||||
also control the fermentation speed.
|
||||
Mixing the starter can be a little bit annoying as it hardly homogenizes with
|
||||
the rest of the dough. In this case you can try to dissolve the starter in the
|
||||
\qtyrange{1}{10}{\percent} and in winter around \qty{20}{\percent}. This way you can
|
||||
also control the fermentation speed. If it is very hot where you live, consider
|
||||
lowering the starter amount to \qtyrange{1}{5}{\percent}. If it is very cold in your
|
||||
area consider increasing the starter amount up to \qty{30}{\percent}.
|
||||
Mixing the stiff starter can be a little bit annoying as it hardly homogenizes with
|
||||
the rest of the dough. In this case, you can try to dissolve the starter in the
|
||||
water you are about to use for your dough. This will make mixing a lot easier.
|
||||
|
||||
|
||||
|
||||
@@ -38,11 +38,10 @@ comes in handy. Let's look at the default recipe with baker's
|
||||
math and then adjust it for the \qty{1.4}{\kg} flour quantity.
|
||||
|
||||
\begin{table}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{tables/table-bakers-math-example.tex}
|
||||
\caption[Baker's math example]{An example table demonstrating how to
|
||||
properly calculate using baker's math}
|
||||
\end{center}
|
||||
\end{table}
|
||||
|
||||
Note how each of the ingredients is calculated as a percentage
|
||||
@@ -55,12 +54,11 @@ more flour available the next day. As mentioned the next day
|
||||
we have \qty{1.4}{\kg} at hand (\qty{1400}{\gram}).
|
||||
|
||||
\begin{table}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{tables/table-recipe-bakers-math.tex}
|
||||
\caption[Another baker's math example]{An example recipe that uses
|
||||
\qty{1400}{\gram} as its baseline and is then calculated using
|
||||
baker's math.}
|
||||
\end{center}
|
||||
\end{table}
|
||||
|
||||
For each ingredient we calculate the percentage
|
||||
@@ -86,7 +84,8 @@ are completely lost when trying to scale it up.
|
||||
\section{The process of making a starter}
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\includegraphics[width=\textwidth]{sourdough-starter.jpg}
|
||||
\centering
|
||||
\includegraphics[width=\textwidth]{sourdough-starter-activity-indicators}
|
||||
\caption[Very active sourdough]{A very active sourdough starter shown by the
|
||||
bubbles in the dough.}%
|
||||
\label{fig:sourdough-starter}
|
||||
@@ -133,12 +132,11 @@ I~like to use a glass and place another
|
||||
inverted one on top.
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{figures/fig-starter-process.tex}
|
||||
\caption[The full sourdough starter process]{The process of making a sourdough
|
||||
starter from scratch.}%
|
||||
\label{fig:sourdough-starter-process}
|
||||
\end{center}
|
||||
\end{flowchart}
|
||||
|
||||
Now an epic battle begins. In one study~\cite{yeasts+biocontrol+agent}
|
||||
@@ -237,11 +235,22 @@ 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. Once your sourdough starter is mature you never need to
|
||||
discard it. It's long-fermented flour that is an excellent addon
|
||||
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
|
||||
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.
|
||||
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.}
|
||||
|
||||
You should hopefully again see some bubbles, the starter increasing
|
||||
in size and/or the starter changing its smell. Some people give
|
||||
@@ -272,14 +281,16 @@ yeast has been isolated like this from century old sourdough
|
||||
starters.
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\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. For checking
|
||||
readiness look at a size increase and take note of your starter's smell.
|
||||
Both are important indicators to check for readiness.}%
|
||||
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}%
|
||||
\label{fig:sourdough-starter-readiness}
|
||||
\end{center}
|
||||
\end{flowchart}
|
||||
|
||||
The key sign to look at is bubbles that you see in your starter
|
||||
@@ -346,7 +357,7 @@ yeast part of your sourdough and balance the fermentation.
|
||||
\section{Maintenance}
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{figures/fig-starter-maintenance.tex}
|
||||
\caption[Sourdough starter maintenance flowchart]{A full flowchart showing
|
||||
you how to conduct proper sourdough starter maintenance. You can use a
|
||||
@@ -356,7 +367,6 @@ yeast part of your sourdough and balance the fermentation.
|
||||
\qty{100}{\percent} hydration level. Adjust the water content
|
||||
accordingly when you use a stiff starter.}%
|
||||
\label{fig:sourdough-maintenance-process}
|
||||
\end{center}
|
||||
\end{flowchart}
|
||||
|
||||
You have made your sourdough starter and your first bread. How do you perform
|
||||
@@ -432,7 +442,7 @@ of water. This extra layer of water provides good protection from the top
|
||||
part drying out. As mold is aerobic it can not grow efficiently under
|
||||
water~\cite{mold+anaerobic}. Before using the starter again simply either stir
|
||||
the liquid into the dough or drain it. If you drain the liquid you can use it
|
||||
to make a lacto fermented hot sauce for instance.
|
||||
to make a lacto-fermented hot sauce for instance.
|
||||
|
||||
The colder it is the longer you preserve a good balance of yeast and
|
||||
bacteria. Generally, the warmer it is the faster the fermentation process is,
|
||||
|
||||
@@ -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,15 +24,17 @@
|
||||
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
|
||||
\newcommand{\ie}{\emph{i.e.}\@ifnextchar.{\!\@gobble}{}}
|
||||
\newcommand{\eg}{\emph{e.g.}\@ifnextchar.{\!\@gobble}{}}
|
||||
\input{abbreviations.tex}
|
||||
|
||||
% Consistent pH values
|
||||
\newcommand{\pHvalue}[1]{pH~\SI{#1}{}}
|
||||
@@ -50,8 +52,9 @@
|
||||
\DeclareRobustCommand\sbseries{\fontseries{sb}\selectfont}
|
||||
% Fonts for accessibility
|
||||
\ifdefined\isaccessible
|
||||
\setmainfont{Open Sans}[
|
||||
Scale=MatchLowercase]
|
||||
\usepackage[mathrm=sym]{unicode-math}
|
||||
\setmathfont{Fira Math}[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
|
||||
@@ -71,10 +74,11 @@
|
||||
\addbibresource{references.bib}
|
||||
|
||||
% Clickable links in the table of contents
|
||||
\usepackage[ocgcolorlinks]{hyperref}
|
||||
\usepackage{hyperref}
|
||||
\usepackage{bookmark}
|
||||
\hypersetup{%
|
||||
linktoc=all,
|
||||
colorlinks = true,
|
||||
linkcolor = hlorange,
|
||||
urlcolor = codeblue,
|
||||
citecolor = hlocre,
|
||||
|
||||
572
book/spelling_exceptions.txt
Normal file
@@ -0,0 +1,572 @@
|
||||
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
|
||||
@@ -7,14 +7,13 @@ later time.
|
||||
\end{quoting}
|
||||
|
||||
A summary can be found in Table~\ref{table:bread-storage}, with details and
|
||||
explanation in th rest of this chapter.
|
||||
explanation in the rest of this chapter.
|
||||
\begin{table}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{tables/table-storing-bread-overview.tex}
|
||||
\caption[Options to store bread]{A table visualizing the advantages
|
||||
and disadvantages of different bread storing options.}%
|
||||
\label{table:bread-storage}
|
||||
\end{center}
|
||||
\end{table}
|
||||
|
||||
\section{Room temperature}
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
@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;
|
||||
@@ -15,6 +13,8 @@
|
||||
--padding-hamburger: 5px;
|
||||
--c-beige: #F3EDE6;
|
||||
--border-radius: 7px;
|
||||
--image-padding: 14px;
|
||||
--image-background: #ffffff;
|
||||
}
|
||||
|
||||
@media (min-width: 1200px){
|
||||
@@ -145,7 +145,6 @@ nav.TOC a, nav.TOC a:visited{
|
||||
/* *** Colors *** */
|
||||
/* ************** */
|
||||
|
||||
|
||||
body{
|
||||
background-color: var(--c-beige);
|
||||
}
|
||||
@@ -252,6 +251,10 @@ 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;
|
||||
@@ -315,7 +318,7 @@ figcaption.caption {
|
||||
display: block;
|
||||
color: #000;
|
||||
font-size: 20px;
|
||||
font-weight: bold;
|
||||
font-weight: var(--fw-bold);
|
||||
}
|
||||
|
||||
.chapterToc a, .sectionToc a, .subsectionToc a, .likechapterToc a {
|
||||
@@ -385,11 +388,6 @@ 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);
|
||||
}
|
||||
@@ -478,8 +476,8 @@ nav.TOC span:hover, nav.TOC span:hover *, nav.TOC span.chapterToc.selected, nav.
|
||||
}
|
||||
|
||||
p.flowchart-image-wrapper {
|
||||
background: white;
|
||||
padding: 20px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.menu-items .menu-group:last-of-type .menu-arrow {
|
||||
@@ -501,7 +499,7 @@ blockquote {
|
||||
border: 2px solid var(--c-black);
|
||||
color: var(--c-black);
|
||||
padding: 4px;
|
||||
font-weight: bold;
|
||||
font-weight: var(--fw-bold);
|
||||
text-decoration: none;
|
||||
}
|
||||
.crosslinks-bottom a.prev {
|
||||
@@ -524,6 +522,19 @@ 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;
|
||||
@@ -568,10 +579,6 @@ blockquote {
|
||||
background: var(--c-black-background);
|
||||
}
|
||||
|
||||
p.flowchart-image-wrapper {
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.menu-entry:hover {
|
||||
background-color: transparent;
|
||||
}
|
||||
@@ -585,4 +592,12 @@ blockquote {
|
||||
background-color: var(--c-black-background);
|
||||
padding: 5px;
|
||||
}
|
||||
.mobile-banner a img {
|
||||
border: none;
|
||||
border-radius: 0px;
|
||||
}
|
||||
|
||||
figure.float, div.figure, figure.figure {
|
||||
padding: calc(var(--image-padding) / 2);
|
||||
}
|
||||
}
|
||||
@@ -14,7 +14,6 @@ Anna G.,
|
||||
Anonnn,
|
||||
Anthony Atkinson,
|
||||
Aurore,
|
||||
BTSkete,
|
||||
Beatriz,
|
||||
Bee,
|
||||
Ben Davies,
|
||||
@@ -23,6 +22,7 @@ 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,6 +68,7 @@ Jessicat,
|
||||
Jimjo,
|
||||
John E Bergman,
|
||||
Jonathan,
|
||||
JorisBelmans,
|
||||
Jose Lausuch,
|
||||
Judith Roth,
|
||||
Julian,
|
||||
@@ -140,7 +141,7 @@ Sven,
|
||||
Tbonewilly,
|
||||
Thales Mello,
|
||||
Therealbruce,
|
||||
Tracy \& Paul Will,
|
||||
Tracy and Paul Will,
|
||||
Usliv,
|
||||
Vassil Dichev,
|
||||
Vladimir Smirnov,
|
||||
|
||||
|
@@ -7,7 +7,7 @@
|
||||
100 / 212 & Water evaporation & Water begins to evaporate and inflates your dough's alveoli.\\
|
||||
118 / 244 & Acetic acid evaporation & The vinegary tasting acid starts to evaporate, sourness decreases.\\
|
||||
122 / 252 & Lactic acid evaporation & The dairy tasting lactic acid begins to evaporate, sourness further decreases.\\
|
||||
140 / 284 & Maillard reaction & The maillard reaction starts to deform starches and proteins.
|
||||
140 / 284 & Maillard reaction & The Maillard reaction starts to deform starches and proteins.
|
||||
The dough starts browning.\\
|
||||
170 / 338 & Caramelization & Remaining sugars begin to caramelise giving your bread a distinct flavor.\\ \bottomrule
|
||||
\end{tabular}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
%TODO: Alignement is not great
|
||||
%TODO: Alignment is not great
|
||||
\begin{tabular}{@{}lll@{}}
|
||||
\toprule
|
||||
& \textbf{Flat breads} & \textbf{Pancakes} \\ \midrule
|
||||
|
||||
@@ -11,4 +11,26 @@
|
||||
\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
|
||||
|
||||
@@ -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]
|
||||
\includegraphics[width=\textwidth]{apple-experiment-surface-temperatures}
|
||||
\input{plots/fig-temperature-surface.tex}
|
||||
\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]
|
||||
\includegraphics[width=\textwidth]{apple-experiment-ambient-temperatures}
|
||||
\input{plots/fig-temperature-ambient.tex}
|
||||
\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.}%
|
||||
|
||||
@@ -141,7 +141,7 @@ should dissipate within 12--24~hours, and you have
|
||||
the added advantage of automatically having
|
||||
room-temperature water.
|
||||
|
||||
Make sure to use whole grain flour (whole-wheat, whole-rye, etc.).
|
||||
Make sure to use whole grain flour (whole-wheat, whole-rye, \etc{}).
|
||||
These flours have more natural wild yeast and
|
||||
bacterial contamination. Making a starter
|
||||
from just white flour sometimes doesn't work.
|
||||
@@ -188,12 +188,11 @@ protecting your sourdough starter from aerobic mold entering through
|
||||
the top.
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\includegraphics[width=0.5\textwidth]{sourdough-starter-hooch}
|
||||
\caption[Hooch] {Hooch building on top of a sourdough
|
||||
starter~\cite{liquid+on+starter}.}%
|
||||
\label{fig:hooch}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
|
||||
Simply stir your sourdough starter to homogenize the hooch back
|
||||
@@ -321,12 +320,11 @@ When tasting acetic acid, the flavor of your bread is often perceived
|
||||
as quite strong.
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\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}
|
||||
|
||||
This is nothing bad. But if you would like to change
|
||||
@@ -765,20 +763,3 @@ 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.
|
||||
|
||||
|
||||
@@ -9,6 +9,14 @@
|
||||
}}
|
||||
|
||||
\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
|
||||
@@ -39,5 +47,17 @@
|
||||
}
|
||||
\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
|
||||
|
||||
BIN
book/wheat-sourdough/aliquot-before-after.jpg
Normal file
|
After Width: | Height: | Size: 164 KiB |
|
Before Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 115 KiB After Width: | Height: | Size: 626 KiB |
|
Before Width: | Height: | Size: 32 KiB |
@@ -45,11 +45,10 @@ that tastes much better than any store-bought bread.
|
||||
\section{The process}
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{figures/fig-wheat-sourdough-process.tex}
|
||||
\caption{The typical process of making a wheat-based sourdough bread.}%
|
||||
\label{fig:wheat-sourdough-process}
|
||||
\end{center}
|
||||
\end{flowchart}
|
||||
|
||||
The whole process of making great sourdough bread starts with
|
||||
@@ -99,7 +98,7 @@ doesn't have a good balance of yeast to bacteria, so will your
|
||||
main dough.
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{figures/fig-starter-readiness.tex}
|
||||
\caption[Process to prepare your starter before baking]{The process to check
|
||||
your sourdough starter when making wheat-based doughs. In practice
|
||||
@@ -110,7 +109,6 @@ main dough.
|
||||
shown water quantities, i.e., if the chart shows \qty{100}{\gram} of
|
||||
water, use \qtyrange{50}{60}{\gram} of water for your stiff starter.}%
|
||||
\label{fig:process-starter-wheat-sourdough}
|
||||
\end{center}
|
||||
\end{flowchart}
|
||||
|
||||
Generally, think of the dough you are mixing as a big starter with salt.
|
||||
@@ -137,7 +135,7 @@ the microorganisms.
|
||||
Some people use a 1:1:1 ratio to refresh the starter. This would
|
||||
be one part of the old starter (\qty{10}{\gram} for instance), 1 part of flour,
|
||||
and one part of water. I~think this is utter rubbish. As mentioned
|
||||
your starter is a gigantic dough. You would never opt for a 1:1:1 ratio to
|
||||
your starter is a miniature dough. You would never opt for a 1:1:1 ratio to
|
||||
make dough. You might use a maximum of \qty{20}{\percent} starter to
|
||||
make dough. That's why I~advocate using a 1:5:5 ratio or a
|
||||
1:10:10 ratio depending on how ripe your starter is. As I~almost
|
||||
@@ -407,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 a self-limiting: it stops when there is no
|
||||
quantity. The process is 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
|
||||
@@ -450,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 chapter).
|
||||
allows me to skip the so-called autolysis step completely (more in the next section).
|
||||
This greatly simplifies the whole process.
|
||||
|
||||
\section{Autolysis}%
|
||||
@@ -467,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 chapter of this book.
|
||||
next section 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
|
||||
@@ -520,12 +518,11 @@ value to \qtyrange{5}{10}{\percent}. The other option could be to place the doug
|
||||
environment and thus reduce the speed at which your microorganisms replicate.
|
||||
|
||||
\begin{table}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{tables/table-starter-usage-activity.tex}
|
||||
\caption[Quantity of sourdough]{A table visualizing how much sourdough
|
||||
starter to use depending on temperature and the starter's activity
|
||||
level.}
|
||||
\end{center}
|
||||
\end{table}
|
||||
|
||||
Based on my experience and my sourdough, my ideal bread always takes around 8
|
||||
@@ -561,11 +558,10 @@ all the gases during the fermentation process. Without the gluten network,
|
||||
the gases would just diffuse out of your dough.
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{figures/fig-kneading-process.tex}
|
||||
\caption{The gluten development process for a wheat-based dough.}%
|
||||
\label{fig:wheat-sourdough-kneading-process}
|
||||
\end{center}
|
||||
\end{flowchart}
|
||||
|
||||
It might sound odd, but the most important part of kneading is waiting. By
|
||||
@@ -583,7 +579,8 @@ 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]
|
||||
\includegraphics[width=\textwidth]{dough-strength-sourdough-yeast}
|
||||
\centering
|
||||
\input{plots/fig-yeast-sourdough-strength.tex}
|
||||
\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
|
||||
@@ -591,8 +588,6 @@ 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
|
||||
@@ -620,7 +615,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
|
||||
figure~\ref{fig:wheat-sourdough-kneading-process}. Initially opt for a low
|
||||
flowchart~\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
|
||||
@@ -751,12 +746,11 @@ flavor of the resulting bread is better compared to a pale
|
||||
underfermented dough.
|
||||
|
||||
\begin{table}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{tables/table-fermentation-effects.tex}
|
||||
\caption[Stages of sourdough fermentation]{The different stages of
|
||||
sourdough fermentation and the effects on crumb, alveoli, texture,
|
||||
and overall taste.}
|
||||
\end{center}
|
||||
\end{table}
|
||||
|
||||
The worst thing you can do when fermenting sourdough
|
||||
@@ -777,7 +771,7 @@ is much larger. The doughs are perfect to be made in a
|
||||
machine.
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{figures/fig-bulk-fermentation.tex}
|
||||
\caption[Process to check the bulk fermentation]{During the bulk
|
||||
fermentation, multiple doughs are fermented together in bulk. A
|
||||
@@ -785,7 +779,6 @@ machine.
|
||||
stage of fermentation is completed. This chart shows multiple available
|
||||
options to check on the bulk fermentation progress.}%
|
||||
\label{fig:bulk-fermentation}
|
||||
\end{center}
|
||||
\end{flowchart}
|
||||
|
||||
Experienced bakers will tell you to go by the look and feel of
|
||||
@@ -798,8 +791,7 @@ My go-to method for beginners is to use an \emph{Aliquot jar}.
|
||||
The aliquot is a sample that you extract from your dough. The
|
||||
sample is extracted after creating the initial dough strength.
|
||||
You monitor the aliquot's size increase to judge the
|
||||
level of fermentation of your main dough. The aliquot
|
||||
sample is extracted after creating dough strength. As your
|
||||
level of fermentation of your main dough. As your
|
||||
dough ferments, so does the content of your aliquot jar. The moment your
|
||||
sample reached a certain size, your main dough is ready
|
||||
to be shaped and proofed. The size increase you should
|
||||
@@ -814,12 +806,11 @@ up to \qty{100}{\percent} with subsequent bakes. Then identify a value
|
||||
that you are happy with.
|
||||
|
||||
\begin{table}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{tables/table-dough-size-increase.tex}
|
||||
\caption[Increase of size versus protein content]{Reference values for
|
||||
how much size increase to aim for with an aliquot jar depending on
|
||||
the dough's protein content.}
|
||||
\end{center}
|
||||
\end{table}
|
||||
|
||||
The beauty of the aliquot is that no matter the surrounding
|
||||
@@ -896,12 +887,11 @@ bread didn't turn out the way you like, either shorten
|
||||
the fermentation or extend it a little bit.
|
||||
|
||||
\begin{table}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{tables/table-ph-values-dough.tex}%
|
||||
\caption[Dough's pH during bread preparation]{Example pH values for
|
||||
the different breakpoints of my own sourdough process.}%
|
||||
\label{table:sample-ph-values}
|
||||
\end{center}
|
||||
\end{table}
|
||||
|
||||
The beauty of this method is its reliability. Once you have found
|
||||
@@ -921,7 +911,12 @@ as rough ballpark figures. Regardless, you need to find values
|
||||
that work for your setup.
|
||||
|
||||
Another limitation is the price. You will need to purchase
|
||||
a high-tech pH meter, ideally, a meter featuring a spearhead.
|
||||
a high-tech pH meter, ideally, a meter featuring a spearhead
|
||||
\footnote{Not every pH meter is suitable for measuring dough.
|
||||
Please refer to the manual to make sure it is certified for
|
||||
measuring the pH of liquid and semi-solid media. To receive
|
||||
accurate pH readings further ensure that your pH meter
|
||||
is properly calibrated.}.
|
||||
This way you can directly poke the meter deep into the dough.
|
||||
At the same time, automated temperature adjustments are a
|
||||
feature to look out for. Depending on the temperature,
|
||||
@@ -1120,12 +1115,11 @@ The step is required if you are making multiple loaves in one
|
||||
batch. It is optional if you are making a single loaf.
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{figures/fig-dividing-preshaping.tex}
|
||||
\caption[Is dividing your dough required check]{Dividing is only required when you are
|
||||
making multiple loaves in a single dough batch.}%
|
||||
\label{fig:dividing-decision-tree}
|
||||
\end{center}
|
||||
\end{flowchart}
|
||||
|
||||
The goal of dividing your dough into smaller pieces is to portion
|
||||
@@ -1235,12 +1229,11 @@ your environment.
|
||||
\section{Shaping}
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{figures/fig-shaping-process.tex}
|
||||
\caption[Sourdough shaping process]{A schematic visualization of the shaping process
|
||||
including checks for an overfermented dough.}%
|
||||
\label{fig:shaping-decision-tree}
|
||||
\end{center}
|
||||
\end{flowchart}
|
||||
|
||||
Shaping will give your dough the final shape before baking. After
|
||||
@@ -1460,13 +1453,12 @@ their biochemical processes. More research is needed on the topic
|
||||
of retarding and flavor development.
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\centering
|
||||
\input{figures/fig-proofing-process.tex}
|
||||
\caption[Sourdough proofing process]{A schematic overview of the different steps of
|
||||
the sourdough proofing process. The proofing technique to choose depends
|
||||
on your availability and schedule.}%
|
||||
\label{fig:proofing-process}
|
||||
\end{center}
|
||||
\end{flowchart}
|
||||
|
||||
To me, the sole purpose of cold-proofing is its ability to allow you
|
||||
@@ -1571,7 +1563,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
|
||||
the value that creates the best bread for you. Once you have identified
|
||||
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.
|
||||
@@ -1618,7 +1610,7 @@ banneton should now be facing you.
|
||||
\label{fig:artistic-scoring}
|
||||
\end{figure}
|
||||
|
||||
The scoring cut for done at a \ang{45}~angle relative to the dough's
|
||||
The scoring cut is 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.
|
||||
@@ -1676,7 +1668,7 @@ An additional trick that can help you to combine the benefits
|
||||
of room temperature-proofing and easy cold-proofing scoring
|
||||
is to place your dough in the freezer for 30~minutes before baking.
|
||||
Once you notice your dough is almost done proofing, move it to the
|
||||
freezer. The freezer will dry out the doughs's surface even further
|
||||
freezer. The freezer will dry out the dough's surface even further
|
||||
while also lowering its viscosity, making scoring easier.
|
||||
|
||||
Another interesting trick is to bake your dough for 30 seconds without steam.
|
||||
|
||||
21
makefile
@@ -5,6 +5,7 @@ DOCKER_CMD := docker run --rm -it -v $(PWD):/opt/repo --platform linux/x86_64 $(
|
||||
|
||||
.PHONY: bake build_pdf build_docker_image push_docker_image validate website
|
||||
.PHONY: print_os_version start_shell printvars show_tools_version mrproper
|
||||
.PHONY: build_serif_pdf build_ebook booklet
|
||||
|
||||
# Dockers targets
|
||||
build_docker_image:
|
||||
@@ -14,21 +15,24 @@ push_docker_image: build_docker_image
|
||||
docker push $(DOCKER_IMAGE):latest
|
||||
|
||||
# Books/website
|
||||
build_serif_pdf:
|
||||
$(DOCKER_CMD) "cd /opt/repo/book && make build_serif_pdf"
|
||||
serif_pdf:
|
||||
$(DOCKER_CMD) "cd /opt/repo/book && make serif_pdf"
|
||||
|
||||
build_ebook:
|
||||
$(DOCKER_CMD) "cd /opt/repo/book && make build_ebook"
|
||||
ebook:
|
||||
$(DOCKER_CMD) "cd /opt/repo/book && make ebook"
|
||||
|
||||
build_pdf:
|
||||
pdf:
|
||||
$(DOCKER_CMD) "cd /opt/repo/book && make"
|
||||
|
||||
bake:
|
||||
$(DOCKER_CMD) "cd /opt/repo/book && make -j bake"
|
||||
$(DOCKER_CMD) "cd /opt/repo/book && make bake"
|
||||
|
||||
website:
|
||||
$(DOCKER_CMD) "cd /opt/repo/book && make website"
|
||||
|
||||
booklet:
|
||||
$(DOCKER_CMD) "cd /opt/repo/book && make booklet"
|
||||
|
||||
mrproper:
|
||||
$(DOCKER_CMD) "cd /opt/repo/book && make mrproper"
|
||||
|
||||
@@ -44,3 +48,8 @@ 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
|
||||
|
||||
@@ -392,7 +392,7 @@ class ModifyBuild
|
||||
|
||||
def build_header_html
|
||||
%Q{
|
||||
<div class="header"><img src="banner.png"></div>
|
||||
<div class="header"><a href="/"><img src="banner.png"></a></div>
|
||||
}
|
||||
end
|
||||
|
||||
@@ -629,7 +629,9 @@ class ModifyBuild
|
||||
to everyone, I have decided to make it available as a free digital download.
|
||||
</p>
|
||||
|
||||
<a href="bread.jpg">
|
||||
<img alt="One of my best Sourdough Breads" class="home-bread" src="bread.jpg" />
|
||||
</a>
|
||||
|
||||
<p class="noindent">
|
||||
However, producing and maintaining resources like this requires
|
||||
@@ -728,7 +730,7 @@ class ModifyBuild
|
||||
doc.to_html
|
||||
end
|
||||
|
||||
# For some reason the depdency is missing a // in the url.
|
||||
# For some reason the dependency is missing a // in the url.
|
||||
def fix_js_dependency_link(text)
|
||||
text.gsub("https:/cdn.jsdelivr.net", "https://cdn.jsdelivr.net")
|
||||
end
|
||||
@@ -780,7 +782,7 @@ class ModifyBuild
|
||||
def insert_mobile_header_graphic(text)
|
||||
doc = build_doc(text)
|
||||
content = doc.css(".TOC.menu")[0]
|
||||
content.after('<div class="mobile-banner"><img src="banner.png" /></div>')
|
||||
content.after('<div class="mobile-banner"><a href="/"><img src="banner.png" /></a></div>')
|
||||
doc.to_html
|
||||
end
|
||||
|
||||
|
||||