diff --git a/.github/workflows/test-book-website-pull-request.yml b/.github/workflows/test-book-website-pull-request.yml new file mode 100644 index 0000000..b7fcf0e --- /dev/null +++ b/.github/workflows/test-book-website-pull-request.yml @@ -0,0 +1,11 @@ +name: Test building book and website + +on: + pull_request: + +jobs: + + test-building-book-website: + uses: ./.github/workflows/test-book-website.yml + with: + docker-image: ghcr.io/${{ github.repository }}:latest diff --git a/.github/workflows/test-book-website-push.yml b/.github/workflows/test-book-website-push.yml new file mode 100644 index 0000000..04c7527 --- /dev/null +++ b/.github/workflows/test-book-website-push.yml @@ -0,0 +1,10 @@ +name: Test building book and website with default image + +on: + push: + +jobs: + test-building-book-website: + uses: ./.github/workflows/test-book-website.yml + with: + docker-image: ghcr.io/${{ github.repository }}:latest diff --git a/.github/workflows/test-book-website.yml b/.github/workflows/test-book-website.yml index 24c9e2e..15671fc 100644 --- a/.github/workflows/test-book-website.yml +++ b/.github/workflows/test-book-website.yml @@ -1,17 +1,14 @@ -name: Test building book and website +name: Test book and website for given image on: - pull_request: - -env: - IMAGE: ghcr.io/${{ github.repository }}:${{ github.event.pull_request.head.ref }} + workflow_call: + inputs: + docker-image: + required: true + type: string jobs: - build-and-push-image: - uses: ./.github/workflows/docker-build-push.yml - - test-building-book-website: - needs: build-and-push-image + test-book-website: runs-on: ubuntu-latest steps: - name: Set up git repository @@ -19,7 +16,7 @@ jobs: - name: Print dependency versions uses: addnab/docker-run-action@v3 with: - image: ${{ env.IMAGE }} + image: ${{ inputs.docker-image }} options: -v ${{ github.workspace }}:/app run: | cd /app/book @@ -27,7 +24,7 @@ jobs: - name: Print build variables uses: addnab/docker-run-action@v3 with: - image: ${{ env.IMAGE }} + image: ${{ inputs.docker-image }} options: -v ${{ github.workspace }}:/app run: | cd /app/book @@ -35,7 +32,7 @@ jobs: - name: Test baking the release versions uses: addnab/docker-run-action@v3 with: - image: ${{ env.IMAGE }} + image: ${{ inputs.docker-image }} options: -v ${{ github.workspace }}:/app run: | cd /app/book @@ -51,7 +48,7 @@ jobs: - name: Test building website uses: addnab/docker-run-action@v3 with: - image: ${{ env.IMAGE }} + image: ${{ inputs.docker-image }} options: -v ${{ github.workspace }}:/app run: | cd /app/book diff --git a/.gitignore b/.gitignore index b92da4e..9ba0e4c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.DS_Store *.xbb *.aux *.fdb_latexmk @@ -14,6 +15,7 @@ *.dlog *.bak *.opf +.DS_Store book/book.out .vscode/ book/bookch* diff --git a/Dockerfile b/Dockerfile index 1f82e54..73abd0f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -55,6 +55,11 @@ RUN wget https://github.com/mgieseki/dvisvgm/releases/download/3.1.2/dvisvgm-3.1 make && \ make install +RUN git clone https://github.com/michal-h21/make4ht.git && \ + cd make4ht && \ + make && \ + make install + # Make sure everything is UTF-8 RUN echo "export LC_ALL=en_US.UTF-8" >> /root/.bashrc && \ echo "export LANG=en_US.UTF-8" >> /root/.bashrc diff --git a/book/baking/baking.tex b/book/baking/baking.tex index c7b82ea..9f6b2af 100644 --- a/book/baking/baking.tex +++ b/book/baking/baking.tex @@ -69,7 +69,7 @@ acid? How would the taste change? methods. In this case I~used a Dutch oven and an apple as dough replacement. All the apples were coming from the fridge. The temperature was measured using a barbecue thermometer. The more steam, the faster - the surface temperature increases.} + the apple's surface temperature increases.} \end{figure} As the temperature increases further the crust thickens. The Maillard reaction @@ -245,7 +245,7 @@ as the size of the Dutch oven is limited. In many cases, it makes sense to bake multiple loaves in one go. It makes the whole process more efficient as you have to knead less per loaf. The time it -takes to make one loaf is significantly reduced. Furthermore, +takes to make one loaf is significantly reduced on average. Furthermore, you don't require as much energy. You don't have to preheat your oven twice for each loaf. diff --git a/book/basics/how-sourdough-works.tex b/book/basics/how-sourdough-works.tex index 5782460..2079ad7 100644 --- a/book/basics/how-sourdough-works.tex +++ b/book/basics/how-sourdough-works.tex @@ -211,9 +211,11 @@ tweak just by adjusting the speed of your dough's fermentation. \section{Yeast} -Yeasts are single-celled microorganisms belonging to the fungi kingdom, and -spores that are hundreds of millions of years old have been identified by -scientists. There are a wide variety of species --- so far, about \num{1500} +Yeasts are single-celled microorganisms belonging to the fungi kingdom. They +can reproduce through either budding or by building spores. The spores are +incredibly tiny and resistant to external factors. Scientists have found undamaged +spores that are hundreds of million years old. There are a wide variety of +species --- so far, about \num{1500} have been identified. Unlike other members of the fungi kingdom such as mold, yeasts do not ordinarily create a mycelium network~\cite{molecular+mechanisms+yeast}.\footnote{For one interesting @@ -332,7 +334,7 @@ so that they could penetrate the tissue of the plants. \section{Bacteria} The other most dominant microbial antagonists in your sourdough are bacteria. -In fact, they are so dominant that they outnumber the yeast in your dough +In fact, they are so dominant that they outnumber the yeast in your dough 100~to~1. Whereas yeast provides leavening power, bacteria create the distinct flavours for which sourdough has been named. These are due to the acidic byproducts that result from bacterial feeding. As a bonus, these acids @@ -341,8 +343,8 @@ breads~\cite{shelflife+acidity}. \begin{figure} \includegraphics[width=1.0\textwidth]{bacteria-microscope} - \caption[Bacteria under the microscope]{Fructilactobacillus Sanfranciscensis - under the microscope.}% + \caption[Bacteria under the microscope]{Fructilactobacillus + sanfranciscensis under the microscope.}% \label{lactobacillus-franciscensis-microscope} \end{figure} diff --git a/book/book-ebook.css b/book/book-ebook.css index ecc3e08..f652051 100644 --- a/book/book-ebook.css +++ b/book/book-ebook.css @@ -7,3 +7,12 @@ object-fit: contain; width: auto; } +.float { + max-width: 100%; +} +.float img { + max-width: 100% !important; + height: auto; + object-fit: contain; + width: auto; +} diff --git a/book/bread-types/bread-types.tex b/book/bread-types/bread-types.tex index a74640e..f2517df 100644 --- a/book/bread-types/bread-types.tex +++ b/book/bread-types/bread-types.tex @@ -41,8 +41,8 @@ To make a flatbread no oven is required; all you need is a stove. \end{figure} This type of bread is super simple to make as you can skip -a lot of the technique that is normally required. The flatbread -can be made with all kinds of flours. You can even use +a lot of the technique that is normally required to make wheat doughs. +The flatbread can be made with all kinds of flours. You can even use flour without gluten, such as corn or rice flour, to make the dough. To make the flatbread a little more fluffy, you can use a little bit of wheat flour. The developing gluten @@ -231,7 +231,8 @@ bake. A similar strategy is used when making corn tortillas. You can safely store the baked flatbreads or pancakes in your fridge for weeks. When storing make sure to store them in an airtight plastic bag so that -they do not dry out. +they do not dry out. If they dry out, spray them with some water and toast them. +They will be almost as good as when they were freshly baked. Keep a little bit of your unbaked dough. You can use it to make the next batch of bread or pancakes for the next day. If you want to bake a few days later, add @@ -344,10 +345,9 @@ evaporating moisture will stay inside. A good trick to make excellent loaf pan bread is to make a very sticky dough. You can opt for a hydration of \qtyrange{90}{100}{\percent}, almost resembling a default sourdough starter. Just like with flatbread, -the high humidity helps to make a more airy, fluffy crumb. At -the same time the bread will be a bit chewier. This -type of bread made with rye is my family's favorite style of bread. -The hearty rye flavor paired with the sticky consistency really +the high humidity helps to make a more airy, fluffy crumb. The bread will +also be a bit chewier. This type of bread made with rye is my family's favorite +style of bread. The hearty rye flavor paired with the sticky consistency really makes an excellent sandwich bread. To improve the structure you can also consider using around \qty{50}{\percent} @@ -385,13 +385,12 @@ and tools are required. \end{center} \end{figure} -Normally you mix your dough, when using wheat you make sure that you mix -enough to develop a gluten network. You allow the dough to reach a certain -size increase during the fermentation, afterwards you divide and pre-shape the -dough into the desired visual shape that you like. Each shape requires a -different technique. Sometimes achieving exactly the right shape can be -challenging, making a baguette for instance, requires you to perform more -steps. Mastering this technique takes several attempts. +When using wheat, make sure to mix your dough enough to develop a gluten network. +Allow the dough to reach a certain size increase during the fermentation. +Afterward, divide and pre-shape the dough into the desired visual shape you +would like. Each shape requires a different technique. Sometimes achieving +the right shape can be challenging. Making a baguette, for instance, +requires performing more steps. Mastering this technique takes several attempts. Once the dough is shaped, it is proofed again for a certain period of time. Once the dough is ready, a sharp tool such @@ -403,5 +402,5 @@ performed perfectly, without mistakes. But after baking you will be rewarded with a beautiful bread with great taste and consistency. -There is a fully dedicated recipe and tutorial -for this type of bread in the~''\nameref{chapter:wheat-sourdough}''~Chapter. +There is a dedicated recipe and tutorial for this type of bread in the +\nameref{chapter:wheat-sourdough} chapter. diff --git a/book/figures/fig-life-planet-sourdough-timeline.tex b/book/figures/fig-life-planet-sourdough-timeline.tex index 57f6ed4..37192a2 100644 --- a/book/figures/fig-life-planet-sourdough-timeline.tex +++ b/book/figures/fig-life-planet-sourdough-timeline.tex @@ -46,7 +46,7 @@ \draw[line width=1pt] (\textwidth,0.1) -- (\textwidth,-0.1); % Full timeline width for billion years - \draw[stealth-stealth, line width=1pt] (0,-3.8) -- node[midway, timeline_timespan] {5.45 billion years} (\textwidth,-3.8); + \draw[stealth-stealth, line width=1pt] (0,-3.8) -- node[midway, timeline_timespan] {4.45 billion years} (\textwidth,-3.8); % Indicator for the period of 3 months = 1.1 billion years \draw[stealth-stealth, line width=1pt] (0,-1.0) -- node[midway, timeline_timespan] {1.11 billion years} ({\segmentwidth * 3},-1.0); diff --git a/book/figures/fig-proofing-process.tex b/book/figures/fig-proofing-process.tex index 283af1c..7303ab4 100644 --- a/book/figures/fig-proofing-process.tex +++ b/book/figures/fig-proofing-process.tex @@ -1,5 +1,5 @@ \begin{tikzpicture}[node distance = 3cm, auto] - \node [decision_start] (init) {Room temperature proofing?}; + \node [decision_start] (init) {Room temperature-proofing?}; \node [decision, right of=init, node distance=8cm] (retard_bake_decision) {Bake in less than \qty{10}{\hour} from now?}; \node [block, below of=init, node distance=4cm] (poke) {Poke the dough}; \node [block, left of=poke] (wait_poke) {Wait\\ 15~minutes}; diff --git a/book/flour-types/flour-types.tex b/book/flour-types/flour-types.tex index 1be6c62..c769a7e 100644 --- a/book/flour-types/flour-types.tex +++ b/book/flour-types/flour-types.tex @@ -141,7 +141,7 @@ This also provides a larger surface that your microbes can use to attack the mol and start the fermentation process. I~am still -yet to find a good way of milling my own flour at home. Even after trying to +yet to find a good way of milling my own wheat flour at home. Even after trying to mill the flour 10~times with short breaks, I~was not able to achieve the same properties as with commercially milled flour. The doughs I~would make felt good, maybe a bit coarse. However, during baking the doughs would start to diff --git a/book/glossary/glossary.tex b/book/glossary/glossary.tex index d7605bb..ae4ecb6 100644 --- a/book/glossary/glossary.tex +++ b/book/glossary/glossary.tex @@ -15,6 +15,17 @@ acid bacteria and acetic acid bacteria during fermentation. It gives sourdough b its characteristic tangy flavor and helps to preserve the bread by lowering its pH. The flavor of acetic acid has a more vinegary profile. +\item[Aliquot jar] A small piece of dough extracted after creating initial +dough strength. The aliquot jar is used to monitor the dough's fermentation progress. +It's important to ensure the dough's water temperature in the aliquot matches +your room temperature for accurate readings. Be mindful that the aliquot +jar may not be as effective if there are significant temperature +fluctuations in your kitchen. This is because the small dough sample in +the aliquot can heat up or cool down faster than the main dough mass, +potentially impairing its ability to accurately monitor fermentation. +It's crucial to use a cylindrical-shaped aliquot container to properly judge +the dough's size increase. + \item[All Purpose Flour] A general flour that’s balanced to make breads and also cakes. In Germany this is type~550. @@ -104,6 +115,14 @@ proof. The bannetons are typically made out of rattan or wood pulp. An alternati DIY solution is to use a bowl with a kitchen towel inside. While resting inside of the banneton the dough’s surface dries out and becomes easier to score before baking. +\item[Bassinage method] A bread making technique involving the staged addition of water +to the dough. Initially, the dough is mixed to a lower hydration level, +allowing gluten bonds to form more effectively. Once these gluten structures +are established, additional water is gradually incorporated through further +kneading. This method enhances the dough's extensibility, especially beneficial +when working with lower-gluten flours. By employing the bassinage method, +bakers can achieve a dough that is both strong and extensible. + \item[Bench Rest] A short resting period given to the dough after preshaping allowing the gluten to relax a little bit and making shaping easier. Most people bench rest for 10 minutes up to an hour. The bench rest becomes especially important @@ -194,6 +213,39 @@ of starter is used for the fermentolyse. The flour, water and starter are mixed together. By adding the starter early the dough becomes more extensible and easier to handle. +\item[Finger poke test] The finger poke test is a simple yet effective way to +check if your sourdough bread is ready to bake. After the final rise, lightly +flour your finger and gently press about half an inch into the dough. +If the dough springs back slowly and leaves a slight indentation, it's perfect +and ready for the oven. If it springs back quickly, it needs more time to rise. +However, if the dough collapses or doesn't spring back at all, it may be +over fermented. + +\item[Float test] The float test is a technique for assessing the readiness +of a sourdough starter. To perform this test, take a small sample of +your starter and gently place it in a glass of water. The outcome +of this test can provide insights into your starter's fermentation stage. + +\begin{itemize} +\item[] \emph{Positive result:} If your starter effortlessly floats on the +surface of the water, it's a clear indication that it has reached its peak +of fermentation and is ready to be used as a leavening agent in your dough. +This buoyancy is a result of the carbon dioxide gas produced during +the active fermentation process. +\item[] \emph{Negative result:} Conversely, if your starter sinks to the +bottom of the glass, it suggests that it's not quite ready yet. +This indicates that the fermentation process has not progressed +sufficiently for optimal leavening power. +\end{itemize} + +It's worth noting that while the float test is a reliable indicator +for wheat-based sourdough starters, it may not be as effective for non-wheat +starters. This is because the gas generated during fermentation in non-wheat +starters tends to escape more readily, making it less buoyant. For non-wheat +starters, a more accurate approach involves observing the presence of +bubbles in your starter jar and assessing its aroma. A mature starter should +emit a mildly sour, but not overly pungent, scent. + \item[Fool’s Crumb] A term used to describe a crumb structure that has several large pockets or holes, rather than an even distribution of smaller holes. This isn't necessarily a desired feature, as it can indicate uneven fermentation or @@ -225,6 +277,8 @@ to prevent clumping and burning it. fermentation. It imparts a mild tangy yogurty flavor to sourdough bread and, along with acetic acid, contributes to the bread's overall acidity. +\item[Levain] See Sourdough starter. + \item[Maillard Reaction] The Maillard reaction is one of the causes of food browning during cooking. The reaction occurs between reducing sugars and amino acids, and depending on the initial reactants and cooking conditions can produce a wide variety @@ -324,7 +378,8 @@ stage by placing the dough in a colder environment, typically a refrigerator. Th bakers in scheduling, allowing them to have more control over when to bake their breads, especially in large-scale bakeries where timing is essential to serve freshly baked bread to early morning customers. While scheduling is the main reason, some bakers also assert -that retarding can enhance the bread's overall flavor profile. +that retarding can enhance the bread's overall flavor profile. Also known as +fridge-proofing. \item[Rye] A type of grain used in baking. Due to its low gluten content, breads made solely from rye flour tend to be dense. However, rye has a unique flavor and @@ -340,10 +395,6 @@ quality. The scalding technique can also enhance the overall flavor and aroma of the bread, bringing out more pronounced grainy notes and reducing bitterness sometimes found in certain whole grains. -\item[Scalding] A method where boiling water is poured over flour and then cooled -down to room temperature. This process gelatinizes the starches in the flour, -resulting in a dough that retains moisture better and has an improved shelf life. - \item[Scoring] Cutting the surface of the bread dough before it's baked. This allows the dough to expand freely in the oven, preventing it from bursting in unpredictable ways. It also provides a controlled aesthetic to the finished loaf. @@ -351,9 +402,10 @@ unpredictable ways. It also provides a controlled aesthetic to the finished loaf \item[Sift] To pass flour or another dry ingredient through a sieve to remove lumps and aerate it. -\item[Soaker] A mixture of grain and water that is left to soak overnight (or for a +\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, making them easier to integrate into the dough and +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. \item[Sponge] A type of preferment, a sponge is a wet mixture of flour, water, and @@ -389,8 +441,17 @@ with the plant providing a shield against pathogens and receiving sugars from th photosynthesis of the plant in return. When the plant becomes weak the wild yeasts can become parasitic and consume the host. +\item[W-Value] A parameter representing the strength of flour in terms of its +baking quality. The W-value, derived from the Chopin Alveograph test, +measures the energy required to blow a bubble with the dough until it bursts. +It is a direct indicator of the flour's ability to withstand the fermentation +and baking processes. A higher W-value typically indicates a stronger +flour, suitable for breads with high volume and longer fermentation times. +Conversely, a lower W-value suggests a weaker flour, better suited for +products requiring less structure, like cakes and pastries. + \item[Yeast] Microorganisms that ferment the sugars present in the dough, producing -carbon dioxide and alcohol and thereby causing the dough to rise. +carbon alcohol, carbon dioxide and heat; thereby causing the dough to rise. \item[Yudane] A Japanese method of bread-making which involves the preparation of a starter by mixing boiling water with bread flour in a specific ratio, typically 1:1 diff --git a/book/intro/foreword.tex b/book/intro/foreword.tex deleted file mode 100644 index d9067ca..0000000 --- a/book/intro/foreword.tex +++ /dev/null @@ -1,4 +0,0 @@ -\chapter{Foreword}% -\label{ch:Foreword} -Hopefully one day there is going to be an awesome foreword -by another bread baker! diff --git a/book/intro/preface.tex b/book/intro/preface.tex index c6cc38b..5f59c48 100644 --- a/book/intro/preface.tex +++ b/book/intro/preface.tex @@ -46,7 +46,8 @@ seemingly healthy bread consisted of so many other things aside from flour and water. The black color was not coming from the flour, but from caramelized sugar. The packaging stated it was a sourdough bread, but then why was there additional yeast? -I~thought that if it was really sourdough, it shouldn't require additional yeast, and I~soon +I~thought that if it was really sourdough, it shouldn't require additional +yeast. I~soon realized that something was wrong with the bread I~was buying. I~proceeded to check the other supermarket breads, only to discover that they, too, contained ingredients I'd never heard of. That was the day I~lost trust @@ -162,8 +163,8 @@ and more. It should provide a detailed understanding as to why certain steps are and how to adapt them when things go wrong while making bread. It is my desire for this knowledge to be accessible to everyone around the world, regardless of budget, and as such, I~do not want to charge for the book. That's why I've decided to make -it open source and have asked the community to support my work financially via my ko-fi page -\url{https://ko-fi.com/thebreadcode}. The community's feedback has been amazing so far, and +it open source and have asked the community to support my work with +donations. The community's feedback has been amazing so far, and I've already raised much more money than initially expected. The digital version of this book will always remain free. There is also a hardcover version of the book available for purchase. You can read more details here: \url{https://breadco.de/physical-book} diff --git a/book/makefile b/book/makefile index ddf2269..b51ec50 100644 --- a/book/makefile +++ b/book/makefile @@ -49,9 +49,11 @@ 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) tex4ebook.cfg book.mk4 $(images) +src_all := $(src_tex) $(src_figures) $(src_tables) $(images) -website_src := $(src_all) website.cfg +ebook_src := $(src_all) tex4ebook.cfg book.mk4 book-ebook.css + +website_src := $(src_all) website.cfg style.css website_assets := $(wildcard ../website/assets/*) ruby_src := ../website/modify_build.rb $(website_assets) @@ -89,7 +91,7 @@ book_sans_serif/book_sans_serif.pdf: $(src_all) .PHONY: copy_ebook_files -epub/%.epub: %.tex $(src_all) cover/cover-page.xbb +epub/%.epub: %.tex $(ebook_src) cover/cover-page.xbb $(EBOOK) $< copy_ebook_files: build_ebook @@ -221,9 +223,9 @@ 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 + -rm -rf *book-epub/META-INF + -rm -rf *book-epub/OEBPS + -rm *book-epub/mimetype mrproper: clean $(CLEAN) -C $(src_figures) @@ -236,7 +238,7 @@ mrproper: clean -rm -rf release/ -rm -rf book_serif/ -rm -rf book_sans_serif/ - -rm -rf book-epub/ + -rm -rf *book-epub/ -rm -rf $(website_dir) # top level releases rules diff --git a/book/mix-ins/apple-swirl.jpg b/book/mix-ins/apple-swirl.jpg new file mode 100644 index 0000000..66c3d82 Binary files /dev/null and b/book/mix-ins/apple-swirl.jpg differ diff --git a/book/mix-ins/beer-bread.jpg b/book/mix-ins/beer-bread.jpg new file mode 100644 index 0000000..637783c Binary files /dev/null and b/book/mix-ins/beer-bread.jpg differ diff --git a/book/mix-ins/broa.jpg b/book/mix-ins/broa.jpg new file mode 100644 index 0000000..ba1dda0 Binary files /dev/null and b/book/mix-ins/broa.jpg differ diff --git a/book/mix-ins/mix-ins.tex b/book/mix-ins/mix-ins.tex index 11e05ee..ebc0fa4 100644 --- a/book/mix-ins/mix-ins.tex +++ b/book/mix-ins/mix-ins.tex @@ -1,183 +1,315 @@ \chapter{Mix-ins}% \label{ch:mix-ins} \begin{quoting} - This work-in-progress chapter will describes altering and additions you - could make to your dough to create beautiful or different tasting loafs. + In this chapter, you will learn about the fascinating world of sourdough + mix-ins. Discover how these additions can elevate your bread, enhancing + flavor, adding vibrant colors, and creating delightful textures that make + each loaf a culinary masterpiece. \end{quoting} +\begin{figure}[htb!] + \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 + adds flavor and hydration to the dough.}% +\end{figure} + A loaf of wheat sourdough has a very pure aesthetic. Good craftsmanship and -precision transforms the ingredients into simple, but delicious food. With +precision transform the ingredients into simple, but delicious food. With mix-ins, the basic recipe can become the starting point for a whole world of modifications to try and combine. Think of the loaf of bread as a blank canvas to express yourself. -One approach to sort through the options is to categorize mix-ins by shape -(the transition between these categories is somewhat fuzzy): +\section{Categories} + +\begin{figure}[htb!] + \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.}% +\end{figure} + +One approach to categorizing the mixins is to look at their respective shape. +However, the transition between these categories is somewhat fuzzy: + \begin{itemize} \item Liquids: Integrate homogeneously into the dough, may replace some of - the water. Examples: Milk, oil, spinach juice. + or all of the water. Examples: Milk, butter, oil, spinach juice, tomato + juice, eggs \item Powders: Integrate homogeneously into the dough, may replace some of - the flour. Examples: Rye flour, semolina, cocoa, ground spices. + the flour. Examples: Milk powder, semolina, cocoa, spices \item Small bits: Individually visible in the final loaf, small enough to - distribute somewhat evenly throughout the dough. Examples: Seeds (poppy - seeds, sesame, pumpkin seeds), whole spices (coriander). + distribute somewhat evenly throughout the dough. Examples: Seeds (wheat + berries, rye berries, poppy seeds, sesame, pumpkin seeds, + flax seeds), whole spices (coriander) \item Chunks: Larger pieces that will only be present in the occasional bite when eating a slice of your bread. Examples: dried tomatoes, chunks of - cheese, + cheese, chunks of chocolate \end{itemize} -Another categorization approach looks at the changes to the bread. Most -mix-ins actually impact multiple aspects. +Another categorization approach looks at the changes to the bread: + \begin{itemize} \item Flavor: Significantly changes the taste of the bread. Examples: rye - flour, spices. + flour, corn flour, spices, sugar. \item Color: Significantly changes the look of the bread. Examples: cocoa, - squid ink, beetroot juice. + squid ink, beetroot juice, tomato juice. \item Texture: Significantly changes the feeling in the mouth when eaten. Examples: Cheese (gummy), seeds (crunchy), olives (squishy chunks). \end{itemize} +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!] + \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.}% +\end{figure} + Mix-ins affect the structure of the dough. One aspect is the impact on hydration. Some mix-ins absorb a lot of water when added to the dough, so you have to increase the amount of water to achieve the same dough consistency. The other impact is on the gluten network. Bits and chunks disrupt the gluten -network, and may reduce the rise. All of this depends on the amount of mix-ins +network and may reduce oven spring during baking. All of this depends on the amount of mix-ins used. A good rule of thumb is to add \qtyrange{10}{20}{\percent} of the amount of flour in most mix-ins, reduced to around \qtyrange{1}{5}{\percent} of the amount of flour for spices. An important factor is also the mix-in's behavior during baking. Particularly chunks may bake differently than dough, and either melt (cheese) leaving holes -inside, or char when peeking through the crust (\eg, vegetables). These -problems can be mitigated to some degree with the right preparation (\eg, -chopping into smaller pieces, soaking dry ingredients in water or oil first, +inside, or char when peeking through the crust (\eg~vegetables). These +problems can be mitigated to some degree with the right preparation (\eg~chopping +into smaller pieces, soaking dry ingredients in water or oil first, or squeezing out excess moisture). -% potential reference to link: https://food52.com/blog/25521-additions-to-sourdough-bread-ideas \section{Examples} -The following is a list of common mix-ins and their peculiarities: +The following is a list of common mix-ins and their peculiarities. They can be +combined depending on your preference. \subsection{Flours} -These are powders. Usually you want to just replace some fraction of the +These are powders. Usually, you want to just replace some fraction of the regular bread flour. Different flours change the taste of the bread and usually moderately affect the color. + +\begin{figure}[htb!] + \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.}% +\end{figure} + \begin{itemize} \item Whole wheat flour (substitute any amount, makes the bread taste more complex, nutty) \item Rye flour (very hearty, nutty, malty taste) - \item Semolina (supports mediterranean flavors) + \item Enzymatic malt (malty taste, improves enzymatic activity). The malt is + a great addition when making quicker yeast-based doughs. + \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. \end{itemize} \subsection{Liquids} -Substitute some of the water with a different liquid, affecting taste and -texture. + +Instead of using water, you can substitute it with a different liquid, +affecting taste and texture. + +\begin{figure}[htb!] + \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}% +\end{figure} + \begin{itemize} - \item Coffee \item Beer - \item Olive oil (mediterranean) - \item Milk (for sweet, soft breads) + \item Butter \item Buttermilk + \item Cereal milk (the leftover milk from eating cereals) + \item Coffee + \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 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. \end{itemize} \subsection{Colors} -These drastically change the color of the bread. +\label{section:colors} +Some mix-ins will change the color and flavor of your bread. Common colorings +include: + \begin{itemize} + \item Activated charcoal powder (black) \item Beetroot juice (red) + \item Blueberry juice (blue) + \item Blue butterfly pea flower powder (blue) \item Carrot juice (orange) + \item Pear juice (pink) \item Spinach juice (green) \item Squid ink (black) + \item Strawberry juice (red) + \item Tomato juice (red) \end{itemize} \subsection{Seeds and nuts} -These are small bits, with some almost crossing into the chunk category. Most -seeds benefit from being baked for about 10~minutes before adding them to the +These are small bits, with some almost crossing into the chunk category. Some +seeds benefit from being boiled for about 10~minutes before adding them to the dough. + +\begin{figure}[htb!] + \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.}% +\end{figure} + \begin{itemize} - \item Pumpkin seed + \item Cacao nibs \item Chia seed - \item Flaxseed (soak these in water first) - \item Hemp seed (very crunchy, a personal favorite) + \item Chopped or whole nuts such as: Almonds, hazelnuts and walnuts + \item Flaxseeds + \item Hemp seed + \item Poppy seed + \item Pumpkin seed \item Sesame \item Sunflower seed - \item Poppy seed - \item Cacao nibs - \item Chopped or whole walnuts - \item Chopped or whole hazelnuts + \item Whole rye berries (boil 10 minutes) + \item Whole wheat berries (boil 10 minutes) \end{itemize} + +\begin{figure}[htb!] + \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.}% +\end{figure} + \subsection{Spices and flavor mix-ins} These are mostly powders or small bits. + \begin{itemize} - \item Mediterranean herbs (oregano, thyme, rosemary, marjoram) - \item Bread spice (coriander, cumin, fennel, anise) - \item Grated hard cheese: Gruyère, parmesan - \item Blueberry skins (press through sieve to remove juice, raw blueberries - would add too much water) - \item Lemon zest (alternatively orange or lime) + \item Blueberry skins (press through a sieve to remove juice, raw blueberries \item Browned onions - \item Molasses + \item Candied fruits such as: Lemon, orange, pineapple, etc. + \item Cinnamon + \item Grated hard cheese such as: Gruyère, parmesan, etc. + \item Mediterranean herbs such as: Marjoram, oregano, rosemary, thyme, etc. \item Miso + \item Molasses + \item Sugar + \item Spices such as: Anise, fennel, cinnamon, coriander, cumin, etc. + \item Zests such as: Lime, Lemon, orange, etc. \end{itemize} \subsection{Highlights} Mostly chunks, that add a big contrast and flavorful highlight to the basic -bread. Usually you want to use only one (or maximum two) of these. Often can -be complemented well by some flavor mix-in or flour. +bread. Usually, you want to use only one (or a maximum of two) of these. The suggestions +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 Cornflakes + \item Dried fruits such as: Cranberries, dates, raisins, etc. \item Olives + \item Pickled pepperoni \item Sundried tomatoes (squeeze out the oil if using pickled ones, or soak dried ones in water) - \item Pickled pepperoni - \item Cornflakes - \item Dried fruit (\eg, cranberries, raisins) - \item Chunks of cheese (\eg, cheddar, feta) - \item Chunks of black garlic - \item Chocolate chunks or drops \end{itemize} \subsection{Combinations} A few combinations where multiple mix-ins complement each other: + \begin{itemize} - \item Semolina, mediterranen herbs, olives, sundried tomatoes. - \item Cranberry and walnuts. - \item Cheddar and pepperoni. - \item Cocoa, cacao nibs, whole hazelnuts. + \item Butter and milk. Then add cinnamon and brown sugar before shaping + \item Cheddar and pepperoni + \item Cheddar and jalapeño + \item Cocoa, cacao nibs, whole hazelnuts + \item Cranberry and walnuts + \item Semolina, Mediterranean herbs, olives, sundried tomatoes + \item Tomato juice instead of water with \qty{20}{\percent} rye flour \end{itemize} \section{Techniques} -Adding mix-ins into the dough is just the simplest approach. There are other, -more advanced ways to include them into a loaf. -\subsection{Covering the crust} -This works best for either powders or small bits. Spread the mix-in in a flat -container, wet the surface of the loaf, and dip it into the mix-in right -before baking. +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. -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). +\subsection{Adding before shaping} + +\begin{figure}[htb!] + \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.}% +\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 + +\subsection{Covering the surface} + +\begin{figure}[htb!] + \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 + dough is quickly dumped in water and then rolled in a bowl of seeds. + Afterward, the dough is directly baked in the preheated oven. These + coverings add superb additional flavor and can be adjusted depending on + your preference. I love adding a mixture of sunflower, flax, and + sesame seeds.}% +\end{figure} + +This works best for either powders or small bits. After shaping wrap your +coverings on the dough's surface. This works great too when covering your +banneton or loaf pan with seeds or oats. When using a loaf pan or banneton +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). \subsection{Swirled colors} Mix-ins that change the color of the dough bring the opportunity for even more -creativity. +creativity by merging the dough before shaping. -Separate the dough before adding a colorful ingredient. Combine the two (or +Proceed and separate your base dough before adding a colorful ingredient. Bulk +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 and bulk rise. - -These can really become works of art. - -% https://www.reddit.com/r/Sourdough/comments/onynqm/sourdough_with_dried_raspberries_recipe_in/ -% https://natashasbaking.com/blueberry-sourdough/ -% https://www.reddit.com/r/Sourdough/comments/mot8vq/chocolate_sourdough_loaf/ -% https://www.reddit.com/r/Sourdough/comments/13sdex9/fairy_bread_for_my_daughters_class_party_with/ -% https://www.reddit.com/r/Sourdough/comments/keyx88/roasted_onion_and_garlic_loaf_this_loaf_didnt/ -% https://myloveofbaking.com/rye-molasses-and-orange-sourdough/ -% https://www.reddit.com/r/Sourdough/comments/qd3y4k/pick_your_player_miso_sesame_or_cranberry_walnut/ -% https://www.reddit.com/r/Sourdough/comments/lziedg/10_spelt_flour_80_hydration_50_buttermilk_50/ -% https://www.reddit.com/r/Sourdough/comments/lbrc4a/squid_ink_sourdough_with_sharp_cheddar_and/ -% https://www.reddit.com/r/Sourdough/comments/na0zed/was_hoping_for_a_more_pronounced_purple_but_i/ -% https://www.reddit.com/r/Sourdough/comments/10rzgif/sesame_and_poppyseed_64_hydration/ -% https://www.reddit.com/r/Sourdough/comments/11lcgvr/sesame_seed_crusted_loaf_w_everything_bagel/ +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, +rye, spelt and einkorn dough into a single dough. The resulting dough was +layered featuring different colors, textures, and flavors.} diff --git a/book/mix-ins/pumpkin-on-flour.jpg b/book/mix-ins/pumpkin-on-flour.jpg new file mode 100644 index 0000000..ea644d1 Binary files /dev/null and b/book/mix-ins/pumpkin-on-flour.jpg differ diff --git a/book/mix-ins/pumpkin-sourdough.jpg b/book/mix-ins/pumpkin-sourdough.jpg new file mode 100644 index 0000000..cc44838 Binary files /dev/null and b/book/mix-ins/pumpkin-sourdough.jpg differ diff --git a/book/mix-ins/seeded-sourdough.jpg b/book/mix-ins/seeded-sourdough.jpg new file mode 100644 index 0000000..c198c24 Binary files /dev/null and b/book/mix-ins/seeded-sourdough.jpg differ diff --git a/book/mix-ins/seeds-bread.jpg b/book/mix-ins/seeds-bread.jpg new file mode 100644 index 0000000..d4886e5 Binary files /dev/null and b/book/mix-ins/seeds-bread.jpg differ diff --git a/book/mix-ins/stollen-close-up.jpg b/book/mix-ins/stollen-close-up.jpg new file mode 100644 index 0000000..b9fef43 Binary files /dev/null and b/book/mix-ins/stollen-close-up.jpg differ diff --git a/book/mix-ins/surface-seeds.jpg b/book/mix-ins/surface-seeds.jpg new file mode 100644 index 0000000..b45ad01 Binary files /dev/null and b/book/mix-ins/surface-seeds.jpg differ diff --git a/book/references.bib b/book/references.bib index 902fed0..2fd10fb 100644 --- a/book/references.bib +++ b/book/references.bib @@ -1,11 +1,11 @@ @article{raffaella+di+cagno, - author = {Di Cagno, Raffaella et al.}, - title = {Proteolysis by sourdough lactic acid bacteria: - effects on wheat flour protein fractions and - gliadin peptides involved in human cereal intolerance}, - journal = {Applied and environmental microbiology}, - publisher = {Dover}, - volume = {68,2} + author = {Di Cagno, Raffaella et al.}, + title = {Proteolysis by sourdough lactic acid bacteria: + effects on wheat flour protein fractions and + gliadin peptides involved in human cereal intolerance}, + journal = {Applied and environmental microbiology}, + publisher = {Dover}, + volume = {68,2} } @misc{too+hot+baking, @@ -16,17 +16,17 @@ note = {Accessed: 2022-03-24} } -@article{rye-defects, - author = {Marie Oest et al.}, - title = {Rye Bread Defects: Analysis of Composition and - Further Influence Factors as Determinants - of Dry-Baking}, - journal = {Applied and environmental microbiology}, - publisher = {Foods}, - howpublished = {\url{https://www.mdpi.com/2304-8158/9/12/1900/pdf}} +@misc{rye-defects, + author = {Marie Oest et al.}, + title = {Rye Bread Defects: Analysis of Composition and + Further Influence Factors as Determinants + of Dry-Baking}, + journal = {Applied and environmental microbiology}, + publisher = {Foods}, + howpublished = {\url{https://www.mdpi.com/2304-8158/9/12/1900/pdf}} } -@article{stiff+starter, +@misc{stiff+starter, title = {Stiff sourdough starter}, author = {Hendrik Kleinwächter}, howpublished = {\url{https://www.youtube.com/watch?v=MqH3GVfjfBc}}, @@ -34,7 +34,7 @@ note = {Accessed: 2022-04-26} } -@article{baking+twice, +@misc{baking+twice, title = {Baking your dough twice to make a sourer bread}, author = {Hendrik Kleinwächter}, howpublished = {\url{https://youtu.be/0v1QhtyUic4}}, @@ -42,7 +42,7 @@ note = {Accessed: 2022-04-28} } -@article{more+active+starter, +@misc{more+active+starter, title = {4 tips to make a more active starter}, author = {Hendrik Kleinwächter}, howpublished = {\url{https://www.youtube.com/watch?v=yYkTrGHNW2w}}, @@ -50,7 +50,7 @@ note = {Accessed: 2022-04-29} } -@article{baking+powder+reduce-acidity, +@misc{baking+powder+reduce-acidity, title = {Use baking powder to reduce dough acidity}, author = {Hendrik Kleinwächter}, howpublished = {\url{https://www.youtube.com/watch?v=c8GId0ByASo}}, @@ -58,7 +58,7 @@ note = {Accessed: 2022-04-29} } -@article{food+safe+ph, +@misc{food+safe+ph, title = {Acidified Foods: Food Safety Considerations for Food Processors}, author = {Felix H. Barron and Angela M. Fraser}, howpublished = {\url{https://www.intechopen.com/chapters/41654}}, @@ -75,7 +75,7 @@ year = {2022} } -@article{liquid+on+starter, +@misc{liquid+on+starter, title = {Acidified Foods: Food Safety Considerations for Food Processors}, author = {Sourdoughhome}, howpublished = {\url{https://www.sourdoughhome.com/what-is-hooch/}}, @@ -83,57 +83,59 @@ note = {Accessed: 2022-04-29} } -@article{acetic+acid+production, +@misc{acetic+acid+production, title = {Acetic Acid (or Ethanoic acid). The main constituent of vinegar.}, author = {chm.bris.ac.uk}, howpublished = {\url{http://www.chm.bris.ac.uk/motm/acetic-acid/acetic-acidjs.htm}}, note = {Accessed: 2022-04-29} } -@article{jordan+bread, - author = {Amaia Arranz-Otaegui et al.}, - title = {Archaeobotanical evidence reveals the origins of bread 14,400 years ago in northeastern Jordan}, - journal = {Proc Natl Acad Sci USA}, - year = {2018}, +@misc{jordan+bread, + author = {Amaia Arranz-Otaegui et al.}, + title = {Archaeobotanical evidence reveals the origins of + bread 14,400 years ago in northeastern Jordan}, + journal = {Proc Natl Acad Sci USA}, + year = {2018}, howpublished = {\url{https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6077754/}} } -@article{fleischmann+history, +@misc{fleischmann+history, author = {Fleischmann History}, title = {History of Fleischmann's}, howpublished = {\url{https://www.fleischmannsyeast.com/our-history/}}, note = {Accessed: 2023-12-04} } -@article{evans+mill, +@misc{evans+mill, author = {Jeremy Norman}, - title = {Oliver Evans Builds the First Automated Flour Mill: Origins of the Integrated and Automated Factory}, + title = {Oliver Evans Builds the First Automated Flour Mill: Origins + of the Integrated and Automated Factory}, howpublished = {\url{https://www.historyofinformation.com/detail.php?entryid=3567}}, note = {Accessed: 2023-12-04} } -@article{first+mixer, +@misc{first+mixer, author = {United States Patent office}, title = {Eastman Mixer for cream, eggs and liquors}, howpublished = {\url{https://patents.google.com/patent/US330829}}, note = {Accessed: 2023-12-04} } -@article{egypt+beer, +@misc{egypt+beer, author = {Smithsonian Magazine}, title = {World’s Oldest Industrial-Scale Brewery Found in Egypt}, howpublished = {\url{https://www.smithsonianmag.com/smart-news/worlds-oldest-industrial-scale-brewery-found-egypt-180977026/}}, note = {Accessed: 2023-12-04} } -@article{kitchenaid+history, +@misc{kitchenaid+history, author = {KitchenAid}, title = {KitchenAid Brand History}, howpublished = {\url{https://www.kitchenaid.com/100year/history.html}}, note = {Accessed: 2023-12-04} } -@article{aboriginal+grinding+stones, +@misc{aboriginal+grinding+stones, author = {First Peoples - State Relations}, title = {Fact sheet: Aboriginal grinding stones}, howpublished = {\url{https://www.firstpeoplesrelations.vic.gov.au/fact-sheet-aboriginal-grinding-stones}}, @@ -193,9 +195,10 @@ } @article{egyptian+bread, - title = {Investigation of ancient Egyptian baking and brewing methods by correlative microscopy}, + title = {Investigation of ancient Egyptian baking + and brewing methods by correlative microscopy}, volume = {273}, - DOI = {10.1126/science.273.5274.488}, + doi = {10.1126/science.273.5274.488}, number = {5274}, journal = {Science}, author = {Samuel, Delwen}, @@ -203,26 +206,26 @@ pages = {488–490} } -@article{vienna+breadrolls, - author = {Eben Norton Horsford}, - title = {Report on Vienna bread}, - year = {1875}, +@misc{vienna+breadrolls, + author = {Eben Norton Horsford}, + title = {Report on Vienna bread}, + year = {1875}, howpublished = {\url{https://archive.org/details/bub_gb_6jRDAAAAIAAJ/page/n100/mode/2up}}, note = {Accessed: 2022-05-02} } -@article{coeliac+disease, - author = {Giovanni Battista Gasbarrini et al.}, - title = {Coeliac disease: an old or a new disease? History of a pathology}, - year = {2014}, - journal = {Intern Emerg Med.}, +@misc{coeliac+disease, + author = {Giovanni Battista Gasbarrini et al.}, + title = {Coeliac disease: an old or a new disease? History of a pathology}, + year = {2014}, + journal = {Intern Emerg Med.}, howpublished = {\url{https://pubmed.ncbi.nlm.nih.gov/24435555/}} } -@article{interview+karl+de+smedt, - author = {Hendrik Kleinwächter}, - title = {Interview with Karl de Smedt}, - year = {2021}, +@misc{interview+karl+de+smedt, + author = {Hendrik Kleinwächter}, + title = {Interview with Karl de Smedt}, + year = {2021}, howpublished = {\url{https://www.youtube.com/watch?v=vfDIfkqBCuk}}, note = {Accessed: 2022-05-06} } @@ -251,7 +254,8 @@ @article{effects+oxygen+yeast+growth, author = {Hiroshi Kuriyama et al.}, - title = {Effects of oxygen supply on yeast growth and metabolism in continuous fermentation}, + title = {Effects of oxygen supply on yeast growth + and metabolism in continuous fermentation}, year = {1993}, journal = {Journal of Fermentation and Bioengineering}, publisher = {Elsevier}, @@ -270,7 +274,8 @@ @article{leaf+surface+sugars+epiphytes, author = {Julien Mercier}, - title = {Role of Leaf Surface Sugars in Colonization of Plants by Bacterial Epiphytes}, + title = {Role of Leaf Surface Sugars in Colonization of + Plants by Bacterial Epiphytes}, year = {2000}, journal = {Applied and Environmental Microbiology}, volume = {66,1} @@ -278,7 +283,8 @@ @article{yeasts+biocontrol+agent, author = {Gianluca Bleve et al.}, - title = {Isolation of epiphytic yeasts with potential for biocontrol of Aspergillus carbonarius and A. niger on grape}, + title = {Isolation of epiphytic yeasts with potential for + biocontrol of Aspergillus carbonarius and A. niger on grape}, year = {2006}, journal = {International Journal of Food Microbiology}, volume = {108,2} @@ -286,13 +292,14 @@ @article{saccharomyces+cerevisiae+pathogen, author = {Sabine Gognies et al.}, - title = {Saccharomyces cerevisiae, a potential pathogen towards grapevine, Vitis vinifera}, + title = {Saccharomyces cerevisiae, a potential pathogen + towards grapevine, Vitis vinifera}, year = {2001}, journal = {FEMS Microbiology Ecology}, volume = {37,2} } -@article{pickled+foods+expiration, +@misc{pickled+foods+expiration, title = {Hardcore hibernation}, author = {David Adam}, howpublished = {\url{https://www.nature.com/articles/news001019-9}}, @@ -300,7 +307,7 @@ note = {Accessed: 2022-06-23} } -@article{old+spores, +@misc{old+spores, title = {Do Pickles Go Bad?}, author = {thrillist.com}, howpublished = {\url{https://www.thrillist.com/eat/nation/do-pickles-go-bad-refrigerator-pickles-shelf-life}}, @@ -308,7 +315,7 @@ note = {Accessed: 2022-06-23} } -@article{mold+anaerobic, +@misc{mold+anaerobic, title = {Differences between Yeasts and Molds}, author = {Sagar Aryal}, howpublished = {\url{https://microbenotes.com/differences-between-yeasts-and-molds/}}, @@ -317,7 +324,8 @@ } @article{effects+temperature+flavor+wine, - title = {Effects of Fermentation Temperature on Key Aroma Compounds and Sensory Properties of Apple Wine}, + title = {Effects of Fermentation Temperature on Key Aroma + Compounds and Sensory Properties of Apple Wine}, author = {Bangzhu Peng et al.}, year = {2015}, journal = {Food science}, @@ -325,7 +333,9 @@ } @article{effects+temperature+flavor, - title = {Analysis of domestic refrigerator temperatures and home storage time distributions for shelf-life studies and food safety risk assessment}, + title = {Analysis of domestic refrigerator temperatures and home + storage time distributions for shelf-life + studies and food safety risk assessment}, author = {Anna Roccato et al.}, year = {2017}, journal = {Food Research}, @@ -333,7 +343,8 @@ } @article{lactobacillus+sanfrancisco, - title = {Lactobacillus sanfrancisco a key sourdough lactic acid bacterium: a review}, + title = {Lactobacillus sanfrancisco a key sourdough + lactic acid bacterium: a review}, author = {M. Gobbetti et al.}, year = {1997}, journal = {Food Microbiology}, @@ -349,7 +360,8 @@ } @article{shelflife+acidity, - title = {The effect of pH on shelf-life of pork during aging and simulated retail display}, + title = {The effect of pH on shelf-life of pork during + aging and simulated retail display}, author = {S F Holmer et al.}, year = {2009}, journal = {Meat Science}, @@ -357,7 +369,8 @@ } @article{temperature+bacteria+corn, - title = {Effect of temperature (5-25°C) on epiphytic lactic acid bacteria populations and fermentation of whole-plant corn silage}, + title = {Effect of temperature (5-25°C) on epiphytic lactic acid + bacteria populations and fermentation of whole-plant corn silage}, author = {Y Zhou et al.}, year = {2016}, journal = {Applied Microbiology and Biotechnology}, @@ -365,7 +378,8 @@ } @article{acetic+acid+oxygen, - title = {Effects of Oxygen Availability on Acetic Acid Tolerance and Intracellular pH in Dekkera bruxellensis}, + title = {Effects of Oxygen Availability on Acetic Acid Tolerance + and Intracellular pH in Dekkera bruxellensis}, author = {Claudia Capusoni et al.}, year = {2016}, journal = {Applied Microbiology and Biotechnology}, @@ -373,14 +387,15 @@ } @article{starch+damage+flour, - title = {A review of milling damaged starch: Generation, measurement, functionality and its effect on starch-based food systems}, + title = {A review of milling damaged starch: Generation, measurement, + functionality and its effect on starch-based food systems}, author = {Qingfa Wang et al.}, year = {2020}, journal = {Food chemistry}, volume = {15,31} } -@article{how+does+gluten+work, +@misc{how+does+gluten+work, title = {Gluten: How Does It Work?}, author = {Modernist Cuisine}, howpublished = {\url{https://modernistcuisine.com/mc/gluten-how-does-it-work/}}, @@ -389,87 +404,105 @@ } -@article{bassinage+technique, +@misc{bassinage+technique, title = {The Bassinage Method}, author = {The Sourdough School}, howpublished = {\url{https://www.sourdough.co.uk/glossary/bassinage/}}, year = {2022}, note = {Accessed: 2022-12-22} -} +} -@article{oxidization+dough, +@misc{oxidization+dough, title = {Enzymes and pH matter, troubleshoot my loaf}, author = {Bread Blog}, howpublished = {\url{https://bread.blog/enzymes-and-ph-matter-troubleshoot-my-loaf/}}, year = {2022}, note = {Accessed: 2022-12-28} -} +} -@article{stretch+and+fold+technique, +@misc{stretch+and+fold+technique, title = {How And When To Stretch And Fold Your Sourdough}, author = {The Bread Code YouTube}, howpublished = {\url{https://www.youtube.com/watch?v=gMbZeUIVzZY}}, year = {2022}, note = {Accessed: 2023-01-06} -} +} @article{rye+pentosans, - author = {Krzysztof Buksa and Anna Nowotna and Werner Praznik and Halina Gambu{\'s} and Rafa{\l} Ziobro and Jan Krawontka}, - journal = {Food Research International}, - keywords = {Rye bread, Wholemeal, Pentosans, Starch}, - number = {8}, - pages = {2045-2051}, - title = {The role of pentosans and starch in baking of wholemeal rye bread}, - url = {https://www.sciencedirect.com/science/article/pii/S0963996910002127}, - volume = {43}, - year = {2010} + author = {Krzysztof Buksa and Anna Nowotna and Werner Praznik + and Halina Gambu{\'s} and Rafa{\l} Ziobro and Jan Krawontka}, + journal = {Food Research International}, + keywords = {Rye bread, Wholemeal, Pentosans, Starch}, + number = {8}, + pages = {2045-2051}, + title = {The role of pentosans and starch in baking of wholemeal rye bread}, + url = {https://www.sciencedirect.com/science/article/pii/S0963996910002127}, + volume = {43}, + year = {2010} } @article{storing+bread, - author = {King Author}, - title = {Storing yeast based bread}, - url = {https://www.kingarthurbaking.com/blog/2020/07/08/the-best-way-to-store-yeast-bread}, - note = {Accessed: 2023-02-03} + author = {King Author}, + title = {Storing yeast based bread}, + url = {https://www.kingarthurbaking.com/blog/2020/07/08/the-best-way-to-store-yeast-bread}, + note = {Accessed: 2023-02-03} } @misc{wheat+kernel, - author = {W. Berghoff}, - title = {A wheat kernel and its nutritional value.}, - url = {https://en.wikipedia.org/wiki/Whole_grain#/media/File:Wheat-kernel_nutrition.svg}, - note = {Accessed: 2023-03-30} + author = {W. Berghoff}, + title = {A wheat kernel and its nutritional value.}, + url = {https://en.wikipedia.org/wiki/Whole_grain#/media/File:Wheat-kernel_nutrition.svg}, + note = {Accessed: 2023-03-30} } @article{enzymatic+activity+whole+wheat, - author = {Rachana Poudel}, - title = {Enzymatic Activities and Compostional Properties of Whole Wheat Flour}, - year = {2018}, - page = {67}, + author = {Rachana Poudel}, + title = {Enzymatic Activities and Compostional Properties of Whole Wheat Flour}, + year = {2018}, + page = {67} } @article{review+of+sourdough+starters, - author = {Calvert MD, Madden AA et al.}, - title = {A review of sourdough starters: ecology, practices, and sensory quality with applications for baking and recommendations for future research}, - year = {2021}, - page = {3}, - url = {https://www.ncbi.nlm.nih.gov/pmc/articles/PMC8117929/#ref-36}, - note = {Accessed: 2023-03-30} + author = {Calvert MD, Madden AA et al.}, + title = {A review of sourdough starters: ecology, practices, and + sensory quality with applications for baking + and recommendations for future research}, + year = {2021}, + page = {3}, + url = {https://www.ncbi.nlm.nih.gov/pmc/articles/PMC8117929/#ref-36}, + note = {Accessed: 2023-03-30} } @article{gluten+development+temperatures, - author = {Koga S., Böcker U. et al.}, - title = {Influence of temperature during grain filling on gluten viscoelastic properties and gluten protein composition.}, - year = {2015}, + author = {Koga S., Böcker U. et al.}, + title = {Influence of temperature during grain filling on gluten + viscoelastic properties and gluten protein composition.}, + year = {2015}, journal = {Journal of the Science of Food and Agriculture}, - number = {96}, - pages = {122-130} + number = {96}, + pages = {122-130} } @article{milling+commercial+home+mill+comparison, - author = {Ross, Andrew S. and Kongraksawech, Teepakorn}, - journal = {Cereal Chemistry}, - number = {2}, - pages = {239-252}, - title = {Characterizing whole-wheat flours produced using a commercial stone mill, laboratory mills, and household single-stream flour mills}, - volume = {95}, - year = {2018} + author = {Ross, Andrew S. and Kongraksawech, Teepakorn}, + journal = {Cereal Chemistry}, + number = {2}, + pages = {239-252}, + title = {Characterizing whole-wheat flours produced using a + commercial stone mill, laboratory mills, and household + single-stream flour mills}, + volume = {95}, + year = {2018} +} + +@article{freezing+toasting+bread, + title = {The impact of freezing and toasting on the + glycaemic response of White Bread}, + volume = {62}, + doi = {10.1038/sj.ejcn.1602746}, + number = {5}, + journal = {European Journal of Clinical Nutrition}, + author = {Burton, P and Lightowler, H J}, + year = {2007}, + pages = {594–599} } diff --git a/book/sourdough-starter/sourdough-starter-types.tex b/book/sourdough-starter/sourdough-starter-types.tex index 835a975..77b013c 100644 --- a/book/sourdough-starter/sourdough-starter-types.tex +++ b/book/sourdough-starter/sourdough-starter-types.tex @@ -70,7 +70,8 @@ before making another dough. Just use a very tiny amount of starter. For \qty{1}{\kg} of flour I~would take around \qty{10}{\gram} of starter (\qty{1}{\percent} in terms of baker's math). If my starter is very young and had just been fed 6 to 8~hours ago I~might -end up going up to \qty{20}{\percent} of starter. Remember that your dough is nothing +end up going up to \qty{20}{\percent} of starter. As mentioned earlier, +remember that your dough is nothing else other than a big starter. It will tremendously help you to figure out your best next steps. @@ -97,8 +98,8 @@ a longer fermentation before most gluten is broken down. The regular sourdough starter is made at a hydration of around \qty{100}{\percent}. This means the starter has equal parts of flour and water. This is the most common and most universal sourdough starter there is. The starter has a good -balance of yeast and bacteria. After a feeding, the volume increases and -increases. After it reaches a certain peak, it will start to collapse again. +balance of yeast and bacteria. After a feeding, the volume of the dough +greatly increases. After it reaches a certain peak, it will start to collapse again. The best way to judge whether the starter is ready is to look at signs such as air pockets on the edges of your container. Also use the nose to evaluate the @@ -278,13 +279,13 @@ production. \label{fig:stollen} \end{figure} -I~then proceeded and bought a cheap low cake flour in my nearby supermarket. +I~then proceeded and bought a cheap low-gluten cake flour in my nearby supermarket. This flour before had caused me massive headaches in the past. I~made a sourdough bread exactly how I~would normally do---I~had to reduce the hydration a bit as a low gluten flour does not soak up as much water. Then I~replaced the starter with the stiff starter. The dough felt amazing and was suddenly able to withstand a much longer fermentation period. The bread had great oven spring and tasted -very mild. I~am still yet to find a proper explanation why the yeast part of +very mild. I~am still yet to find a proper scientific explanation why the yeast part of the dough is more active. Maybe it is not. It could also be that the bacteria is inhibited by the lack of water. @@ -301,8 +302,9 @@ 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} depending on -the ripeness of your starter. In summer I~typically use around +When using a stiff starter, use around \qtyrange{1}{20}{\percent} starter 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 diff --git a/book/sourdough-starter/sourdough-starter.tex b/book/sourdough-starter/sourdough-starter.tex index 0e94527..b67e1de 100644 --- a/book/sourdough-starter/sourdough-starter.tex +++ b/book/sourdough-starter/sourdough-starter.tex @@ -128,9 +128,9 @@ properly hydrated. This step activates the microbial spores in your mixture, drawing them out of hibernation and reviving them. Finally, cover your mixture but make sure the covering is -not airtight. I~like to use a glass and place another -inverted one on top. The container shouldn't be airtight, -you still want some gas exchange to be possible. +not airtight. You still want some gas exchange to be possible. +I~like to use a glass and place another +inverted one on top. \begin{flowchart}[!htb] \begin{center} @@ -147,7 +147,7 @@ on a single leaf of a plant. All of the different yeasts and bacteria are trying to get the upper hand in this battle. Other pathogens such as mold are also being activated as we added water. Only the strongest -most adaptable microorganisms will survive. +most adaptable microorganisms will survive. By adding water to the flour the starches start to degrade. The seedling tries to @@ -302,7 +302,7 @@ flour\footnote{Whether this is working, I~can't scientifically say. Typically the microbes that have once taken place are very strong and won't allow other microbes to enter. My starter has initially been made with rye flour. So chances are that the majority of -my microorganisms are from a rye source.}. +my microorganisms are from a rye source.}. Your nose is also a great tool to determine starter readiness. Depending on diff --git a/book/sourdough.sty b/book/sourdough.sty index 743d0c9..f4bf38d 100644 --- a/book/sourdough.sty +++ b/book/sourdough.sty @@ -10,13 +10,12 @@ \usepackage[mode=match, reset-text-family=false]{siunitx} \usepackage{fontspec} \usepackage{calc} -\usepackage{enumitem} \usepackage[font={sffamily, sbseries}]{quoting} -\usepackage{enumitem} \usepackage{microtype} % style=nextline breaks on make4ht \ifdefined\HCode\else +\usepackage{enumitem} \setlist[description]{style=nextline, leftmargin=0cm} \fi @@ -106,6 +105,7 @@ {wheat-sourdough/} {wheat-sourdough/shaping/} {non-wheat-sourdough/} + {mix-ins/} } % Caption and figure size below images diff --git a/book/storing-bread/storing-bread.tex b/book/storing-bread/storing-bread.tex index 186f0e5..30702aa 100644 --- a/book/storing-bread/storing-bread.tex +++ b/book/storing-bread/storing-bread.tex @@ -116,3 +116,9 @@ that you like. This option is great for very long-term storage. Personally I~like having a few slices of bread frozen as an emergency backup when I~have had no time to bake. + +A 2008 study hints that there might be some health +benefits to freezing and toasting your bread. By doing so +the starch molecules could become more resistant to digestion +and thus lower your body's blood sugar +response by almost 40\%~\cite{freezing+toasting+bread}. \ No newline at end of file diff --git a/book/style.css b/book/style.css index d1c81d0..71665b2 100644 --- a/book/style.css +++ b/book/style.css @@ -6,11 +6,15 @@ --fw-bold: 800; --f-lh: 28px; --c-black: #282828; + --c-black-background: #1c1819; --fs-xxxl: 32px; --fs-xxl: 26px; --fs-xl: 24px; --fs-l: 22px; --fs-m: 16px; + --padding-hamburger: 5px; + --c-beige: #F3EDE6; + --border-radius: 7px; } @media (min-width: 1200px){ @@ -37,6 +41,7 @@ body{ font-family: var(--ff-sans); font-weight: var(--fw-regular); font-size: var(--fs-m); + color: var(--c-black); } @media screen and (min-width: 57rem) { @@ -59,7 +64,6 @@ body{ /* ****************** */ main.main-content,main.titlepage,div.footnotes{ - padding:1rem; } .permalink { @@ -143,9 +147,7 @@ nav.TOC a, nav.TOC a:visited{ body{ - background-color:#F8F8F8; - background: url("bg.jpg") center center no-repeat; - background-size: cover; + background-color: var(--c-beige); } a { @@ -175,6 +177,7 @@ figure.texsource, figure.shellcommand, figure.htmlsource, figure.luasource, figu .main-content { line-height: var(--f-lh); + margin-left: 30px; } div.footnotes { @@ -230,6 +233,7 @@ figcaption.caption { list-style: none; margin: 0; padding: 0; + width: 300px; } .menu-items .chapterToc, .menu-items .likechapterToc { @@ -240,6 +244,14 @@ figcaption.caption { text-decoration: none; } +.home-link { + display: block; +} + +.home-title { + display: block; +} + @media (max-width: 768px) { .toggle-menu-label { display: block; @@ -249,7 +261,8 @@ figcaption.caption { .hamb{ cursor: pointer; - padding: 5px; + padding: var(--padding-hamburger); + margin-right: calc(var(--padding-hamburger) * -1); display: flex; align-items: center; align-content: center; @@ -284,7 +297,7 @@ figcaption.caption { .menu { background: var(--c-black); display: flex; - padding: 10px 0px; + padding: 10px 1rem; position: relative; align-items: center; justify-content: space-between; @@ -303,13 +316,16 @@ figcaption.caption { color: #000; font-size: 20px; font-weight: bold; - padding-left: 17px; } .chapterToc a, .sectionToc a, .subsectionToc a, .likechapterToc a { padding-left: 17px; } + .menu-items .chapterToc.home-link { + display: none; + } + .home-title { display: none; } @@ -320,7 +336,7 @@ div.center { margin-right: 0 !important; } -main.titlepage h2.chapterHead { +main.main-content h2.chapterHead, main.main-content h2.likechapterHead { margin-top: 0px; } @@ -368,3 +384,205 @@ h4 { max-width: 100%; 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); +} + +.main-content { + flex: 1; +} + +.wrapper { + width: 100%; + display: flex; + flex-direction: column; + align-items: center; +} + +.header { + background-color: var(--c-black-background); + width: 100%; + height: 340px; + display: flex; + align-content: center; + justify-content: center; + align-items: center; + margin-bottom: 40px; +} + +.header img { + border-radius: 0px; + border: none; + width: 710px; +} + +body { + display: block; +} + +.book-content { + display: flex; + padding: 0px 40px; + max-width: 1200px; +} + +.TOC.menu { + width: 330px; +} + +.main-content { + width: 100%; + margin-bottom: 40px; +} + +nav.TOC, nav.TOC a, nav.TOC a:visited { + background-color: transparent; + color: var(--c-black); +} + +.menu-group { + display: flex; + flex-direction: column; + align-items: center; +} + +.menu-inner { + border: 2px solid var(--c-black); + border-radius: var(--border-radius); + width: 100%; +} + +.menu-entry { + padding: 1px; + border-radius: var(--border-radius); +} + +.menu-arrow { + width: 14px; + border: none; + border-radius: 0px; +} + +nav.TOC span:hover, nav.TOC span:hover *, nav.TOC span.chapterToc.selected, nav.TOC span.chapterToc.selected a { + background-color: transparent; +} + +.menu-entry:hover { + background-color: #c8c8c8; +} + +p.flowchart-image-wrapper { + background: white; + padding: 20px; +} + +.menu-items .menu-group:last-of-type .menu-arrow { + display: none; +} + +blockquote { + margin-left: 0px; + margin-right: 0px; +} + +.crosslinks-bottom { + margin-top: 1em; +} + +.crosslinks-bottom a { + display: inline-block; + border-radius: var(--border-radius); + border: 2px solid var(--c-black); + color: var(--c-black); + padding: 4px; + font-weight: bold; + text-decoration: none; +} +.crosslinks-bottom a.prev { + margin-right: 7px; +} + +.crosslinks-bottom a:hover { + color: #444; +} + +.menu-group.selected .menu-inner { + background-color: #c8c8c8; +} + +.TOC.menu { + margin-bottom: 40px; +} + +.mobile-banner { + display: none; +} + +@media (max-width: 768px) { + .header { + display: none; + } + + .book-content { + padding: 0px; + display: flex; + width: 100%; + flex-direction: column; + } + + .main-content { + width: 100%; + margin-left: 0px; + box-sizing: border-box; + padding: 0px 14px; + margin-top: 20px; + max-width: 100%; + } + + .TOC.menu { + width: 100%; + max-width: 100%; + background: var(--c-black-background); + box-sizing: border-box; + } + + nav.TOC, nav.TOC a, nav.TOC a:visited { + color: #fff; + } + .menu-arrow { + display: none; + } + + .menu-inner { + border: none; + border-radius: 0px; + } + + .menu-group.selected .menu-inner { + background: var(--c-black-background); + } + + p.flowchart-image-wrapper { + padding: 5px; + } + + .menu-entry:hover { + background-color: transparent; + } + + .TOC.menu { + margin-bottom: 0px; + } + + .mobile-banner { + display: block; + background-color: var(--c-black-background); + padding: 5px; + } +} diff --git a/book/tables/table-flour-types.tex b/book/tables/table-flour-types.tex index dcf35a0..b838880 100644 --- a/book/tables/table-flour-types.tex +++ b/book/tables/table-flour-types.tex @@ -1,9 +1,10 @@ \begin{tabular}{@{}llrrr@{}} \toprule \textbf{USA} & \textbf{UK} & {\textbf{Germany}} & {\textbf{France}} & {\textbf{Italy}} \\ \midrule -Cake & Soft flour & T405 & T45 & 00 \\ -All purpose & Plain flour & T550 & T55 & 0 \\ - & & T812 & T80 & 1 \\ - & & T1050 & T110 & 2 \\ -Whole & Whole & Vollkorn & T150 & Integrale \\ \bottomrule +Cake & Soft flour & T405 & T45 & 00 \\ +All purpose & Plain flour & T550 & T55 & 0 \\ +Bread flour & Bread flour & T405 or T550 & T45 or T55 & 00 or 0 \\ + & & T812 & T80 & 1 \\ + & & T1050 & T110 & 2 \\ +Whole & Whole & Vollkorn & T150 & Integrale \\ \bottomrule \end{tabular} diff --git a/book/tables/table-storing-bread-overview.tex b/book/tables/table-storing-bread-overview.tex index 3dd2c4a..458604c 100644 --- a/book/tables/table-storing-bread-overview.tex +++ b/book/tables/table-storing-bread-overview.tex @@ -3,17 +3,17 @@ \toprule \textbf{Method} & \textbf{Advantages} & \textbf{Disadvantages} \\ \midrule -Room temperature & The easiest option. Best for bread that is eaten within a day. - Crust typically stays crisp when humidity not too high. - & Bread dries out very quickly.\\ +Room temperature & The easiest option. Best for bread that is eaten within a day. + Crust typically stays crisp when humidity not too high. + & Bread dries out very quickly.\\ -Room temperature in container & Good for up to a week. Catches mold more quickly. - & Bread needs to be toasted for crust to become crisp again.\\ +Room temperature in airtight container & Good for up to a week. + & Bread needs to be toasted for crust to become crisp again. Catches mold more quickly\\ -Fridge & Bread stays good for weeks. Can dry out a little bit when not using air-tight container. - & Bread needs to be toasted. Requires fridge and energy.\\ +Fridge & Bread stays good for weeks. Can dry out a little bit when not using air-tight container. + & Bread needs to be toasted. Requires fridge and energy.\\ -Freezer & Bread stays good for years. - & Requires thawing and then toasting. Requires freezer and energy.\\ +Freezer & Bread stays good for years. + & Requires thawing and then toasting. Requires freezer and energy.\\ \bottomrule \end{tabular} diff --git a/book/troubleshooting/crumb-structures.tex b/book/troubleshooting/crumb-structures.tex index 988eda1..8fad248 100644 --- a/book/troubleshooting/crumb-structures.tex +++ b/book/troubleshooting/crumb-structures.tex @@ -111,7 +111,7 @@ I~would use a lot of rice flour in my banneton to dry out the surface of the dou This way the dough wouldn't stick, despite being overfermented. However as it turns out the stickiness issue has been my lack of understanding the fermentation process. Now I~never use rice flour, except when trying to apply decorative scorings. -Properly managing fermentation results in a dough that is not sticky. +Managing properly fermentation results in a dough that is not sticky. If you are noticing, during a stretch and fold or during shaping, that your dough is suddenly overly sticky, then the best option is to use a loaf pan. Simply take @@ -139,7 +139,7 @@ dough with less bacterial activity. A better yeast activity also will result in less acidity in your final bread. If you are a chaser of a very strong tangy flavor profile, then a stronger flour with more gluten will help. -When retarding sourdough (cold proofing in the refrigerator), temperature plays a +When retarding sourdough (cold-proofing in the refrigerator), temperature plays a pivotal role in fermentation rates. As the dough chills in the refrigerator, fermentation decelerates. Starting the retarding process at a warmer temperature means this deceleration takes longer. @@ -318,8 +318,8 @@ can heat up the surface of your dough faster. I~tested this by putting an apple a Dutch oven and measuring its surface temperature using a barbecue thermometer. I~then changed the steaming methods to plot how quickly the temperature close to the surface changes. I~tested an ice cube inside of a preheated -Dutch oven, a preheated Dutch oven, a preheated Dutch oven with spritzes -of water on the apple's surface, a non-preheated Dutch oven where I~would only preheat +Dutch oven, a plain preheated Dutch oven, a preheated Dutch oven with spritzes +of water on the apple's surface and a non-preheated Dutch oven where I~would only preheat the bottom part. The experiment then showed that the ice-cube method would heat up the surface of the apple a lot quicker. When replicating this with a bread dough, I~would achieve less oven spring. diff --git a/book/troubleshooting/misc.tex b/book/troubleshooting/misc.tex index 6578cf5..f1664bd 100644 --- a/book/troubleshooting/misc.tex +++ b/book/troubleshooting/misc.tex @@ -117,7 +117,7 @@ acid-producing bacteria. So it is recommended to keep a backup of your original starter. A downside to the liquid starter is the overall -enhanced bacterial activity. This means the baked bread +enhanced bacterial activity compared to yeast activity. This means the baked bread will have more acidity (but milder). The dough will degrade faster during fermentation. For this reason, you will need to use strong high-gluten flour when using @@ -345,6 +345,17 @@ made with such a starter. The flavor when taking a bite is incredible. It nicely plays with soups as well. Just take a bit of this bread and dip it in your soup. +\subsection{Why does my starter not float after using the float test?} +The float test may not reliably determine your starter's readiness for dough +inoculation. While it's effective for wheat-based doughs, where ample gas gets +trapped in the gluten matrix, it's less reliable for non-wheat doughs. In non- +wheat doughs, the gas generated during fermentation tends to escape, causing +the starter to likely sink. + +For more accurate assessments of your starter's readiness, watch for bubbles +at the container's edge and consider its aroma. A mature starter should emit a +mildly sour scent without being overly pungent. + \section{Dough} \subsection{Should I~autolyse my dough?} @@ -450,8 +461,8 @@ Please also note that you can only make bread with great oven spring when making wheat based doughs. When starting with this hobby I~always wondered why my rye breads would turn out so flat. Yes, rye has gluten, but -small particles called \emph{hemicelluloses} (arabinoxylan and beta-glucan)~\cite{rye-defects}. -prevent the dough from developing a gluten network it can +small particles called \emph{pentosans} (arabinoxylan and beta-glucan)~\cite{rye-defects}. +They prevent the dough from developing a gluten network it can with wheat. Your efforts will be in vain, and your dough will stay flat. Only spelt- and wheat-based doughs have the capability of retaining the \ch{CO2} created by the fermentation. diff --git a/book/wheat-sourdough/wheat-sourdough.tex b/book/wheat-sourdough/wheat-sourdough.tex index cdfd7f4..b9a9886 100644 --- a/book/wheat-sourdough/wheat-sourdough.tex +++ b/book/wheat-sourdough/wheat-sourdough.tex @@ -19,8 +19,8 @@ and technique than other types of bread. You have to perfectly balance the fermentation process. You cannot ferment for too short and also not for too long. The techniques you need to learn also require a bit more skill. It took me several attempts -to get this right. One of the challenges I~faced was that -I~had the wrong flour. I~didn't properly know how to use my oven. +to get this right. I faced several challenges: I~had the wrong flour. +I~didn't properly know how to use my oven. When should I~stop the fermentation? There is a lot of information out there. I~dug through most of it and have tried almost everything. In many cases the information was wrong; in other cases, I~found another @@ -210,7 +210,7 @@ Find below an example recipe for 1 loaf including baker's math calculation: \item \qty{400}{\gram} of bread flour \item \qty{100}{\gram} of whole-wheat flour % Manual unit so we can use emphasis - \item \emph{500~g of flour in total} + \item \emph{Total: 500~g of flour} \item \qtyrange{300}{450}{\gram} of room temperature water (\qty{60}{\percent} up to \qty{90}{\percent}). More on this topic in the next chapter. \item \qty{50}{\gram} of stiff sourdough starter (\qty{10}{\percent}) @@ -222,10 +222,10 @@ how much flour you have. Let's say you have \qty{2000}{\gram} of flour available recipe would look like this: \begin{itemize} - \item \qty{1800}{\gram} of bread flour - \item \qty{200}{\gram} of whole-wheat flour + \item \qty{1600}{\gram} of bread flour + \item \qty{400}{\gram} of whole-wheat flour % Manual unit so we can use emphasis again - \item \emph{2000 g of flour}, equaling 4 loaves + \item \emph{Total: 2000~g of flour}, equaling 4 loaves \item \qty{1200}{\gram} up to \qty{1800}{\gram} of room temperature water (60 to \qty{90}{\percent}) \item \qty{200}{\gram} of stiff sourdough starter (\qty{10}{\percent}) \item \qty{40}{\gram} of salt (\qty{2}{\percent}) @@ -247,7 +247,7 @@ When a seed gets into contact initially, the outer layers soak up the water. That's why when using whole-wheat (still containing these layers) you have to use a little bit more water. -By forming gluten strands, water is absorbed into your dough. The higher the +By forming gluten strands, water is absorbed into your dough's gluten matrix. The higher the protein value, the more water can be used. Some bakers like to use highly hydrated doughs to create fluffier @@ -334,7 +334,7 @@ and not fluffy crumb. That is because only very little gluten is broken down whe finishing the fermentation period in 1~hour. If you were to slow things down, the dough would look completely different. Try this again and use much less yeast. This is the -secret of Neapolitan Pizza. Only a tiny bit of yeast is used to make the +secret of Neapolitan pizza. Only a tiny bit of yeast is used to make the dough. My default pizza recipe calls for around \qty{150}{\mg} of dry yeast per \unit{\kg} of flour. Give it a shot yourself the next time you make a yeast-based dough. Try to push the fermentation to at least 8~hours. @@ -409,7 +409,7 @@ 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 more food available. This can be compared to wine making where -the yeast ultimately dies as ethanol levels increase. The ethanol creates an +the yeast ultimately sporulates and dies as ethanol levels increase. The ethanol creates an environment that makes it impossible for other microorganisms to join the feast. The same thing happens with the acidity created by the bacteria. The high acidity slows the fermentation process and @@ -445,12 +445,13 @@ I~use around \qty{5}{\percent} of sourdough starter in summer times kitchen). In winter times I~opt for around \qty{10}{\percent} up to \qty{20}{\percent} sourdough starter (kitchen temperature around \qty{20}{\degreeCelsius} (\qty{68}{\degF})). This -allows me to use a sourdough starter that's not in perfect condition. Your +allows me to use a sourdough starter that's not in perfect condition. As +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). -Making dough becomes very simple. +This greatly simplifies the whole process. \section{Autolysis}% \label{section:autolysis} @@ -477,7 +478,7 @@ dough will start to taste sweeter and sweeter. The protease and amylase enzymes are doing their job. The same process is used when making oat milk. By letting the mixture sit for some time, enzymes work on the oats. The taste is perceived as sweeter and more appreciated. This process is further accelerated the more -whole-wheat your flour is. The hull contains more enzymes. The gluten network +whole-grain your flour is. The hull contains more enzymes. The gluten network will ultimately tear, and your dough flattens out. For wheat sourdough, this is your worst enemy. When this happens, your dough will become leaky and release all that precious gas created during the fermentation. You need to find the @@ -652,12 +653,16 @@ the sign of a not well enough developed gluten network. \label{fig:dough-touch-points} \end{figure} -Kneading more is great in almost all cases. You'll have a stronger -gluten network. Unless you are making soft milk breads, you -might want to have a more extensible dough, to begin with. For every -other type of wheat-based dough, kneading is helpful. When you use -a stand mixer, you can run into the issue of kneading too much. This -is almost impossible though. Even after kneading for 30~minutes on medium +Kneading more is generally beneficial in almost all cases, as it results in a +stronger gluten network. However, when making soft milk breads, you might prefer +a more extensible dough from the start. In this scenario, excessive kneading +could lead to a chewier final bread, which is not desirable if you aim for a +fluffier texture. Achieving this fluffier dough can be accomplished by kneading +less. While this is an exception, properly kneading your wheat-based doughs +is generally advised. + +When you use a stand mixer, you can run into the issue of kneading too much. This +is almost impossible in practice though. Even after kneading for 30~minutes on medium speed, my doughs hardly ever were over-kneaded. The moment you knead too much, the color of the dough can begin to change. You mostly notice this, though, during baking. The resulting loaf looks very @@ -1071,7 +1076,8 @@ so, you will be gluing together the two sticky bottom sides. The top smooth side not be sticky in your hands, while the bottom rough surface should tend to stick to your hands. Rotate the container and repeat the same thing from the other side. Rotate the container 90° -clockwise and then repeat the process once again. Rotate the container another 180° clockwise +and then repeat the process once again. Rotate the container another 180° in +the same direction and repeat the fold one last time. By doing so you have applied 4 folds in total. Your dough should now stay in place and resist flowing outwards\footnote{Please also refer to~\cite{stretch+and+fold+technique} for a video showing you how to @@ -1150,7 +1156,7 @@ Now that you have cut your dough, the resulting chunks are not in an equal shape This is problematic for the next stage when you are shaping your dough. The resulting loaves wouldn't look nice and even. You would probably end up with areas that tear the moment you are shaping your dough. -You wouldn't start the whole process on a good foundation. For that +You wouldn't start the whole proofing process on a good foundation. For that reason, you need to pre-shape your dough. Pre-shaping is done for several reasons: @@ -1446,7 +1452,7 @@ There are two proofing techniques. One strategy is to proof the dough at room temperature whereas the other proofs the dough in the fridge. Fridge-proofing is also commonly known as retarding. -Some bakers claim that cold proofing improves the final flavor of the bread. +Some bakers claim that cold-proofing improves the final flavor of the bread. In all the loaves that I~retarded I~could not tell a difference in terms of flavor for cold-proofed doughs. The microorganisms work at a slower rate at colder temperatures. But I~doubt that they alter @@ -1463,7 +1469,7 @@ of retarding and flavor development. \end{center} \end{flowchart} -To me, the sole purpose of cold proofing is its ability to allow you +To me, the sole purpose of cold-proofing is its ability to allow you to better manage the timing of the whole process. Assuming you finished shaping your dough at 10 pm, chances are you wouldn't want to wait for another 2~hours to proof the dough and then another 1 hour to bake it. In this case, @@ -1481,13 +1487,13 @@ dough is big. It can be as little as 6~hours later up to 24~hours later. Assuming you made an overnight dough and your dough is ready in the morning, the situation might be different. You potentially want to bake the dough directly for breakfast, or at lunchtime. In this case, you wouldn't want to proof the dough for -another 6~hours in the fridge. Room temperature proofing is your technique +another 6~hours in the fridge. Room temperature-proofing is your technique of choice. To summarize, choose the technique that works for you depending on your schedule and availability. -\subsection{Room temperature proofing} +\subsection{Room temperature-proofing} The easiest and most reliable way to proof your dough is to proof the dough at room temperature. It is my method of choice if my schedule allows it. This method @@ -1527,7 +1533,7 @@ over-proofed dough when the dough suddenly becomes very sticky. At the same time, the dough is likely to collapse during baking and will not spring back. Generally, it is better to end proofing too early rather than too late. -\subsection{Cold proofing (retarding)} +\subsection{Cold-proofing (retarding)} The second proofing option is to place your dough inside the fridge for proofing. This option is great if you do not want to bake the dough @@ -1566,7 +1572,7 @@ 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 -your perfect pH level you can resort to that value on all following +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. @@ -1667,11 +1673,11 @@ until you are happy with your technique. After proofing, you only have a single chance to practice scoring. It's either hit or miss. An additional trick that can help you to combine the benefits -of room temperature proofing and easy cold proofing scoring +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 surface even further and make -scoring easier. +freezer. The freezer will dry out the doughs'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. The hot air will dry out the dough's surface even further and simplify diff --git a/makefile b/makefile index bf393ec..113f326 100644 --- a/makefile +++ b/makefile @@ -1,7 +1,7 @@ .DEFAULT_GOAL := build_pdf DOCKER_IMAGE := ghcr.io/hendricius/the-sourdough-framework -DOCKER_CMD := docker run -it -v $(PWD):/opt/repo --platform linux/x86_64 $(DOCKER_IMAGE) /bin/bash -c +DOCKER_CMD := docker run --rm -it -v $(PWD):/opt/repo --platform linux/x86_64 $(DOCKER_IMAGE) /bin/bash -c .PHONY: bake build_pdf build_docker_image push_docker_image validate website .PHONY: print_os_version start_shell printvars show_tools_version mrproper diff --git a/website/Gemfile.lock b/website/Gemfile.lock index 527e36e..3816671 100644 --- a/website/Gemfile.lock +++ b/website/Gemfile.lock @@ -5,6 +5,8 @@ GEM method_source (1.0.0) nokogiri (1.15.3-arm64-darwin) racc (~> 1.4) + nokogiri (1.15.3-x86_64-darwin) + racc (~> 1.4) nokogiri (1.15.3-x86_64-linux) racc (~> 1.4) pry (0.14.2) @@ -14,6 +16,7 @@ GEM PLATFORMS arm64-darwin-22 + x86_64-darwin-22 x86_64-linux DEPENDENCIES diff --git a/website/assets/arrow.png b/website/assets/arrow.png new file mode 100644 index 0000000..f816223 Binary files /dev/null and b/website/assets/arrow.png differ diff --git a/website/assets/banner.png b/website/assets/banner.png new file mode 100644 index 0000000..86c8eec Binary files /dev/null and b/website/assets/banner.png differ diff --git a/website/assets/bg.jpg b/website/assets/bg.jpg deleted file mode 100644 index 2c79686..0000000 Binary files a/website/assets/bg.jpg and /dev/null differ diff --git a/website/assets/og_image_mixins.png b/website/assets/og_image_mixins.png new file mode 100644 index 0000000..31be0a1 Binary files /dev/null and b/website/assets/og_image_mixins.png differ diff --git a/website/modify_build.rb b/website/modify_build.rb index c2fe620..8a7e08c 100644 --- a/website/modify_build.rb +++ b/website/modify_build.rb @@ -52,18 +52,27 @@ class ModifyBuild text = fix_titles(text) text = fix_menu(text) text = fix_cover_page(text) if is_cover_page?(filename) + text = add_header_banner(text) text = add_home_link_to_menu(text) text = fix_anchor_hyperlinks_menu(text) text = add_favicon(text) text = add_meta_tags(text, filename) text = remove_section_table_of_contents(text) - text = mark_menu_as_selected_if_on_page(text, extract_file_from_path(filename)) text = add_canonical_for_duplicates(text, extract_file_from_path(filename)) text = include_javascript(text) text = add_text_to_coverpage(text, extract_file_from_path(filename)) text = fix_js_dependency_link(text) text = fix_list_of_tables_figures_duplicates(text) text = add_anchors_to_headers(text) + text = create_menu_groups(text) + text = fix_top_links(text) + text = fix_flowchart_background(text) + text = remove_empty_menu_links(text) + text = fix_bottom_cross_links(text) + text = insert_mobile_header_graphic(text) + text = fix_https_links(text) + text = add_anchors_to_glossary_items(text) if is_glossary_page?(filename) + text = mark_menu_as_selected_if_on_page(text, extract_file_from_path(filename)) text = fix_menus_list_figures_tables(text) if is_list_figures_tables?(filename) text = fix_list_of_figures_tables_display(text) if is_list_figures_tables?(filename) File.open(filename, "w:UTF-8") {|file| file.puts text } @@ -75,6 +84,10 @@ class ModifyBuild end end + def is_glossary_page?(filename) + filename.include?("Glossary.html") + end + def is_list_figures_tables?(filename) ["listfigurename.html", "listtablename.html", "listoflocname.html", "bibname.html"].any? do |name| filename.include?(name) @@ -146,6 +159,45 @@ class ModifyBuild doc.to_html end + def create_menu_groups(text) + doc = build_doc(text) + groups = build_groups(doc.css(".menu-items > span")) + menu_el = doc.css(".menu-items")[0] + html = "" + groups.each do |group| + out = "" + group.each do |g| + if g.to_html.length > 0 + out += %Q{
#{g.to_html}
} + end + end + html += %Q{} + end + menu_el.inner_html = html + doc.to_html + end + + def build_groups(menu_items) + final_groups = [] + tmp_groups = [] + menu_items.each_with_index do |el, index| + # Get next item and check if it is a lower entry level in the menu. + next_item = menu_items[index + 1] + if next_item && next_item["class"].include?("chapterToc") || next_item.nil? + final_groups.push(tmp_groups.push(el)) + tmp_groups = [] + else + tmp_groups.push(el) + end + end + final_groups + end + # By default the titles look boring. This changes the titles of all the # pages and adds the book name as appendix def fix_titles(text) @@ -231,7 +283,7 @@ class ModifyBuild content = doc.css("body > .main-content")[0] menu = doc.css("body > nav")[0] content = %Q{ -
+

#{version}

@@ -251,7 +303,7 @@ class ModifyBuild menu = doc.css(".menu-items")[0] return text if menu.nil? - home_html = %Q{
Home} + home_html = %Q{🍞 The Sourdough Framework} # Normally the flowcharts link should be automatically added, but there # seems to be a problem in the generation. See: # https://github.com/hendricius/the-sourdough-framework/pull/188 for more @@ -262,12 +314,12 @@ class ModifyBuild List of Flowcharts - + List of Tables - + List of Figures @@ -278,9 +330,15 @@ class ModifyBuild - - ⭐️ - Donate + + ⬇️ + Book .PDF + + + + + ⬇️ + Book .EPUB @@ -289,11 +347,55 @@ class ModifyBuild Hardcover Book + + + ⚙️ + Source code + + + + + ⭐️ + Support me + + } menu.inner_html = "#{home_html} #{menu.inner_html} #{appendix_html}" doc.to_html end + # Adds a header banner to each page + def add_header_banner(text) + doc = build_doc(text) + body = doc.css("body")[0] + footnotes = doc.css(".footnotes")[0] + main = doc.css(".main-content")[0] + menu = doc.css(".menu")[0] + if main.nil? || menu.nil? + #raise ArgumentError.new("Don't know how to handle") + return doc.to_html + end + body.inner_html = %Q{ +
+ #{build_header_html} +
+ #{menu.to_html} +
+ #{main.inner_html} + #{footnotes ? footnotes.to_html : ''} +
+
+
+ } + return doc.to_html + end + + def build_header_html + %Q{ +
+ } + end + # Some of the menu links are added in the wrong order. Remove them since we # later on add them in the structure that we want. def remove_duplicate_entries_menu(text) @@ -411,13 +513,14 @@ class ModifyBuild "Sourdoughstartertypes.html" => "og_image_sourdough_starter_types.png", "Storingbread.html" => "og_image_storing_bread.png", "Thehistoryofsourdough.html" => "og_image_the_history_of_sourdough.png", - "Wheatsourdough.html" => "og_image_troubleshooting.png", + "Wheatsourdough.html" => "og_image_wheat_sourdough.png", + "Troubleshooting.html" => "og_image_troubleshooting.png", + "Mixins.html" => "og_image_mixins.png", } end def mark_menu_as_selected_if_on_page(text, filename) doc = build_doc(text) - return doc.to_html selected = doc.css(".menu-items .chapterToc > a").find do |el| el["href"] == "" @@ -432,7 +535,17 @@ class ModifyBuild # Special case for the flowcharts page which is added by us to the menu. # This needs to be done for future manually added pages too if "listoflocname.html" == filename - doc.css(".menu-items .chapterToc.flowcharts-menu")[0].add_class("selected") + doc.css(".menu-items .chapterToc.flowcharts-menu")[0].ancestors(".menu-group")[0].add_class("selected") + return doc.to_html + end + + if "listtablename.html" == filename + doc.css(".menu-items .chapterToc.listtables-menu")[0].ancestors(".menu-group")[0].add_class("selected") + return doc.to_html + end + + if "listfigurename.html" == filename + doc.css(".menu-items .chapterToc.listfigures-menu")[0].ancestors(".menu-group")[0].add_class("selected") return doc.to_html end @@ -441,7 +554,7 @@ class ModifyBuild # Fix that when the menu is selected the href is empty. This way users can # click the menu and the page will reload. selected["href"] = filename - selected.parent.add_class("selected") + selected.ancestors(".menu-group")[0].add_class("selected") doc.to_html end @@ -472,14 +585,28 @@ class ModifyBuild def add_text_to_coverpage(text, filename) return text unless is_cover_page?(filename) doc = build_doc(text) - content = doc.css(".titlepage")[0] - raise ArgumentError.new(".titlepage not found in HTML") if content.nil? - - content.add_class("main-content") + content = doc.css(".main-content")[0] content.inner_html = "#{build_cover_page_content} #{content.inner_html}" doc.to_html end + def add_anchors_to_glossary_items(text) + doc = build_doc(text) + content = doc.css("dt.description") + content.each do |el| + term = el.css("span")[0] + item_name = term&.text + # No anchor for whatever reason + next unless item_name + + anchor = item_name.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '') + copy_link = %Q{} + el.set_attribute("id", "term-#{anchor}") + term.inner_html = "#{term.inner_html}#{copy_link}" + end + doc.to_html + end + def build_cover_page_content %Q{

@@ -586,13 +713,10 @@ class ModifyBuild # this. def fix_menus_list_figures_tables(text) doc = build_doc(text) - content = doc.css(".menu-items > .subsectionToc, .menu-items > .sectionToc") + content = doc.css(".menu-group .subsectionToc, .menu-group .sectionToc") content.each do |node| - node.remove + node.ancestors(".menu-entry")[0].remove end - doc.css(".menu-items > .lotToc").each(&:remove) - doc.css(".menu-items > .lofToc").each(&:remove) - doc.css(".menu-items > br").each(&:remove) doc.to_html end @@ -626,6 +750,69 @@ class ModifyBuild end doc.to_html end + + # For some reason some of the links are broken in the conversion process. + # They have https:/www and are missing a slash. + def fix_https_links(text) + text.gsub(/https:\/(?!\/)/, 'https://') + end + + def fix_top_links(text) + doc = build_doc(text) + el = doc.css(".crosslinks-top")[0] + el.remove if el + doc.to_html + end + + def remove_empty_menu_links(text) + doc = build_doc(text) + menus = doc.css(".menu-group") + menus.each do |m| + element = m.css("span.chapterToc")[0] + next unless element + if element.inner_html == "" || element.inner_html == " " + m.remove + end + end + doc.to_html + end + + def insert_mobile_header_graphic(text) + doc = build_doc(text) + content = doc.css(".TOC.menu")[0] + content.after('
') + doc.to_html + end + + def fix_flowchart_background(text) + doc = build_doc(text) + images = doc.css("img") + images.each do |img| + src = img.attr("src") + is_flowchart = src.include?(".svg") + next unless is_flowchart + img.parent.add_class("flowchart-image-wrapper") + + end + doc.to_html + end + + def fix_bottom_cross_links(text) + doc = build_doc(text) + link_cont = doc.css(".crosslinks-bottom")[0] + return doc.to_html unless link_cont + + links = doc.css(".crosslinks-bottom a") + prev_link = links.find {|l| l.inner_html == "prev" } + next_link = links.find {|l| l.inner_html == "next" } + prev_html = prev_link ? "" : '' + next_html = next_link ? "" : '' + link_cont.inner_html = %Q{ + #{prev_html} + #{next_html} + } + doc.to_html + end end ModifyBuild.build