mirror of
https://github.com/hendricius/the-sourdough-framework
synced 2025-11-08 12:11:11 -06:00
Merge branch 'main' into fix_warnings
This commit is contained in:
2
.github/workflows/release-book-website.yml
vendored
2
.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 bake
|
||||
- name: Release baked book to S3
|
||||
uses: shallwefootball/s3-upload-action@master
|
||||
with:
|
||||
|
||||
@@ -84,6 +84,13 @@ size. This shrinks the book from more than 50MB down to ~5MB:
|
||||
|
||||
* [Download compiled B&W .epub version](https://www.the-bread-code.io/bw-book.epub)
|
||||
|
||||
If you prefer a very short version (about 10 pages) with main flowcharts and
|
||||
crucial informations 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)
|
||||
|
||||
174
book/booklet.tex
Normal file
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 flpour 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.
|
||||
Utimately 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}
|
||||
@@ -242,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
|
||||
|
||||
@@ -31,10 +31,12 @@ chapters = baking basics bread-types cover flour-types history intro mix-ins\
|
||||
|
||||
src_tables := $(wildcard tables/table-*.tex)
|
||||
src_figures := $(wildcard figures/fig-*.tex) figures/flowcharts_tikz.tex
|
||||
src_recipes := $(wildcard recipes/*.tex)
|
||||
|
||||
src_tex := $(foreach directory, $(chapters), $(wildcard $(directory)/*.tex))
|
||||
src_tex += book.tex book_sans_serif.tex references.bib figures/vars.tex
|
||||
src_tex += supporters.csv sourdough.sty colors.tex
|
||||
src_tex += $(src_recipes)
|
||||
|
||||
images := $(wildcard images/*/*.jpg)
|
||||
images += $(wildcard images/*.jpg)
|
||||
@@ -55,6 +57,11 @@ ebook_src := $(src_all) tex4ebook.cfg book.mk4 book-ebook.css
|
||||
|
||||
website_src := $(src_all) website.cfg style.css
|
||||
|
||||
# This is more than what is actually needed but keeps the makefile simple
|
||||
# and latexmk will handle the rest
|
||||
booklet_src := $(src_figures) $(src_tables) $(src_recipes) $(images)
|
||||
booklet_src += booklet.tex
|
||||
|
||||
website_assets := $(wildcard ../website/assets/*)
|
||||
ruby_src := ../website/modify_build.rb $(website_assets)
|
||||
ruby_pkg := ../website/Gemfile ../website/Gemfile.lock
|
||||
@@ -83,6 +90,9 @@ tgt_figures := $(patsubst %.tex, %.png,$(src_figures))
|
||||
%.xbb: %.jpg
|
||||
ebb -x $<
|
||||
|
||||
booklet/booklet.pdf: $(booklet_src)
|
||||
$(LATEX) -output-directory=booklet booklet.tex
|
||||
|
||||
book_serif/book.pdf: $(src_all)
|
||||
$(LATEX) -output-directory=book_serif book.tex
|
||||
|
||||
@@ -97,7 +107,7 @@ epub/%.epub: %.tex $(ebook_src) cover/cover-page.xbb
|
||||
copy_ebook_files: build_ebook
|
||||
$(RSYNC) book-epub/ bw-book-epub/
|
||||
|
||||
# We not convert SVG to B&W or lower res for now as they are super small
|
||||
# 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 $@)
|
||||
@@ -140,6 +150,8 @@ help:
|
||||
@echo ""
|
||||
@echo "build_ebook: builds only the colour ebook"
|
||||
@echo ""
|
||||
@echo "build_booklet: builds only the short booklet"
|
||||
@echo ""
|
||||
@echo "build_bw_ebook: builds the low res black & white ebook"
|
||||
@echo ""
|
||||
@echo "build_sans_serif_pdf: build accessible pdf only"
|
||||
@@ -160,6 +172,8 @@ help:
|
||||
@echo ""
|
||||
@echo "quick_ebook: compiles ebook but runs lulatex only once"
|
||||
@echo ""
|
||||
@echo "quick_booklet: compiles booklet but runs lulatex only once"
|
||||
@echo ""
|
||||
@echo "show_tools_version: Show version of tools used on the build machine"
|
||||
@echo ""
|
||||
@echo "print-X: print makefile variable X"
|
||||
@@ -170,10 +184,12 @@ help:
|
||||
|
||||
|
||||
# Finally actual project targets (i.e. build pdf and ebooks)
|
||||
.PHONY: build_pdf build_serif_pdf build_sans_serif_pdf build_ebook
|
||||
.PHONY: build_pdf build_booklet build_serif_pdf build_sans_serif_pdf build_ebook
|
||||
|
||||
build_pdf: build_serif_pdf build_sans_serif_pdf
|
||||
|
||||
build_booklet: booklet/booklet.pdf
|
||||
|
||||
build_serif_pdf: book_serif/book.pdf
|
||||
|
||||
build_sans_serif_pdf: book_sans_serif/book_sans_serif.pdf
|
||||
@@ -221,6 +237,7 @@ clean_website_build: clean_ebook_build
|
||||
clean: clean_ebook_build clean_figures clean_website_build
|
||||
$(CLEAN) -output-directory=book_serif book.tex
|
||||
$(CLEAN) -output-directory=book_sans_serif book_sans_serif.tex
|
||||
$(CLEAN) -output-directory=booklet booklet.tex
|
||||
-rm book*/*.{bbl,loc,.run.xml}
|
||||
-rm -rf *book-epub/META-INF
|
||||
-rm -rf *book-epub/OEBPS
|
||||
@@ -230,6 +247,7 @@ mrproper: clean
|
||||
$(CLEAN) -C $(src_figures)
|
||||
$(CLEAN) -C -output-directory=book_serif book.tex
|
||||
$(CLEAN) -C -output-directory=book_sans_serif book_sans_serif.tex
|
||||
$(CLEAN) -C -output-directory=booklet booklet.tex
|
||||
-rm figures/*.png
|
||||
-rm *.html
|
||||
-rm *.svg
|
||||
@@ -237,13 +255,14 @@ mrproper: clean
|
||||
-rm -rf release/
|
||||
-rm -rf book_serif/
|
||||
-rm -rf book_sans_serif/
|
||||
-rm -rf booklet/
|
||||
-rm -rf *book-epub/
|
||||
-rm -rf $(website_dir)
|
||||
|
||||
# top level releases rules
|
||||
.PHONY: bake release_serif release_sans_serif
|
||||
|
||||
bake: release_serif release_sans_serif
|
||||
bake: release_serif release_sans_serif release_booklet
|
||||
|
||||
release:
|
||||
mkdir -p release
|
||||
@@ -256,6 +275,9 @@ release_serif: build_serif_pdf build_ebook build_bw_ebook | release
|
||||
release_sans_serif: build_sans_serif_pdf | release
|
||||
cp book_sans_serif/book_sans_serif.pdf release/TheBreadCode-The-Sourdough-Framework-sans-serif.pdf
|
||||
|
||||
release_booklet: build_booklet | release
|
||||
cp booklet/booklet.pdf release/TheBreadCode-The-Sourdough-Framework-booklet.pdf
|
||||
|
||||
# Website stuff
|
||||
.PHONY: html website
|
||||
$(website_dir)/book.html: $(website_src) cover/cover-page.xbb
|
||||
@@ -283,6 +305,9 @@ website: html ../website/_bundle_install_done $(ruby_src)
|
||||
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
|
||||
|
||||
|
||||
53
book/recipes/flat-bread.tex
Normal file
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}
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 115 KiB After Width: | Height: | Size: 626 KiB |
@@ -913,7 +913,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,
|
||||
|
||||
6
makefile
6
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:
|
||||
@@ -24,11 +25,14 @@ build_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 build_booklet"
|
||||
|
||||
mrproper:
|
||||
$(DOCKER_CMD) "cd /opt/repo/book && make mrproper"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user