Compare commits
207 Commits
Last_MIT
...
clarify-ba
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4160557857 | ||
|
|
e4bd4632c5 | ||
|
|
10f75272c5 | ||
|
|
f3adfc2bd0 | ||
|
|
d1b0bbead1 | ||
|
|
76c0ba4ada | ||
|
|
2f385a82b7 | ||
|
|
84d7b38ba5 | ||
|
|
321179e6ce | ||
|
|
49d93f7573 | ||
|
|
bf4456ca80 | ||
|
|
b4ee25dd39 | ||
|
|
e952c48e5d | ||
|
|
2fcd9fc5bd | ||
|
|
4665d88241 | ||
|
|
a3e94d26d6 | ||
|
|
12afca6918 | ||
|
|
a037ae43f2 | ||
|
|
f8f2b80be4 | ||
|
|
617901cc81 | ||
|
|
fa714906a7 | ||
|
|
9fa7a768ea | ||
|
|
f2861e95e4 | ||
|
|
93ee46b5ca | ||
|
|
d1240f884b | ||
|
|
2eded7f10a | ||
|
|
39212f7318 | ||
|
|
15e008240f | ||
|
|
2e25850994 | ||
|
|
5eea8b8bf8 | ||
|
|
8e604075ae | ||
|
|
c8810f96f7 | ||
|
|
eb21e99945 | ||
|
|
77268bbb18 | ||
|
|
0a401eac14 | ||
|
|
ed7db871ed | ||
|
|
f4eb34d7f6 | ||
|
|
9e93cad31e | ||
|
|
4572a8b17b | ||
|
|
30bb9f46ed | ||
|
|
3338c140c7 | ||
|
|
4510616f20 | ||
|
|
e773d561a4 | ||
|
|
d0f71d9b0e | ||
|
|
0fecb8e252 | ||
|
|
6283e4e3d7 | ||
|
|
cefa998a61 | ||
|
|
9b529622cd | ||
|
|
99031a72df | ||
|
|
e6709b0f5e | ||
|
|
f2c68a9511 | ||
|
|
1c3ebed203 | ||
|
|
79a54c06a2 | ||
|
|
89f5ab6be3 | ||
|
|
0b550a4666 | ||
|
|
9e8acf257d | ||
|
|
8250789855 | ||
|
|
33c0f71a5e | ||
|
|
bc496f1ffd | ||
|
|
4b4d80d231 | ||
|
|
f143834379 | ||
|
|
bce4f84040 | ||
|
|
354737861f | ||
|
|
f9667718d4 | ||
|
|
990c4c0ec6 | ||
|
|
9dd617e661 | ||
|
|
b2af1be6ab | ||
|
|
4465e213b8 | ||
|
|
a809f17523 | ||
|
|
eeebc364e8 | ||
|
|
a09d94d7df | ||
|
|
008a35ffeb | ||
|
|
bad05c64b8 | ||
|
|
1c46efc01a | ||
|
|
a15d2f52ba | ||
|
|
cf28131082 | ||
|
|
bc8f002ee7 | ||
|
|
ed233e915b | ||
|
|
427ad656f3 | ||
|
|
91dc63f02b | ||
|
|
3bd1e95843 | ||
|
|
2408ca509e | ||
|
|
7cd3e04634 | ||
|
|
e9667f0565 | ||
|
|
ec4b02a8f2 | ||
|
|
1cb2de78cb | ||
|
|
446163f017 | ||
|
|
03707bf3e9 | ||
|
|
1c84b06e7f | ||
|
|
0282ba5ba6 | ||
|
|
febfee5240 | ||
|
|
0d713ed0ff | ||
|
|
2ef8f5e5e2 | ||
|
|
f5c7a027e4 | ||
|
|
44fdc87672 | ||
|
|
6a82cf6f41 | ||
|
|
6b56aeac1b | ||
|
|
737debe123 | ||
|
|
fcdd071302 | ||
|
|
b559d72781 | ||
|
|
fce5102095 | ||
|
|
2f3b8ec89b | ||
|
|
6b2153b27a | ||
|
|
eb2fc3eab8 | ||
|
|
a46eb52f7e | ||
|
|
0dd9c69c2c | ||
|
|
1e8db3a3c3 | ||
|
|
b91f00b103 | ||
|
|
60c5c4211a | ||
|
|
87b5e486bf | ||
|
|
1a5d1847b6 | ||
|
|
ca62dd3150 | ||
|
|
8640ed18ed | ||
|
|
afc9e37229 | ||
|
|
c774409759 | ||
|
|
d495757e15 | ||
|
|
ec254e80e0 | ||
|
|
5d89f81d52 | ||
|
|
a1eec0d84f | ||
|
|
2c353c46d7 | ||
|
|
a80558fc75 | ||
|
|
14abcdcbf0 | ||
|
|
c9aae55c8c | ||
|
|
6532f8d5f7 | ||
|
|
127c1ab882 | ||
|
|
7537d4c36f | ||
|
|
9d76ea1cf9 | ||
|
|
1ce9802689 | ||
|
|
8ab6cad1fb | ||
|
|
500f5e7dce | ||
|
|
a8e98595c7 | ||
|
|
9adcca73eb | ||
|
|
b22793f57e | ||
|
|
c2457763f6 | ||
|
|
2a6149520c | ||
|
|
1ebbcfa279 | ||
|
|
9b180ad0a1 | ||
|
|
0a205b02b0 | ||
|
|
77c0b4de00 | ||
|
|
b7e920737f | ||
|
|
0b24e4fd1a | ||
|
|
bf6fb72217 | ||
|
|
37bd36917d | ||
|
|
4b09656723 | ||
|
|
b2186209df | ||
|
|
7d0d9ab16c | ||
|
|
187fc1d0fc | ||
|
|
8492c123d4 | ||
|
|
ddd7a28298 | ||
|
|
f12f2253a0 | ||
|
|
bd143aff4e | ||
|
|
fc876a7d00 | ||
|
|
be954493e6 | ||
|
|
65702e0adf | ||
|
|
7c2b825cd1 | ||
|
|
b92c5de85d | ||
|
|
edf6b4e5c2 | ||
|
|
d591617819 | ||
|
|
56ba7ad21e | ||
|
|
8efb48fa51 | ||
|
|
3e7815f3c4 | ||
|
|
c34d635495 | ||
|
|
9d0a43c58a | ||
|
|
ffccbf8b9f | ||
|
|
6176d8fd7b | ||
|
|
62ee9cd9e4 | ||
|
|
ecbd8aafcb | ||
|
|
a53698de97 | ||
|
|
eabde1aba0 | ||
|
|
07f1351912 | ||
|
|
b17de32914 | ||
|
|
6c220059a3 | ||
|
|
0cbedf5ca1 | ||
|
|
72e4435019 | ||
|
|
60b6b4bc41 | ||
|
|
58758e5389 | ||
|
|
bdae960144 | ||
|
|
1eb305a3fe | ||
|
|
97f3a044c2 | ||
|
|
4e4c4e9048 | ||
|
|
4950897188 | ||
|
|
9fe88efca9 | ||
|
|
335c5eb86b | ||
|
|
474051f095 | ||
|
|
916fab0038 | ||
|
|
0ae310c329 | ||
|
|
31e8078216 | ||
|
|
eda72c860c | ||
|
|
78628adc3c | ||
|
|
31b4f12ae6 | ||
|
|
b18c6331e6 | ||
|
|
e6cccde72a | ||
|
|
cafbb11237 | ||
|
|
569e6e1624 | ||
|
|
d72d6c65b2 | ||
|
|
b403440c04 | ||
|
|
ec43cf2add | ||
|
|
59ace0e3eb | ||
|
|
9104ee0642 | ||
|
|
972b1ef8ba | ||
|
|
5ad773e092 | ||
|
|
74fca62bf2 | ||
|
|
a1b661e8fb | ||
|
|
722449c5ac | ||
|
|
d8c212ad73 | ||
|
|
07edb414e1 | ||
|
|
61af6372e0 |
45
.github/workflows/build-image.yml
vendored
@@ -1,45 +0,0 @@
|
||||
name: Create and publish a Docker image
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
env:
|
||||
REGISTRY: ghcr.io
|
||||
IMAGE_NAME: ${{ github.repository }}
|
||||
|
||||
jobs:
|
||||
build-and-push-image:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Log in to the Container registry
|
||||
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Extract metadata (tags, labels) for Docker
|
||||
id: meta
|
||||
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
|
||||
with:
|
||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||
tags: |
|
||||
type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', 'main') }}
|
||||
|
||||
- name: Build and push Docker image
|
||||
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
|
||||
124
.github/workflows/release-book-website.yml
vendored
Normal file
@@ -0,0 +1,124 @@
|
||||
name: Release the book and website
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
env:
|
||||
LATEST_IMAGE: ghcr.io/${{ github.repository }}:latest
|
||||
|
||||
jobs:
|
||||
build-and-push-image:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Log in to the Container registry
|
||||
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
# Buildx for caching
|
||||
- uses: docker/setup-buildx-action@v3
|
||||
- name: Build and push Docker image
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
tags: ghcr.io/${{ github.repository }}:latest
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
|
||||
release-book-website:
|
||||
needs: build-and-push-image
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Set up git repository
|
||||
uses: actions/checkout@v3
|
||||
- name: Print dependency versions
|
||||
uses: addnab/docker-run-action@v3
|
||||
with:
|
||||
image: ${{ env.LATEST_IMAGE }}
|
||||
options: -v ${{ github.workspace }}:/app
|
||||
run: |
|
||||
cd /app/book
|
||||
make show_tools_version
|
||||
- name: Print build variables
|
||||
uses: addnab/docker-run-action@v3
|
||||
with:
|
||||
image: ${{ env.LATEST_IMAGE }}
|
||||
options: -v ${{ github.workspace }}:/app
|
||||
run: |
|
||||
cd /app/book
|
||||
make printvars
|
||||
- name: Bake the book
|
||||
uses: addnab/docker-run-action@v3
|
||||
with:
|
||||
image: ${{ env.LATEST_IMAGE }}
|
||||
options: -v ${{ github.workspace }}:/app
|
||||
run: |
|
||||
cd /app/book
|
||||
make -j bake
|
||||
- name: Release baked book to S3
|
||||
uses: shallwefootball/s3-upload-action@master
|
||||
with:
|
||||
aws_key_id: ${{ secrets.AWS_KEY_ID }}
|
||||
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY}}
|
||||
aws_bucket: ${{ secrets.AWS_BUCKET_BOOK }}
|
||||
source_dir: book/release
|
||||
destination_dir: release
|
||||
- name: Upload book Artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: books
|
||||
path: |
|
||||
book/book_serif/book.log
|
||||
book/book_serif/book.pdf
|
||||
book/book-epub/book.epub
|
||||
- name: Bake the website
|
||||
uses: addnab/docker-run-action@v3
|
||||
with:
|
||||
image: ${{ env.LATEST_IMAGE }}
|
||||
options: -v ${{ github.workspace }}:/app
|
||||
run: |
|
||||
cd /app/book
|
||||
make mrproper && make website
|
||||
- name: Release baked website to S3
|
||||
uses: shallwefootball/s3-upload-action@master
|
||||
with:
|
||||
aws_key_id: ${{ secrets.AWS_KEY_ID }}
|
||||
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY}}
|
||||
aws_bucket: ${{ secrets.AWS_BUCKET_WEBSITE }}
|
||||
source_dir: website/static_website_html
|
||||
destination_dir: static_html_root
|
||||
- name: Upload website Artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: website
|
||||
path: website/static_website_html
|
||||
invalidate-book-website-cache:
|
||||
needs: release-book-website
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Invalidate Cloudfront book cache
|
||||
uses: chetan/invalidate-cloudfront-action@v2
|
||||
env:
|
||||
DISTRIBUTION: ${{ secrets.CLOUDFRONT_DISTRIBUTION_BOOK }}
|
||||
PATHS: "/*"
|
||||
AWS_REGION: "us-east-1"
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
- name: Invalidate Cloudfront website cache
|
||||
uses: chetan/invalidate-cloudfront-action@v2
|
||||
env:
|
||||
DISTRIBUTION: ${{ secrets.CLOUDFRONT_DISTRIBUTION_WEBSITE }}
|
||||
PATHS: "/*"
|
||||
AWS_REGION: "us-east-1"
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
51
.github/workflows/release-book.yml
vendored
@@ -1,51 +0,0 @@
|
||||
name: Release the book
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
jobs:
|
||||
build_and_release:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Set up git repository
|
||||
uses: actions/checkout@v3
|
||||
- name: Print dependency versions
|
||||
uses: addnab/docker-run-action@v3
|
||||
with:
|
||||
image: ghcr.io/hendricius/the-sourdough-framework:latest
|
||||
options: -v ${{ github.workspace }}:/app
|
||||
run: |
|
||||
cd /app/book
|
||||
make show_tools_version
|
||||
- name: Print build variables
|
||||
uses: addnab/docker-run-action@v3
|
||||
with:
|
||||
image: ghcr.io/hendricius/the-sourdough-framework:latest
|
||||
options: -v ${{ github.workspace }}:/app
|
||||
run: |
|
||||
cd /app/book
|
||||
make printvars
|
||||
- name: Bake the book
|
||||
uses: addnab/docker-run-action@v3
|
||||
with:
|
||||
image: ghcr.io/hendricius/the-sourdough-framework:latest
|
||||
options: -v ${{ github.workspace }}:/app
|
||||
run: |
|
||||
cd /app/book
|
||||
make bake
|
||||
- name: Release baked book to S3
|
||||
uses: shallwefootball/s3-upload-action@master
|
||||
with:
|
||||
aws_key_id: ${{ secrets.AWS_KEY_ID }}
|
||||
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY}}
|
||||
aws_bucket: ${{ secrets.AWS_BUCKET_BOOK }}
|
||||
source_dir: book/release
|
||||
destination_dir: release
|
||||
- name: Invalidate Cloudfront book cache
|
||||
uses: chetan/invalidate-cloudfront-action@v2
|
||||
env:
|
||||
DISTRIBUTION: ${{ secrets.CLOUDFRONT_DISTRIBUTION_BOOK }}
|
||||
PATHS: "/*"
|
||||
AWS_REGION: "us-east-1"
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
51
.github/workflows/release-website.yml
vendored
@@ -1,51 +0,0 @@
|
||||
name: Release the website
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
jobs:
|
||||
build_and_release:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Set up git repository
|
||||
uses: actions/checkout@v3
|
||||
- name: Print dependency versions
|
||||
uses: addnab/docker-run-action@v3
|
||||
with:
|
||||
image: ghcr.io/hendricius/the-sourdough-framework:latest
|
||||
options: -v ${{ github.workspace }}:/app
|
||||
run: |
|
||||
cd /app/book
|
||||
make show_tools_version
|
||||
- name: Print build variables
|
||||
uses: addnab/docker-run-action@v3
|
||||
with:
|
||||
image: ghcr.io/hendricius/the-sourdough-framework:latest
|
||||
options: -v ${{ github.workspace }}:/app
|
||||
run: |
|
||||
cd /app/book
|
||||
make printvars
|
||||
- name: Bake the book
|
||||
uses: addnab/docker-run-action@v3
|
||||
with:
|
||||
image: ghcr.io/hendricius/the-sourdough-framework:latest
|
||||
options: -v ${{ github.workspace }}:/app
|
||||
run: |
|
||||
cd /app/book
|
||||
make website
|
||||
- name: Release baked website to S3
|
||||
uses: shallwefootball/s3-upload-action@master
|
||||
with:
|
||||
aws_key_id: ${{ secrets.AWS_KEY_ID }}
|
||||
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY}}
|
||||
aws_bucket: ${{ secrets.AWS_BUCKET_WEBSITE }}
|
||||
source_dir: website/static_website_html
|
||||
destination_dir: static_html_root
|
||||
- name: Invalidate Cloudfront website cache
|
||||
uses: chetan/invalidate-cloudfront-action@v2
|
||||
env:
|
||||
DISTRIBUTION: ${{ secrets.CLOUDFRONT_DISTRIBUTION_WEBSITE }}
|
||||
PATHS: "/*"
|
||||
AWS_REGION: "us-east-1"
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
58
.github/workflows/test-book-website.yml
vendored
Normal file
@@ -0,0 +1,58 @@
|
||||
name: Test book and website for given image
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
env:
|
||||
DOCKER_IMAGE: ghcr.io/${{ github.repository }}:latest
|
||||
|
||||
jobs:
|
||||
test-book-website:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Set up git repository
|
||||
uses: actions/checkout@v3
|
||||
- name: Print dependency versions
|
||||
uses: addnab/docker-run-action@v3
|
||||
with:
|
||||
image: ${{ env.DOCKER_IMAGE }}
|
||||
options: -v ${{ github.workspace }}:/app
|
||||
run: |
|
||||
cd /app/book
|
||||
make show_tools_version
|
||||
- name: Print build variables
|
||||
uses: addnab/docker-run-action@v3
|
||||
with:
|
||||
image: ${{ env.DOCKER_IMAGE }}
|
||||
options: -v ${{ github.workspace }}:/app
|
||||
run: |
|
||||
cd /app/book
|
||||
make printvars
|
||||
- name: Test baking the release versions
|
||||
uses: addnab/docker-run-action@v3
|
||||
with:
|
||||
image: ${{ env.DOCKER_IMAGE }}
|
||||
options: -v ${{ github.workspace }}:/app
|
||||
run: |
|
||||
cd /app/book
|
||||
make -j build_serif_pdf build_ebook
|
||||
- name: Upload book Artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: books
|
||||
path: |
|
||||
book/book_serif/book.log
|
||||
book/book_serif/book.pdf
|
||||
book/book-epub/book.epub
|
||||
- name: Test building website
|
||||
uses: addnab/docker-run-action@v3
|
||||
with:
|
||||
image: ${{ env.DOCKER_IMAGE }}
|
||||
options: -v ${{ github.workspace }}:/app
|
||||
run: |
|
||||
cd /app/book
|
||||
make mrproper && make website
|
||||
- name: Upload website Artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: website
|
||||
path: website/static_website_html
|
||||
32
.github/workflows/validate-book-build.yml
vendored
@@ -1,32 +0,0 @@
|
||||
name: Validate LaTeX Document
|
||||
on: [ push, pull_request ]
|
||||
jobs:
|
||||
test_building_book:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Set up git repository
|
||||
uses: actions/checkout@v3
|
||||
- name: Print dependency versions
|
||||
uses: addnab/docker-run-action@v3
|
||||
with:
|
||||
image: ghcr.io/hendricius/the-sourdough-framework:latest
|
||||
options: -v ${{ github.workspace }}:/app
|
||||
run: |
|
||||
cd /app/book
|
||||
make show_tools_version
|
||||
- name: Print build variables
|
||||
uses: addnab/docker-run-action@v3
|
||||
with:
|
||||
image: ghcr.io/hendricius/the-sourdough-framework:latest
|
||||
options: -v ${{ github.workspace }}:/app
|
||||
run: |
|
||||
cd /app/book
|
||||
make printvars
|
||||
- name: Test baking the release versions
|
||||
uses: addnab/docker-run-action@v3
|
||||
with:
|
||||
image: ghcr.io/hendricius/the-sourdough-framework:latest
|
||||
options: -v ${{ github.workspace }}:/app
|
||||
run: |
|
||||
cd /app/book
|
||||
make -j build_pdf build_serif_ebook
|
||||
41
.gitignore
vendored
@@ -1,3 +1,4 @@
|
||||
.DS_Store
|
||||
*.xbb
|
||||
*.aux
|
||||
*.fdb_latexmk
|
||||
@@ -12,52 +13,32 @@
|
||||
*.run.xml
|
||||
*.html
|
||||
*.dlog
|
||||
*.bak
|
||||
*.opf
|
||||
.DS_Store
|
||||
book/book.out
|
||||
.vscode/
|
||||
book/book.synctex*
|
||||
book/tikz-cache/*
|
||||
book/bookch*
|
||||
book/content.opf
|
||||
book/output-epub
|
||||
book/figures/*.png
|
||||
book/figures/*.pdf
|
||||
book/figures/*.in
|
||||
book/tables/*.png
|
||||
book/tables/*.pdf
|
||||
book/release/*
|
||||
book/book*.4ct
|
||||
book/book*.4tc
|
||||
book/book*.aux
|
||||
book/book*.bbl
|
||||
book/book*.bcf
|
||||
book/book*.blg
|
||||
book/book*.css
|
||||
book/book*.dvi
|
||||
book/book*.html
|
||||
book/book*.idv
|
||||
book/book*.lg
|
||||
book/book*.log
|
||||
book/book*.mobi
|
||||
book/book*.azw3
|
||||
book/book*.epub
|
||||
book/book*.ncx
|
||||
book/book*.out
|
||||
book/book*.pdf
|
||||
book/book*.run.xml
|
||||
book/book*.tmp
|
||||
book/book*.toc
|
||||
book/book*.xref
|
||||
book/book*.html
|
||||
book/book*.svg
|
||||
book/book-epub/
|
||||
book/book-mobi/
|
||||
book/book-azw3/
|
||||
*.bak
|
||||
book_sans_serif/
|
||||
book_serif/
|
||||
release_sans_serif/
|
||||
book/book_sans_serif-epub/
|
||||
# Directories created during build
|
||||
book/book_sans_serif/*
|
||||
book/book_serif/*
|
||||
book/static_website_html/*
|
||||
epub/
|
||||
*.opf
|
||||
website/static_website_html/*
|
||||
book/epub/
|
||||
book/book-epub/
|
||||
book/bw-book-epub/*
|
||||
book/release/*
|
||||
|
||||
53
Dockerfile
@@ -1,4 +1,4 @@
|
||||
FROM registry.gitlab.com/islandoftex/images/texlive
|
||||
FROM debian:trixie
|
||||
|
||||
LABEL "maintainer"="Hendrik Kleinwächter <hendrik.kleinwaechter@gmail.com>"
|
||||
LABEL "repository"="https://github.com/hendricius/the-sourdough-framework"
|
||||
@@ -6,7 +6,7 @@ LABEL "homepage"="https://github.com/hendricius/the-sourdough-framework"
|
||||
LABEL org.opencontainers.image.source="https://github.com/hendricius/the-sourdough-framework"
|
||||
|
||||
# Print release information if needed
|
||||
# RUN cat /etc/*release*
|
||||
RUN cat /etc/*release*
|
||||
|
||||
# Install base depdendencies
|
||||
RUN apt-get update && \
|
||||
@@ -20,7 +20,49 @@ RUN apt-get update && \
|
||||
wget \
|
||||
ruby3.1 \
|
||||
ruby-dev \
|
||||
build-essential
|
||||
imagemagick \
|
||||
rsync \
|
||||
wget \
|
||||
perl \
|
||||
xzdec \
|
||||
# dvisvgm dependencies
|
||||
build-essential \
|
||||
fonts-texgyre \
|
||||
fontconfig \
|
||||
libfontconfig1 \
|
||||
libkpathsea-dev \
|
||||
libptexenc-dev \
|
||||
libsynctex-dev \
|
||||
libx11-dev \
|
||||
libxmu-dev \
|
||||
libxaw7-dev \
|
||||
libxt-dev \
|
||||
libxft-dev \
|
||||
libwoff-dev
|
||||
|
||||
# Install TeX
|
||||
RUN apt-get update && \
|
||||
apt-get install -y --no-install-recommends \
|
||||
texlive-full \
|
||||
texlive-luatex
|
||||
|
||||
# Compile latest dvisvgm
|
||||
RUN wget https://github.com/mgieseki/dvisvgm/releases/download/3.1.2/dvisvgm-3.1.2.tar.gz && \
|
||||
mv dvisvgm-3.1.2.tar.gz dvisvgm.tar.gz && \
|
||||
tar -xzf dvisvgm.tar.gz && \
|
||||
cd dvisvgm-* && \
|
||||
./configure && \
|
||||
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
|
||||
|
||||
WORKDIR /root
|
||||
|
||||
@@ -31,9 +73,4 @@ COPY website/Gemfile /root
|
||||
COPY website/.ruby-version /root
|
||||
RUN bundle install
|
||||
|
||||
# Install support to build amazon kindle books
|
||||
RUN wget https://archive.org/download/kindlegen_linux_2_6_i386_v2_9/kindlegen_linux_2.6_i386_v2_9.tar.gz && \
|
||||
tar xzf kindlegen_linux_2.6_i386_v2_9.tar.gz && \
|
||||
mv kindlegen /usr/bin
|
||||
|
||||
CMD ["/bin/bash"]
|
||||
|
||||
440
LICENSE
@@ -1,21 +1,427 @@
|
||||
MIT License
|
||||
Attribution-ShareAlike 4.0 International
|
||||
|
||||
Copyright (c) 2022 Hendrik Kleinwaechter
|
||||
=======================================================================
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
Creative Commons Corporation ("Creative Commons") is not a law firm and
|
||||
does not provide legal services or legal advice. Distribution of
|
||||
Creative Commons public licenses does not create a lawyer-client or
|
||||
other relationship. Creative Commons makes its licenses and related
|
||||
information available on an "as-is" basis. Creative Commons gives no
|
||||
warranties regarding its licenses, any material licensed under their
|
||||
terms and conditions, or any related information. Creative Commons
|
||||
disclaims all liability for damages resulting from their use to the
|
||||
fullest extent possible.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
Using Creative Commons Public Licenses
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Creative Commons public licenses provide a standard set of terms and
|
||||
conditions that creators and other rights holders may use to share
|
||||
original works of authorship and other material subject to copyright
|
||||
and certain other rights specified in the public license below. The
|
||||
following considerations are for informational purposes only, are not
|
||||
exhaustive, and do not form part of our licenses.
|
||||
|
||||
Considerations for licensors: Our public licenses are
|
||||
intended for use by those authorized to give the public
|
||||
permission to use material in ways otherwise restricted by
|
||||
copyright and certain other rights. Our licenses are
|
||||
irrevocable. Licensors should read and understand the terms
|
||||
and conditions of the license they choose before applying it.
|
||||
Licensors should also secure all rights necessary before
|
||||
applying our licenses so that the public can reuse the
|
||||
material as expected. Licensors should clearly mark any
|
||||
material not subject to the license. This includes other CC-
|
||||
licensed material, or material used under an exception or
|
||||
limitation to copyright. More considerations for licensors:
|
||||
wiki.creativecommons.org/Considerations_for_licensors
|
||||
|
||||
Considerations for the public: By using one of our public
|
||||
licenses, a licensor grants the public permission to use the
|
||||
licensed material under specified terms and conditions. If
|
||||
the licensor's permission is not necessary for any reason--for
|
||||
example, because of any applicable exception or limitation to
|
||||
copyright--then that use is not regulated by the license. Our
|
||||
licenses grant only permissions under copyright and certain
|
||||
other rights that a licensor has authority to grant. Use of
|
||||
the licensed material may still be restricted for other
|
||||
reasons, including because others have copyright or other
|
||||
rights in the material. A licensor may make special requests,
|
||||
such as asking that all changes be marked or described.
|
||||
Although not required by our licenses, you are encouraged to
|
||||
respect those requests where reasonable. More_considerations
|
||||
for the public:
|
||||
wiki.creativecommons.org/Considerations_for_licensees
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Attribution-ShareAlike 4.0 International Public
|
||||
License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree
|
||||
to be bound by the terms and conditions of this Creative Commons
|
||||
Attribution-ShareAlike 4.0 International Public License ("Public
|
||||
License"). To the extent this Public License may be interpreted as a
|
||||
contract, You are granted the Licensed Rights in consideration of Your
|
||||
acceptance of these terms and conditions, and the Licensor grants You
|
||||
such rights in consideration of benefits the Licensor receives from
|
||||
making the Licensed Material available under these terms and
|
||||
conditions.
|
||||
|
||||
|
||||
Section 1 -- Definitions.
|
||||
|
||||
a. Adapted Material means material subject to Copyright and Similar
|
||||
Rights that is derived from or based upon the Licensed Material
|
||||
and in which the Licensed Material is translated, altered,
|
||||
arranged, transformed, or otherwise modified in a manner requiring
|
||||
permission under the Copyright and Similar Rights held by the
|
||||
Licensor. For purposes of this Public License, where the Licensed
|
||||
Material is a musical work, performance, or sound recording,
|
||||
Adapted Material is always produced where the Licensed Material is
|
||||
synched in timed relation with a moving image.
|
||||
|
||||
b. Adapter's License means the license You apply to Your Copyright
|
||||
and Similar Rights in Your contributions to Adapted Material in
|
||||
accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. BY-SA Compatible License means a license listed at
|
||||
creativecommons.org/compatiblelicenses, approved by Creative
|
||||
Commons as essentially the equivalent of this Public License.
|
||||
|
||||
d. Copyright and Similar Rights means copyright and/or similar rights
|
||||
closely related to copyright including, without limitation,
|
||||
performance, broadcast, sound recording, and Sui Generis Database
|
||||
Rights, without regard to how the rights are labeled or
|
||||
categorized. For purposes of this Public License, the rights
|
||||
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||
Rights.
|
||||
|
||||
e. Effective Technological Measures means those measures that, in the
|
||||
absence of proper authority, may not be circumvented under laws
|
||||
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||
Treaty adopted on December 20, 1996, and/or similar international
|
||||
agreements.
|
||||
|
||||
f. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||
any other exception or limitation to Copyright and Similar Rights
|
||||
that applies to Your use of the Licensed Material.
|
||||
|
||||
g. License Elements means the license attributes listed in the name
|
||||
of a Creative Commons Public License. The License Elements of this
|
||||
Public License are Attribution and ShareAlike.
|
||||
|
||||
h. Licensed Material means the artistic or literary work, database,
|
||||
or other material to which the Licensor applied this Public
|
||||
License.
|
||||
|
||||
i. Licensed Rights means the rights granted to You subject to the
|
||||
terms and conditions of this Public License, which are limited to
|
||||
all Copyright and Similar Rights that apply to Your use of the
|
||||
Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
j. Licensor means the individual(s) or entity(ies) granting rights
|
||||
under this Public License.
|
||||
|
||||
k. Share means to provide material to the public by any means or
|
||||
process that requires permission under the Licensed Rights, such
|
||||
as reproduction, public display, public performance, distribution,
|
||||
dissemination, communication, or importation, and to make material
|
||||
available to the public including in ways that members of the
|
||||
public may access the material from a place and at a time
|
||||
individually chosen by them.
|
||||
|
||||
l. Sui Generis Database Rights means rights other than copyright
|
||||
resulting from Directive 96/9/EC of the European Parliament and of
|
||||
the Council of 11 March 1996 on the legal protection of databases,
|
||||
as amended and/or succeeded, as well as other essentially
|
||||
equivalent rights anywhere in the world.
|
||||
|
||||
m. You means the individual or entity exercising the Licensed Rights
|
||||
under this Public License. Your has a corresponding meaning.
|
||||
|
||||
|
||||
Section 2 -- Scope.
|
||||
|
||||
a. License grant.
|
||||
|
||||
1. Subject to the terms and conditions of this Public License,
|
||||
the Licensor hereby grants You a worldwide, royalty-free,
|
||||
non-sublicensable, non-exclusive, irrevocable license to
|
||||
exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
a. reproduce and Share the Licensed Material, in whole or
|
||||
in part; and
|
||||
|
||||
b. produce, reproduce, and Share Adapted Material.
|
||||
|
||||
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||
Exceptions and Limitations apply to Your use, this Public
|
||||
License does not apply, and You do not need to comply with
|
||||
its terms and conditions.
|
||||
|
||||
3. Term. The term of this Public License is specified in Section
|
||||
6(a).
|
||||
|
||||
4. Media and formats; technical modifications allowed. The
|
||||
Licensor authorizes You to exercise the Licensed Rights in
|
||||
all media and formats whether now known or hereafter created,
|
||||
and to make technical modifications necessary to do so. The
|
||||
Licensor waives and/or agrees not to assert any right or
|
||||
authority to forbid You from making technical modifications
|
||||
necessary to exercise the Licensed Rights, including
|
||||
technical modifications necessary to circumvent Effective
|
||||
Technological Measures. For purposes of this Public License,
|
||||
simply making modifications authorized by this Section 2(a)
|
||||
(4) never produces Adapted Material.
|
||||
|
||||
5. Downstream recipients.
|
||||
|
||||
a. Offer from the Licensor -- Licensed Material. Every
|
||||
recipient of the Licensed Material automatically
|
||||
receives an offer from the Licensor to exercise the
|
||||
Licensed Rights under the terms and conditions of this
|
||||
Public License.
|
||||
|
||||
b. Additional offer from the Licensor -- Adapted Material.
|
||||
Every recipient of Adapted Material from You
|
||||
automatically receives an offer from the Licensor to
|
||||
exercise the Licensed Rights in the Adapted Material
|
||||
under the conditions of the Adapter's License You apply.
|
||||
|
||||
c. No downstream restrictions. You may not offer or impose
|
||||
any additional or different terms or conditions on, or
|
||||
apply any Effective Technological Measures to, the
|
||||
Licensed Material if doing so restricts exercise of the
|
||||
Licensed Rights by any recipient of the Licensed
|
||||
Material.
|
||||
|
||||
6. No endorsement. Nothing in this Public License constitutes or
|
||||
may be construed as permission to assert or imply that You
|
||||
are, or that Your use of the Licensed Material is, connected
|
||||
with, or sponsored, endorsed, or granted official status by,
|
||||
the Licensor or others designated to receive attribution as
|
||||
provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. Other rights.
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not
|
||||
licensed under this Public License, nor are publicity,
|
||||
privacy, and/or other similar personality rights; however, to
|
||||
the extent possible, the Licensor waives and/or agrees not to
|
||||
assert any such rights held by the Licensor to the limited
|
||||
extent necessary to allow You to exercise the Licensed
|
||||
Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this
|
||||
Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to
|
||||
collect royalties from You for the exercise of the Licensed
|
||||
Rights, whether directly or through a collecting society
|
||||
under any voluntary or waivable statutory or compulsory
|
||||
licensing scheme. In all other cases the Licensor expressly
|
||||
reserves any right to collect such royalties.
|
||||
|
||||
|
||||
Section 3 -- License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the
|
||||
following conditions.
|
||||
|
||||
a. Attribution.
|
||||
|
||||
1. If You Share the Licensed Material (including in modified
|
||||
form), You must:
|
||||
|
||||
a. retain the following if it is supplied by the Licensor
|
||||
with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed
|
||||
Material and any others designated to receive
|
||||
attribution, in any reasonable manner requested by
|
||||
the Licensor (including by pseudonym if
|
||||
designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of
|
||||
warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the
|
||||
extent reasonably practicable;
|
||||
|
||||
b. indicate if You modified the Licensed Material and
|
||||
retain an indication of any previous modifications; and
|
||||
|
||||
c. indicate the Licensed Material is licensed under this
|
||||
Public License, and include the text of, or the URI or
|
||||
hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||
reasonable manner based on the medium, means, and context in
|
||||
which You Share the Licensed Material. For example, it may be
|
||||
reasonable to satisfy the conditions by providing a URI or
|
||||
hyperlink to a resource that includes the required
|
||||
information.
|
||||
|
||||
3. If requested by the Licensor, You must remove any of the
|
||||
information required by Section 3(a)(1)(A) to the extent
|
||||
reasonably practicable.
|
||||
|
||||
b. ShareAlike.
|
||||
|
||||
In addition to the conditions in Section 3(a), if You Share
|
||||
Adapted Material You produce, the following conditions also apply.
|
||||
|
||||
1. The Adapter's License You apply must be a Creative Commons
|
||||
license with the same License Elements, this version or
|
||||
later, or a BY-SA Compatible License.
|
||||
|
||||
2. You must include the text of, or the URI or hyperlink to, the
|
||||
Adapter's License You apply. You may satisfy this condition
|
||||
in any reasonable manner based on the medium, means, and
|
||||
context in which You Share Adapted Material.
|
||||
|
||||
3. You may not offer or impose any additional or different terms
|
||||
or conditions on, or apply any Effective Technological
|
||||
Measures to, Adapted Material that restrict exercise of the
|
||||
rights granted under the Adapter's License You apply.
|
||||
|
||||
|
||||
Section 4 -- Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that
|
||||
apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||
to extract, reuse, reproduce, and Share all or a substantial
|
||||
portion of the contents of the database;
|
||||
|
||||
b. if You include all or a substantial portion of the database
|
||||
contents in a database in which You have Sui Generis Database
|
||||
Rights, then the database in which You have Sui Generis Database
|
||||
Rights (but not its individual contents) is Adapted Material,
|
||||
|
||||
including for purposes of Section 3(b); and
|
||||
c. You must comply with the conditions in Section 3(a) if You Share
|
||||
all or a substantial portion of the contents of the database.
|
||||
|
||||
For the avoidance of doubt, this Section 4 supplements and does not
|
||||
replace Your obligations under this Public License where the Licensed
|
||||
Rights include other Copyright and Similar Rights.
|
||||
|
||||
|
||||
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||
|
||||
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
||||
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided
|
||||
above shall be interpreted in a manner that, to the extent
|
||||
possible, most closely approximates an absolute disclaimer and
|
||||
waiver of all liability.
|
||||
|
||||
|
||||
Section 6 -- Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and
|
||||
Similar Rights licensed here. However, if You fail to comply with
|
||||
this Public License, then Your rights under this Public License
|
||||
terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under
|
||||
Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided
|
||||
it is cured within 30 days of Your discovery of the
|
||||
violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||
right the Licensor may have to seek remedies for Your violations
|
||||
of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the
|
||||
Licensed Material under separate terms or conditions or stop
|
||||
distributing the Licensed Material at any time; however, doing so
|
||||
will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||
License.
|
||||
|
||||
|
||||
Section 7 -- Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different
|
||||
terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the
|
||||
Licensed Material not stated herein are separate from and
|
||||
independent of the terms and conditions of this Public License.
|
||||
|
||||
|
||||
Section 8 -- Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and
|
||||
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||
conditions on any use of the Licensed Material that could lawfully
|
||||
be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is
|
||||
deemed unenforceable, it shall be automatically reformed to the
|
||||
minimum extent necessary to make it enforceable. If the provision
|
||||
cannot be reformed, it shall be severed from this Public License
|
||||
without affecting the enforceability of the remaining terms and
|
||||
conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no
|
||||
failure to comply consented to unless expressly agreed to by the
|
||||
Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted
|
||||
as a limitation upon, or waiver of, any privileges and immunities
|
||||
that apply to the Licensor or You, including from the legal
|
||||
processes of any jurisdiction or authority.
|
||||
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons is not a party to its public
|
||||
licenses. Notwithstanding, Creative Commons may elect to apply one of
|
||||
its public licenses to material it publishes and in those instances
|
||||
will be considered the “Licensor.” The text of the Creative Commons
|
||||
public licenses is dedicated to the public domain under the CC0 Public
|
||||
Domain Dedication. Except for the limited purpose of indicating that
|
||||
material is shared under a Creative Commons public license or as
|
||||
otherwise permitted by the Creative Commons policies published at
|
||||
creativecommons.org/policies, Creative Commons does not authorize the
|
||||
use of the trademark "Creative Commons" or any other trademark or logo
|
||||
of Creative Commons without its prior written consent including,
|
||||
without limitation, in connection with any unauthorized modifications
|
||||
to any of its public licenses or any other arrangements,
|
||||
understandings, or agreements concerning use of licensed material. For
|
||||
the avoidance of doubt, this paragraph does not form part of the
|
||||
public licenses.
|
||||
|
||||
Creative Commons may be contacted at creativecommons.org.
|
||||
|
||||
40
README.md
@@ -32,7 +32,8 @@ make
|
||||
|
||||
Then you can check out the file `book/book.pdf`
|
||||
|
||||
If you want to 🍞 bake all the versions including ebook formats (.pdf, .epub, .mobi, .azw3) run:
|
||||
If you want to 🍞 bake all the versions including ebook variants (.pdf, .epub
|
||||
in colour and size optimized Black&White), run:
|
||||
|
||||
```console
|
||||
make bake
|
||||
@@ -42,19 +43,21 @@ You can check the files in the folder `book/release/`
|
||||
|
||||
## 🍞 Baking the book locally (LaTeX)
|
||||
|
||||
Make sure you have `biber` and `latexmk` installed. Refer to your system's
|
||||
installation instructions for LaTeX. To create the serif .pdf format, run:
|
||||
Make sure you have `biber`, `latexmk` and ``ImageMagick`` installed. Refer to
|
||||
your system's installation instructions for LaTeX. To create the serif .pdf
|
||||
format, run:
|
||||
|
||||
```console
|
||||
cd book/
|
||||
make
|
||||
```
|
||||
|
||||
If you want to 🍞 bake all the versions including ebook formats (.pdf, .epub, .mobi, .azw3) run:
|
||||
If you want to 🍞 bake all the versions including ebook variants (.pdf, .epub
|
||||
in colour and size optimized Black&White), run:
|
||||
|
||||
```console
|
||||
cd book/
|
||||
make bake
|
||||
make -j bake
|
||||
```
|
||||
|
||||
You can check the files in the folder `book/release/`
|
||||
@@ -71,17 +74,17 @@ The below versions are automatically built on every push to the `main` branch.
|
||||
|
||||
* [Download compiled .pdf version](https://www.the-bread-code.io/book.pdf)
|
||||
* [Download compiled .epub version](https://www.the-bread-code.io/book.epub)
|
||||
* [Download compiled .mobi version](https://www.the-bread-code.io/book.mobi)
|
||||
* [Download compiled .azw3 version](https://www.the-bread-code.io/book.azw3)
|
||||
|
||||
There's an additional enhanced accessibility version using a sans serif font:
|
||||
There's an additional enhanced accessibility version using a sans-serif font:
|
||||
|
||||
* [Download compiled .pdf version](https://www.the-bread-code.io/book-sans-serif.pdf)
|
||||
* [Download compiled .epub version](https://www.the-bread-code.io/book-sans-serif.epub)
|
||||
* [Download compiled .mobi version](https://www.the-bread-code.io/book-sans-serif.mobi)
|
||||
* [Download compiled .azw3 version](https://www.the-bread-code.io/book-sans-serif.azw3)
|
||||
* [Download compiled sans-serif .pdf version](https://www.the-bread-code.io/book-sans-serif.pdf)
|
||||
|
||||
## Online HTML version (WIP)
|
||||
An additional black and white ebook is provided with a greatly reduced file
|
||||
size. This shrinks the book from more than 50MB down to ~5MB:
|
||||
|
||||
* [Download compiled B&W .epub version](https://www.the-bread-code.io/bw-book.epub)
|
||||
|
||||
## Online HTML version
|
||||
|
||||
Head over to [https://www.the-sourdough-framework.com](https://www.the-sourdough-framework.com)
|
||||
|
||||
@@ -123,3 +126,14 @@ me to dedicate time to continuously update and improve this book.
|
||||
|
||||
* [My YouTube channel](https://youtube.com/c/thebreadcode)
|
||||
* [Ask a question on Discord](https://breadco.de/discord)
|
||||
|
||||
## License
|
||||
|
||||
This work is licensed under a [Creative Commons Attribution-ShareAlike 4.0
|
||||
International License][cc-by-sa].
|
||||
|
||||
[![CC BY-SA 4.0][cc-by-sa-image]][cc-by-sa]
|
||||
|
||||
[cc-by-sa]: http://creativecommons.org/licenses/by-sa/4.0/
|
||||
[cc-by-sa-image]: https://licensebuttons.net/l/by-sa/4.0/88x31.png
|
||||
[cc-by-sa-shield]: https://img.shields.io/badge/License-CC%20BY--SA%204.0-lightgrey.svg
|
||||
|
||||
@@ -1,34 +1,28 @@
|
||||
\chapter{Baking}%
|
||||
\label{chapter:baking}
|
||||
\begin{quoting}
|
||||
Baking refers to the part of the process where you are loading
|
||||
your dough into the oven. This is typically done after your
|
||||
dough has gone through the bulk fermentation and proofing stage.
|
||||
Baking refers to the part of the process where you are loading your dough into
|
||||
the oven\footnote{While some breads like flatbreads could also be baked on the
|
||||
stove. This chapter focuses on the home oven.}. Baking is typically done after
|
||||
your dough has gone through the bulk fermentation and proofing stage. This
|
||||
chapter will review what happens to your dough during baking, as well as
|
||||
several techniques used to improve the final result.
|
||||
\end{quoting}
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\input{figures/fig-baking-process.tex}
|
||||
\caption[Different steaming methods]{A schematic visualization of the baking
|
||||
process using different sources of steam in a home oven.}%
|
||||
\label{fig:baking-process}
|
||||
\end{center}
|
||||
\end{flowchart}
|
||||
|
||||
Some other breads like flatbreads
|
||||
could also be baked on the stove. This chapter focuses on the
|
||||
home oven.
|
||||
|
||||
As the dough heats up, the water and acids
|
||||
in your dough start to evaporate. When baking
|
||||
a gluten based dough, the bubbles in your dough start to expand.
|
||||
Your dough starts to vertically rise. This is called oven spring.
|
||||
Your bread starts to build a crust of gel-like consistency. The crust is still
|
||||
extensible and can be stretched.
|
||||
\section{The process of baking}
|
||||
Once temperature starts to rise, the dough will go through several stages as
|
||||
summarized in Table~\ref{tab:baking-stages}. As the dough heats up, the water
|
||||
and acids in your dough start to evaporate. When baking a gluten based dough,
|
||||
the bubbles in your dough start to expand. The dough starts to vertically
|
||||
rise, this is called oven spring. Your bread starts to build a crust of
|
||||
gel-like consistency, the crust is still extensible and can be stretched.
|
||||
|
||||
\begin{table}[htp!]
|
||||
\begin{center}
|
||||
\input{tables/table-baking-process-stages.tex}
|
||||
\caption[Stages of dough during backing]{The different stages that
|
||||
your dough undergoes during the baking process.}
|
||||
\caption[Stages of dough during baking]{The different stages that
|
||||
your dough undergoes during the baking process.}%
|
||||
\label{tab:baking-stages}
|
||||
\end{center}
|
||||
\end{table}
|
||||
|
||||
@@ -41,28 +35,38 @@ More research should be done here to validate or invalidate this
|
||||
claim.
|
||||
|
||||
At \qty{75}{\degreeCelsius} (\qty{167}{\degF}) the surface of your dough turns into a gel. It
|
||||
holds together nicely and is still extensible. This gel is essential
|
||||
for oven spring as it retains the gas of your dough very well.
|
||||
holds together nicely but is still extensible. This gel is essential
|
||||
for oven spring as it retains the gas inside your dough.
|
||||
|
||||
At around \qty{100}{\degreeCelsius} (\qty{212}{\degF}) the water starts to evaporate out of your
|
||||
dough. If this weren't the case, your dough would taste soggy and
|
||||
doughy. The higher hydration your dough has, the more water your bread
|
||||
still contains after the bake. The crumb is going to taste a bit
|
||||
more moist. The consistency will be different.
|
||||
doughy. The higher the hydration your dough has, the more water your bread
|
||||
still contains after the bake, changing its consistency. As a result the
|
||||
crumb is going to taste a bit more moist.
|
||||
|
||||
Another often undervalued step is the evaporation of acids. At
|
||||
\qty{118}{\degreeCelsius} (\qty{244}{\degF}) the acetic acid in your dough starts to evaporate.
|
||||
Shortly after at \qty{122}{\degreeCelsius} (\qty{252}{\degF}) the lactic acid begins evaporating.
|
||||
This is crucial to understand and opens a door to many interesting
|
||||
The water starts to boil out of the
|
||||
dough. As the water evaporates the surrounding dough is being cooled.
|
||||
For this reason, the internal temperature of the dough never exceeds the aforementioned
|
||||
\qty{100}{\degreeCelsius} (\qty{212}{\degF}). The bread's crust can exceed the boiling point
|
||||
and continues increasing in size from the outer layer inwards~\cite{bread+temperature+baking}.
|
||||
|
||||
Another often undervalued step is the evaporation of acids.
|
||||
At~\qty{118}{\degreeCelsius} (\qty{244}{\degF}) the acetic acid in your dough
|
||||
starts to evaporate.
|
||||
Shortly after at~\qty{122}{\degreeCelsius} (\qty{252}{\degF}) the lactic acid begins evaporating.
|
||||
This is crucial to understand and it opens the door to many interesting
|
||||
ways to influence your final bread's taste. As more and more water
|
||||
begins to evaporate the acids in your dough become more concentrated.
|
||||
There is less water but in relation you have more acids. A shorter
|
||||
bake will therefore lead to a more tangy dough. The longer you bake the bread,
|
||||
There is less water but in relation you have more acids, therefore a shorter
|
||||
bake will lead to a more tangy dough. The longer you bake the bread,
|
||||
the more of the water evaporates, but also ultimately the acids will follow.
|
||||
They will be more concentrated. In absolute units, though, they
|
||||
will become less and less. The longer you bake, the less sour
|
||||
your bread is going to be. By baking you can
|
||||
influence which sourness level you would like to achieve.
|
||||
The longer you bake, the less sour your bread is going to be. By controlling
|
||||
baking time you can influence which sourness level you would like to achieve.
|
||||
|
||||
It would be a very interesting experiment to bake a bread at different exact
|
||||
temperatures. How would a bread taste with only evaporated water but
|
||||
full acidity? What if you were to just completely get rid of the acetic
|
||||
acid? How would the taste change?
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\includegraphics[width=\textwidth]{baking-experiment-temperatures.png}
|
||||
@@ -71,21 +75,17 @@ influence which sourness level you would like to achieve.
|
||||
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}
|
||||
|
||||
It would be a very interesting experiment to bake a bread at different exact
|
||||
temperatures. How would a bread taste with only evaporated water but
|
||||
full acidity? What if you were to just completely get rid of the acetic
|
||||
acid? How would the taste change?
|
||||
As the temperature increases further the crust thickens. The Maillard reaction
|
||||
kicks in, deforming proteins and starches. The outside of your dough starts to
|
||||
become browner and crisper, this process begins at
|
||||
around~\qty{140}{\degreeCelsius} (\qty{284}{\degF})
|
||||
|
||||
As the temperature increases
|
||||
the crust thickens. The Maillard reaction kicks in, further deforming
|
||||
proteins and starches. The outside of your dough starts to become
|
||||
browner and crisper. This process begins at around \qty{140}{\degreeCelsius} (\qty{284}{\degF})
|
||||
|
||||
Once the temperature increases even more to around \qty{170}{\degreeCelsius} (\qty{338}{\degF}),
|
||||
the caramelization process begins. The remaining sugars the microbes
|
||||
Once the temperature increases even more to around~\qty{170}{\degreeCelsius}
|
||||
(\qty{338}{\degF}),
|
||||
the caramelization process begins, the remaining sugars and the microbes which
|
||||
did not convert yet start to brown and darken. You can keep baking
|
||||
for as long as you like to achieve the crust color that you
|
||||
like\footnote{This really depends a lot on your personal preference.
|
||||
@@ -95,65 +95,53 @@ heat your bread in the oven one more time to continue building a
|
||||
darker crust.}.
|
||||
|
||||
The best method to know that your dough is done is to take
|
||||
the temperature of your dough. You can use a barbecue thermometer
|
||||
to measure it. Once the core temperature is at around \qty{92}{\degreeCelsius} (\qty{197}{\degF}),
|
||||
the temperature of your dough, you can use a barbecue thermometer
|
||||
to measure it. Once the core temperature is at around~\qty{92}{\degreeCelsius}
|
||||
(\qty{197}{\degF}),
|
||||
you can stop the baking process. This is typically not done though
|
||||
as the crust hasn't been built yet\footnote{The thermometer is
|
||||
especially important when using a large loaf pan. It is sometimes
|
||||
very hard to judge from the outside if the dough is done. I~failed
|
||||
many times and ended up having a semi baked dough.}.
|
||||
|
||||
Once your dough has finished baking, it is ready to eat. Your
|
||||
Once your dough has finished baking, it is ready to eat: your
|
||||
dough has turned into a bread. At this
|
||||
point, your bread is sterile as the temperature was too hot for
|
||||
for the microorganisms to survive\footnote{I~wonder though
|
||||
if a starter culture could be grown again from a slice of bread.
|
||||
Under heat stress the microorganisms begin sporulating. Maybe
|
||||
some of the spores survive the baking process and could be reactivated
|
||||
later? If this worked, you could use any store bought sourdough
|
||||
later? If this works, you could use any store bought sourdough
|
||||
bread as a source for a new starter.}.
|
||||
|
||||
\section{The role of steam}
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\includegraphics[width=\textwidth]{oven-example}
|
||||
\caption[Home oven baking example to maximize steam]{My default home oven setup. The tray of rocks
|
||||
and tray on top of the rolls greatly improve the steaming capabilities. This way the bread can
|
||||
rise more during the initial stage of the baking process.}
|
||||
\end{figure}
|
||||
|
||||
Steam is essential when baking as it helps to counter premature
|
||||
crust building. During the first stage of the bake, the dough
|
||||
increases in size. The water in your dough evaporates and pushes
|
||||
increases in size as the water in your dough evaporates and pushes
|
||||
the whole dough upwards.
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\includegraphics[width=\textwidth]{baking-process-steam.jpg}
|
||||
\caption[Steam building with inverted tray]{How steam builds in your oven
|
||||
using the later described inverted tray method.}
|
||||
\end{figure}
|
||||
|
||||
Normally, under high heat a crust would form. Just like
|
||||
if you were to bake vegetables in your home oven, at some point
|
||||
they become darker and crisper. This is the same thing that
|
||||
happens with your dough. You want to delay this process
|
||||
happens with your dough, and you want to delay this process
|
||||
as long as possible until your dough no longer expands.
|
||||
Expansion stops when most of the microbes have died and
|
||||
the evaporating water no longer stays inside the alveoli.
|
||||
|
||||
The stronger the gluten network, the more gas can be retained
|
||||
during the baking process. This gluten network at some point
|
||||
loses its ability to contain gas as the temperature heats
|
||||
up. The dough stops increasing in size. The steam plays
|
||||
an important role as it condenses and evaporates on top
|
||||
of your dough. The surface temperature is rapidly increasing
|
||||
to around \qty{75}{\degreeCelsius} (\qty{160}{\degF}). At this temperature the gel starts
|
||||
to build. This gel is still extensible and allows expansion.
|
||||
to around~\qty{75}{\degreeCelsius} (\qty{160}{\degF}). At this temperature the
|
||||
gel starts to build, and is still extensible and allows expansion.
|
||||
Without the steam, the dough would never enter the gel stage,
|
||||
but instead directly go to the Maillard reaction zone. You
|
||||
want your dough to stay in this gel stage as long as possible
|
||||
to achieve maximum expansion\footnote{You can remove your
|
||||
dough from the oven after 5~minutes to see the gel. You will notice
|
||||
that it holds the dough's structure. It has a very interesting consistency.}.
|
||||
that it holds the dough's structure and it has a very interesting consistency.}.
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\includegraphics[width=\textwidth]{baking-process-stage-2.jpg}
|
||||
@@ -164,10 +152,9 @@ that it holds the dough's structure. It has a very interesting consistency.}.
|
||||
When not steaming enough, you will notice that the scoring
|
||||
incisions do not properly open up during the bake. They stay
|
||||
closed as the dough is unable to push through the crust.
|
||||
|
||||
Another common sign is that you have larger pockets
|
||||
of air towards the crust of your dough. As the dough increases
|
||||
vertically, expansion is halted by the crust. The pockets
|
||||
Another common sign, as you can see in Figure~\ref{fig:too-little-steam} is
|
||||
that you have larger pockets of air towards the crust of your dough. As the
|
||||
dough increases vertically, expansion is halted by the crust. The pockets
|
||||
of air converge into larger pockets as the pressure increases.
|
||||
This can also happen when you are baking at too high a temperature.
|
||||
|
||||
@@ -184,10 +171,35 @@ way.
|
||||
\caption[Bread baked too hot]{A submission by Karomizu showing a bread that
|
||||
has been baked at too high a temperature or with too little steam. Note
|
||||
the large pockets of air towards the crust. They are a typical
|
||||
indicator.}
|
||||
indicator.}%
|
||||
\label{fig:too-little-steam}
|
||||
\end{figure}
|
||||
|
||||
\section{Dutch ovens}
|
||||
\section{Building up steam}
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\input{figures/fig-baking-process.tex}
|
||||
\caption[Different steaming methods]{A schematic visualization of the baking
|
||||
process using different sources of steam in a home oven.}%
|
||||
\label{fig:baking-process}
|
||||
\end{center}
|
||||
\end{flowchart}
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\includegraphics[width=\textwidth]{oven-example}
|
||||
\caption[Home oven baking example to maximize steam]{My default home oven setup. The tray of rocks
|
||||
and tray on top of the rolls greatly improve the steaming capabilities. This way the bread can
|
||||
rise more during the initial stage of the baking process.}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\includegraphics[width=\textwidth]{baking-process-steam.jpg}
|
||||
\caption[Steam building with inverted tray]{How steam builds in your oven
|
||||
using the later described inverted tray method.}%
|
||||
\label{flc:inverted-tray}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Dutch ovens}
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\includegraphics[width=\textwidth]{dutch-oven-example}
|
||||
@@ -239,18 +251,19 @@ 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.
|
||||
|
||||
An additional disadvantage of Dutch ovens is the
|
||||
need to move very hot and heavy cast iron. \footnote{
|
||||
need to move very hot and heavy cast iron\footnote{%
|
||||
Some of them can weigh up to 10 kg. Moving them is quite
|
||||
a tedious exercise. Especially if the cast iron is
|
||||
heated you have to be very concise with your movements.
|
||||
Despite doing my best I have a few scars on my
|
||||
hands and arms from operating the Dutch ovens.
|
||||
} You will need to be very careful and ideally use
|
||||
}.
|
||||
You will need to be very careful and ideally use
|
||||
heat-resilient gloves when touching your Dutch oven.
|
||||
|
||||
Furthermore, some of the Dutch ovens come at a hefty
|
||||
@@ -259,24 +272,24 @@ top of other tools can be quite a hefty investment. For
|
||||
this reason, I advocate the inverted tray method visualized
|
||||
in the next section. In case you do not own an oven consider trying
|
||||
the simple flatbread recipe which is baked in a pan. Please
|
||||
refer to section \ref{section:flat-bread-recipe} for more details.
|
||||
refer to Section~\ref{subsec:flat-bread-recipe} for more details.
|
||||
|
||||
|
||||
\section{Inverted tray method}
|
||||
\subsection{Inverted tray method}
|
||||
|
||||
The inverted tray method simulates a Dutch oven.
|
||||
By placing another tray on top of your dough, the steam
|
||||
created from the dough and water source stays
|
||||
around your dough.
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\input{figures/fig-inverted-tray-method.tex}
|
||||
\caption[Inverted tray baking process]{A schematic visualization the
|
||||
inverted tray baking method that works great for home ovens.}%
|
||||
\label{fig:inverted-tray-process}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
\end{flowchart}
|
||||
|
||||
|
||||
The biggest advantage of this method compared to the
|
||||
|
||||
@@ -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
|
||||
@@ -321,7 +323,7 @@ inoculated with some of the 150 different wild yeast strains isolated from the
|
||||
leaves. They found that when the wound was inoculated with yeast, the grape
|
||||
sustained no significant damage~\cite{yeasts+biocontrol+agent}.
|
||||
|
||||
\phantomsection \label{aggressive-yeast}%
|
||||
\phantomsection~\label{aggressive-yeast}%
|
||||
Intriguingly, there was also an experiment performed that showed how brewer's
|
||||
yeast could function as an aggressive pathogen to grapevines. Initially, the
|
||||
yeast lived in symbiosis with the plants, but after the vines sustained heavy
|
||||
@@ -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}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
\ifdefined\HCode\else\tableofcontents\fi
|
||||
}
|
||||
|
||||
\input{intro/foreword}
|
||||
\input{intro/preface}
|
||||
\input{intro/acknowledgements}
|
||||
|
||||
@@ -28,45 +27,37 @@
|
||||
|
||||
\input{basics/how-sourdough-works}
|
||||
|
||||
\chapter{Making a sourdough starter}
|
||||
\input{sourdough-starter/sourdough-starter}
|
||||
|
||||
\chapter{Sourdough starter types}
|
||||
\input{sourdough-starter/sourdough-starter-types}
|
||||
|
||||
\chapter{Flour types}
|
||||
\input{flour-types/flour-types}
|
||||
|
||||
\chapter{Bread types}
|
||||
\input{bread-types/bread-types}
|
||||
|
||||
\chapter{Wheat sourdough}%
|
||||
\label{chapter:wheat-sourdough}
|
||||
\input{wheat-sourdough/wheat-sourdough}
|
||||
|
||||
\chapter{Non wheat sourdough}%
|
||||
\label{chapter:non-wheat-sourdough}
|
||||
\input{non-wheat-sourdough/non-wheat-sourdough}
|
||||
|
||||
% \input{mix-ins/mix-ins.tex}
|
||||
\chapter{Baking}%
|
||||
\label{chapter:baking}
|
||||
\input{mix-ins/mix-ins.tex}
|
||||
|
||||
\input{baking/baking}
|
||||
|
||||
\chapter{Storing bread}%
|
||||
\label{chapter:storing-bread}
|
||||
\input{storing-bread/storing-bread}
|
||||
|
||||
\chapter{Troubleshooting}
|
||||
\input{troubleshooting/misc}
|
||||
|
||||
\backmatter
|
||||
\printbibliography
|
||||
\input{glossary/glossary}
|
||||
{%
|
||||
\hypersetup{hidelinks}
|
||||
\listofflowcharts
|
||||
\listoftables
|
||||
\listoffigures
|
||||
}
|
||||
\printbibliography
|
||||
|
||||
\end{document}
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
book.mk4
|
||||
@@ -1,4 +1,2 @@
|
||||
\def\isaccessible{1}
|
||||
% We have to use a symlink to book.tex to prevent tex4ebook to load book.ht4
|
||||
% before loading any other package and create conflicts
|
||||
\input{sourdough_book.tex}
|
||||
\input{book.tex}
|
||||
|
||||
@@ -1,11 +1,23 @@
|
||||
\chapter{Bread types}%
|
||||
\label{ch:bread-types}
|
||||
\begin{quoting}
|
||||
In this chapter you will learn about different bread types and their
|
||||
advantages and disadvantages. At the end of this chapter you can find a very
|
||||
simple flatbread recipe. This is probably the most accessible, least effort
|
||||
type of bread you can make. If you are a busy person and/or don't have an
|
||||
oven, this might be exactly the type of bread you should consider.
|
||||
advantages and disadvantages. You can also find very simple recipes for
|
||||
flatbread and pan loaf. The former is probably the most accessible, least
|
||||
effort type of bread you can make, while the latter is a little more involved.
|
||||
Free standing bread has its own chapter, due to its increased complexity.
|
||||
\end{quoting}
|
||||
|
||||
\section{Introduction}%
|
||||
\label{sec:intro}
|
||||
|
||||
In this section we classify bread by its baking techniques. The appearance and
|
||||
taste will of course be different, but you can get excellent bread with each
|
||||
of them. Some breads will require investment and technique, as depicted in
|
||||
Table~\ref{tab:bread-types-comparison}. Flatbread is probably the most
|
||||
accessible, least effort type of bread you can make. If you are a busy person
|
||||
and/or don’t have an oven, this might be exactly the type of bread you should
|
||||
consider.
|
||||
\begin{table}[!htb]
|
||||
\begin{center}
|
||||
\input{tables/table-overview-bread-types.tex}
|
||||
@@ -15,38 +27,278 @@ oven, this might be exactly the type of bread you should consider.
|
||||
\end{center}
|
||||
\end{table}
|
||||
|
||||
\section{Flatbread}
|
||||
\section{Flatbread}%
|
||||
\label{sec:flatbread}
|
||||
|
||||
Flatbread is probably the simplest sourdough bread to make.
|
||||
To make a flatbread no oven is required; all you need is a stove.
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\includegraphics[width=\textwidth]{sourdough-stove}
|
||||
\caption[Einkorn done on open fire]{An einkorn flatbread made directly over
|
||||
fire. This is part of a video where I~was trying to reproduce sourdough
|
||||
recipes of our ancestors. I~called the recipe ``cave bread''. Some
|
||||
viewers pointed out that probably not all our ancestors lived in caves.}
|
||||
\includegraphics[width=\textwidth]{flat-breads-selection}
|
||||
\caption[Flatbread selection with different flours]{An assorted selection of
|
||||
different flatbreads made with sourdough. From left to right:
|
||||
Wheat~tortilla, rye, spelt and corn.}%
|
||||
\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
|
||||
will trap the gasses. During baking, these gasses will
|
||||
will trap the gases. During baking, these gases will
|
||||
inflate the dough.
|
||||
|
||||
Another trick to improve the texture of the flatbread is to
|
||||
make a very wet dough. A lot of the water will evaporate
|
||||
during the baking process and thus make the bread fluffier.
|
||||
|
||||
If your water content is very high, it will produce a
|
||||
pancake-like consistency.
|
||||
pancake-like consistency, as you can see in
|
||||
Table~\ref{tab:flat-bread-ingredients}
|
||||
|
||||
Refer to Section~\ref{section:flat-bread-recipe}~``\nameref{section:flat-bread-recipe}''
|
||||
to see a full recipe including the process of making such a flatbread.
|
||||
\begin{table}[!htb]
|
||||
\begin{center}
|
||||
\input{tables/table-flat-bread-pancake-recipe.tex}
|
||||
\caption[Flatbread recipe]{Flatbread or pancake recipe for 1 person.
|
||||
Multiply the ingredients to increase portion size. Refer to the
|
||||
Section~\ref{section:bakers-math}
|
||||
``\nameref{section:bakers-math}'' to learn how to understand and
|
||||
use the percentages properly.}%
|
||||
\label{tab:flat-bread-ingredients}
|
||||
\end{center}
|
||||
\end{table}
|
||||
|
||||
For a full recipe including the process of making such a flatbread, refer to
|
||||
Subsection~\ref{subsec:flat-bread-recipe}
|
||||
|
||||
\subsection{Flatbread framework}%
|
||||
\label{subsec:flat-bread-framework}
|
||||
|
||||
As explained above, if you are just getting started, making a flatbread is the
|
||||
easiest way to start making great bread at home. With just a
|
||||
few steps, you can stop buying bread forever. This works with
|
||||
any flour, including gluten-free options.
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\input{figures/fig-process-flat-bread.tex}
|
||||
\caption[The process to make a sourdough flatbread]{The process of making a flatbread is very
|
||||
simple, requiring very little effort. This type of bread is especially
|
||||
handy for busy bakers.}%
|
||||
\label{fig:flat-bread-process}
|
||||
\end{center}
|
||||
\end{flowchart}
|
||||
|
||||
This is my go-to recipe that I~use to make bread whenever
|
||||
I~have little time or when I~am abroad. You can choose
|
||||
between two options:
|
||||
%
|
||||
\begin{enumerate}
|
||||
\item A flatbread similar to a roti or naan bread
|
||||
\item Sourdough pancakes.
|
||||
\end{enumerate}
|
||||
|
||||
To get started prepare your sourdough starter. If it has not been used for a very
|
||||
long time, consider giving it another feed. To do so, simply take \qty{1}{\gram} of your
|
||||
existing sourdough starter and feed it with \qty{5}{\gram} of flour and \qty{5}{\gram} of water.
|
||||
If you do this in the morning, your sourdough starter will be ready in the evening. The
|
||||
warmer it is, the sooner it will be ready, consider
|
||||
using warm water if it is very cold where you live.
|
||||
|
||||
\begin{figure}[htb!]
|
||||
\begin{center}
|
||||
\includegraphics[width=1.0\textwidth]{flat-bread-wheat}
|
||||
\caption[Wheat flatbread]{A flatbread made with purely wheat flour. The
|
||||
dough is drier at around \qty{60}{\percent} hydration. The drier dough
|
||||
is a little harder to mix. As wheat contains more gluten, the dough
|
||||
puffs up during the baking process.}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
|
||||
This way you should have around \qty{11}{\gram} of sourdough ready in the evening. You will have
|
||||
the perfect quantity to make a dough for one person. In case you want to make more
|
||||
bread, simply multiply the quantities shown in
|
||||
Table~\ref{tab:flat-bread-ingredients}.
|
||||
|
||||
Then in the evening simply mix the ingredients as shown in the table. Your dough
|
||||
is going to be ready in the morning. It's typically ready after 6--12~hours. If
|
||||
you use more sourdough starter it will be ready faster, conversely it will take
|
||||
longer if you use less. Try to aim for a fermentation time of 8--12~hours as
|
||||
by using your dough too soon, the flavor might not be as good. By using your
|
||||
dough later it might become a little more sour. The best option is to
|
||||
experiment and see what you personally like the most.
|
||||
|
||||
After mixing the ingredients together cover the container, this prevents the
|
||||
dough from drying out and makes
|
||||
sure no fruit flies get access. A transparent container will be helpful
|
||||
when getting started. You can observe the dough more easily and see when
|
||||
it is ready.
|
||||
|
||||
\begin{figure}[htb]
|
||||
\begin{center}
|
||||
\includegraphics[width=1.0\textwidth]{ethiopian-woman-checking-bread}
|
||||
\caption[Ethiopian \emph{injera}]{An Ethiopian woman baking an \emph{injera}
|
||||
made using teff flour. The image has been provided by Charliefleurene
|
||||
via Wikipedia.}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
|
||||
If you used the flatbread option with less water, look at the size increase
|
||||
of your dough. It should have increased at least \qty{50}{\percent} in size.
|
||||
Also look out for bubbles on the sides of your container.
|
||||
|
||||
When using the pancake recipe, look out for bubbles on the surface of your dough.
|
||||
In both cases use your nose to check the scent of your dough. Depending
|
||||
on your sourdough starter's microbiome your dough will have
|
||||
dairy, fruity, alcoholic notes or vinegary, acetic notes. Relying
|
||||
on the smell of your dough is the best way to judge whether your
|
||||
dough is ready or not. Timings are not reliable as they
|
||||
depend on your starter and the temperature. If your dough
|
||||
is ready too soon, you can now move it directly to the fridge and bake
|
||||
it at a later, more convenient time. The low temperature will halt the fermentation
|
||||
process\footnote{There are some exceptions. In some rare cases your starter
|
||||
might also work at lower temperatures. You might have cultivated microbes that work best at
|
||||
low temperatures. Nevertheless, fermentation
|
||||
is always slower the colder it gets. A fridge really helps to preserve the state
|
||||
of your dough.}
|
||||
and your dough will last for several days. The longer you wait, the more sour the
|
||||
bread is going to be. The fridge is a great option in case you want to
|
||||
take the dough with you when visiting friends. People are going
|
||||
to love you for the freshly baked flatbreads or pancakes. If you dare,
|
||||
you can also taste a little bit of your raw uncooked dough. It is likely
|
||||
going to taste relatively sour. I~do this frequently to better evaluate the
|
||||
state of my doughs.
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\begin{center}
|
||||
\includegraphics[width=1.0\textwidth]{injera-pancake-texture.jpg}
|
||||
\caption[Teff sourdough pancake]{A sourdough pancake made with teff flour.
|
||||
The pockets come from evaporated water and \ch{CO2} created by the
|
||||
microbes. The image has been provided by Łukasz Nowak via Wikipedia.}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
|
||||
If you are feeling lazy or don't have time, you could also use older sourdough starter
|
||||
to make the dough directly without any prior starter feedings. Your sourdough starter
|
||||
is going to regrow inside your dough. Remember that the
|
||||
final bread might be a bit more on the sour side as the balance of yeast to
|
||||
bacteria could be off. In the Table~\ref{tab:flat-bread-ingredients}
|
||||
I~recommended using around \qtyrange{5}{20}{\percent}
|
||||
of sourdough starter based on the flour to make the dough. If you were to follow
|
||||
this approach, just use around \qty{1}{\percent} and make the dough directly.
|
||||
The dough is probably going to be ready 24~hours later, depending on the temperature.
|
||||
|
||||
If you want to make sweet pancakes, add some sugar and optional eggs to your dough
|
||||
now. A good quantity of eggs is around one~egg per \qty{100}{\gram} of flour.
|
||||
Stir your dough a little bit and it will be ready to be used. You'll
|
||||
have delicious sweet savory pancakes, the perfect combination. By
|
||||
adding the sugar now, you make sure that the microbes don't have
|
||||
enough time to fully ferment it. If you had added the sugar
|
||||
earlier, no sweet flavor would be left 12~hours later.
|
||||
|
||||
To bake your dough heat your stove to medium temperature. Add a little bit of
|
||||
oil to the pan. This helps with heat distribution and ensures even cooking.
|
||||
With a spatula or a spoon place your dough in the pan. If your dough
|
||||
was sitting in the fridge, bake it directly. There is no need to wait for your
|
||||
dough to come to room temperature. If you have a lid,
|
||||
place it on your pan. The lid helps to cook your dough from the top.
|
||||
The evaporating water will circulate and heat up the dough's surface. When
|
||||
making a flatbread, make the dough around \qty{1}{\cm} thick. When using the
|
||||
pancake option, opt for around \qtyrange{0.1}{0.5}{\cm} depending on what you
|
||||
like.
|
||||
|
||||
\begin{figure}[htb]
|
||||
\begin{center}
|
||||
\includegraphics[width=1.0\textwidth]{einkorn-crumb.jpg}
|
||||
\caption[Einkorn crum]{The crumb of a flatbread made with einkorn as flour.
|
||||
Einkorn is very low in gluten and thus does not trap as much \ch{CO2} as
|
||||
a wheat based dough. To make the dough fluffier use more water or
|
||||
consider adding more wheat to the mix of your dough.}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
|
||||
After 2--4~minutes flip over the pancake or flatbread. Bake it for the same
|
||||
time from the other side. Depending on what you like, you can wait a little
|
||||
longer to allow the bread to become a bit charred. The longer you
|
||||
bake your bread, the more of the acidity is going to evaporate. If your
|
||||
dough is a bit more on the sour side, you can use this trick to balance
|
||||
out the acidity. This really depends on which flavor you are looking for.
|
||||
|
||||
When making a flatbread I~recommend wrapping the baked flatbreads in a kitchen
|
||||
towel. This way more of the evaporating humidity stays inside of your bread,
|
||||
making sure your flatbreads stay nice and fluffy for a longer period after the
|
||||
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. 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
|
||||
a little bit of water and flour and store this mixture in your fridge
|
||||
for as long as you like\footnote{The starter will stay good for months. If you expect to
|
||||
leave it longer, consider drying a little bit of your sourdough starter.}.
|
||||
|
||||
\subsection{Simple flatbread recipe}%
|
||||
\label{subsec:flat-bread-recipe}
|
||||
|
||||
By following the steps outlined in this section,
|
||||
you'll be introduced to a versatile bread that's perfect for a myriad of
|
||||
culinary applications. Whether you're scooping up a savory dip,
|
||||
wrapping a flavorful filling, or simply enjoying a piece with a drizzle
|
||||
of olive oil, these flatbreads are sure to impress.
|
||||
|
||||
\subsubsection*{Ingredients}
|
||||
|
||||
\begin{tabular}{r@{}rl@{}}
|
||||
\qty{400}{\gram} &~(\qty{100}{\percent}) & Flour (wheat, rye, corn, whatever you have at hand)\\
|
||||
\qty{320}{\gram} & (\qty{80}{\percent}) & Water, preferably at room temperature\\
|
||||
\qty{80}{\gram} & (\qty{20}{\percent}) & Active sourdough starter\\
|
||||
\qty{8}{\gram} & (\qty{2}{\percent}) & Salt\\
|
||||
\end{tabular}
|
||||
|
||||
\subsubsection*{Instructions}
|
||||
\begin{description}
|
||||
\item[Prepare the dough] In a large mixing bowl, combine the flour and water.
|
||||
Mix until you have a shaggy dough with no dry spots.
|
||||
|
||||
Add the sourdough starter and salt to the mixture. Incorporate them thoroughly
|
||||
until you achieve a smooth and homogenized dough.
|
||||
|
||||
\item[Fermentation:] Cover the bowl with a lid or plastic wrap. Allow the dough
|
||||
to rest and ferment until it has increased by at least \qty{50}{\percent}
|
||||
in size. Depending on the temperature and activity of your starter, this
|
||||
can take anywhere from 4 to 24~hours.
|
||||
|
||||
\item[Cooking preparation:] Once the dough has risen, heat a pan over medium heat.
|
||||
Lightly oil the pan, ensuring to wipe away any excess oil with a paper towel.
|
||||
|
||||
\item[Shaping and cooking:] With a ladle or your hands, scoop out a portion of
|
||||
the dough and place it onto the hot pan, spreading it gently like a pancake.
|
||||
|
||||
Cover the pan with a lid. This traps the steam and ensures even cooking
|
||||
from the top, allowing for easier flipping later.
|
||||
|
||||
After about 5~minutes, or when the bottom of the flatbread has a
|
||||
golden-brown crust, carefully flip it using a spatula.
|
||||
|
||||
\emph{Adjusting cook time.} If the flatbread appears too dark,
|
||||
remember to reduce the cooking time slightly for the next one.
|
||||
Conversely, if it's too pale, allow it to cook a bit longer before flipping.
|
||||
|
||||
Cook the flipped side for an additional 5~minutes or until it's also golden
|
||||
brown.
|
||||
|
||||
\item[Storing:] Once cooked, remove the flatbread from the pan and place it on a
|
||||
kitchen towel. Wrapping the breads in the towel will help retain their
|
||||
softness and prevent them from becoming overly crisp.
|
||||
Repeat the cooking process for the remaining dough.
|
||||
|
||||
\item[Serving suggestion:] Enjoy your sourdough flatbreads warm,
|
||||
paired with your favorite dips, spreads, or as a side to any meal.
|
||||
|
||||
\end{description}
|
||||
\section{Loaf pan bread}
|
||||
|
||||
Loaf pan bread is made using the help of a special loaf pan
|
||||
@@ -93,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}
|
||||
@@ -134,15 +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
|
||||
@@ -154,186 +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.
|
||||
|
||||
\section{Simple flatbread recipe}%
|
||||
\label{section:flat-bread-recipe}
|
||||
|
||||
If you are just getting started, making a flatbread is the
|
||||
easiest way to start making great bread at home. With just a
|
||||
few steps, you can stop buying bread forever. This works with
|
||||
any flour, including gluten-free options.
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\input{figures/fig-process-flat-bread.tex}
|
||||
\caption[Flat bread process]{The process of making a flatbread is very
|
||||
simple, requiring very little effort. This type of bread is especially
|
||||
handy for busy bakers.}%
|
||||
\label{fig:flat-bread-process}
|
||||
\end{center}
|
||||
\end{flowchart}
|
||||
|
||||
This is my go-to recipe that I~use to make bread whenever
|
||||
I~have little time or when I~am abroad. You can choose
|
||||
between two options:
|
||||
%
|
||||
\begin{enumerate}
|
||||
\item A flatbread similar to a roti or naan bread
|
||||
\item sourdough pancakes.
|
||||
\end{enumerate}
|
||||
|
||||
\begin{table}[!htb]
|
||||
\begin{center}
|
||||
\input{tables/table-flat-bread-pancake-recipe.tex}
|
||||
\caption[Flatbread recipe]{Flatbread or pancake recipe for 1 person.
|
||||
Multiply the ingredients to increase portion size. Refer to the
|
||||
Section~\ref{section:bakers-math}
|
||||
``\nameref{section:bakers-math}'' to learn how to understand and
|
||||
use the percentages properly.}%
|
||||
\label{tab:flat-bread-ingredients}
|
||||
\end{center}
|
||||
\end{table}
|
||||
|
||||
To get started prepare your sourdough starter. If it has not been used for a very
|
||||
long time, consider giving it another feed. To do so simply take \qty{1}{\gram} of your
|
||||
existing sourdough starter and feed it with \qty{5}{\gram} of flour and \qty{5}{\gram} of water.
|
||||
If you do this in the morning, your sourdough starter will be ready in the evening. The
|
||||
warmer it is, the sooner it will be ready. If it is very cold where you live, consider
|
||||
using warm water.
|
||||
|
||||
\begin{figure}[htb!]
|
||||
\begin{center}
|
||||
\includegraphics[width=1.0\textwidth]{flat-bread-wheat}
|
||||
\caption[Wheat flatbread]{A flatbread made with purely wheat flour. The
|
||||
dough is drier at around \qty{60}{\percent} hydration. The drier dough
|
||||
is a little harder to mix. As wheat contains more gluten, the dough
|
||||
puffs up during the baking process.}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
|
||||
This way you should have around \qty{11}{\gram} of sourdough ready in the evening. You will have
|
||||
the perfect quantity to make a dough for one person. In case you want to make more
|
||||
bread, simply multiply the quantities shown in
|
||||
Table~\ref{tab:flat-bread-ingredients}.
|
||||
|
||||
Then in the evening simply mix the ingredients as shown in the table. Your dough
|
||||
is going to be ready in the morning. It's typically ready after 6--12~hours. If
|
||||
you use more sourdough starter, it will be ready faster. If you use less it will take
|
||||
longer. Try to aim for a fermentation time of 8--12~hours. If you use
|
||||
your dough too soon, the flavor might not be as good. If you use it later
|
||||
your dough might be a little more sour. The best option is to experiment
|
||||
and see what you personally like the most.
|
||||
|
||||
After mixing the ingredients together, cover the container in which
|
||||
you made the dough. This prevents the dough from drying out and makes
|
||||
sure no fruit flies get access. A transparent container will be helpful
|
||||
when getting started. You can observe the dough more easily and see when
|
||||
it is ready.
|
||||
|
||||
\begin{figure}[htb!]
|
||||
\begin{center}
|
||||
\includegraphics[width=1.0\textwidth]{ethiopian-woman-checking-bread}
|
||||
\caption[Ethiopian \emph{injera}]{An Ethiopian woman baking an \emph{injera}
|
||||
made using teff flour. The image has been provided by Charliefleurene
|
||||
via Wikipedia.}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
|
||||
If you used the flatbread option with less water, look at the size increase
|
||||
of your dough. The dough should have increased at least \qty{50}{\percent} in size.
|
||||
Also look out for bubbles on the sides of your container.
|
||||
When using the pancake recipe, look out for bubbles on the surface of your dough.
|
||||
In both cases use your nose to check the scent of your dough. Depending
|
||||
on your sourdough starter's microbiome your dough will have
|
||||
dairy, fruity, alcoholic notes or vinegary, acetic notes. Relying
|
||||
on the smell of your dough is the best way to judge whether your
|
||||
dough is ready or not. Timings are not reliable as they
|
||||
depend on your starter and the temperature. If your dough
|
||||
is ready too soon, you can now move it directly to the fridge and bake
|
||||
it at a later, more convenient time. The low temperature will halt the fermentation
|
||||
process\footnote{There are some exceptions. In some rare cases your starter
|
||||
might also work at lower temperatures. You might have cultivated microbes that work best at
|
||||
low temperatures. Nevertheless, fermentation
|
||||
is always slower the colder it gets. A fridge really helps to preserve the state
|
||||
of your dough.}.
|
||||
and your dough will last for several days. The longer you wait, the more sour the
|
||||
bread is going to be. The fridge is a great option in case you want to
|
||||
take the dough with you when visiting friends. People are going
|
||||
to love you for the freshly baked flatbreads or pancakes. If you dare,
|
||||
you can also taste a little bit of your raw uncooked dough. It is likely
|
||||
going to taste relatively sour. I~do this frequently to better evaluate the
|
||||
state of my doughs.
|
||||
|
||||
|
||||
\begin{figure}[htb!]
|
||||
\begin{center}
|
||||
\includegraphics[width=1.0\textwidth]{injera-pancake-texture.jpg}
|
||||
\caption[Teff sourdough pancake]{A sourdough pancake made with teff flour.
|
||||
The pockets come from evaporated water and \ch{CO2} created by the
|
||||
microbes. The image has been provided by Lukasz Nowak via Wikipedia.}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
|
||||
If you are feeling lazy or don't have time, you could also use older sourdough starter
|
||||
to make the dough directly without any prior starter feedings. Your sourdough starter
|
||||
is going to regrow inside your dough. The
|
||||
final bread might be a bit more on the sour side as the balance of yeast to
|
||||
bacteria could be off. In the Table~\ref{tab:flat-bread-ingredients}
|
||||
I~recommended using around \qtyrange{5}{20}{\percent}
|
||||
of sourdough starter based on the flour to make the dough. If you were to follow
|
||||
this approach, just use around \qty{1}{\percent} and make the dough directly.
|
||||
The dough is probably going to be ready 24~hours later, depending on the temperature.
|
||||
|
||||
If you want to make sweet pancakes, add some sugar and optional eggs to your dough
|
||||
now. A good quantity of eggs is around 1 egg per \qty{100}{\gram} of flour.
|
||||
Stir your dough a little bit and it will be ready to be used. You'll
|
||||
have delicious sweet savory pancakes, the perfect combination. By
|
||||
adding the sugar now, you make sure that the microbes don't have
|
||||
enough time to fully ferment it. If you had added the sugar
|
||||
earlier, no sweet flavor would be left 12~hours later.
|
||||
|
||||
To bake your dough heat your stove to medium temperature. Add a little bit of
|
||||
oil to the pan. This helps with heat distribution and ensures even cooking.
|
||||
With a spatula or a spoon place your dough in the pan. If your dough
|
||||
was sitting in the fridge, bake it directly. There is no need to wait for your
|
||||
dough to come to room temperature. If you have a lid,
|
||||
place it on your pan. The lid helps to cook your dough from the top.
|
||||
The evaporating water will circulate and heat up the dough's surface. When
|
||||
making a flatbread, make the dough around \qty{1}{\cm} thick. When using the
|
||||
pancake option, opt for around \qtyrange{0.1}{0.5}{\cm} depending on what you
|
||||
like.
|
||||
|
||||
\begin{figure}[htb!]
|
||||
\begin{center}
|
||||
\includegraphics[width=1.0\textwidth]{einkorn-crumb.jpg}
|
||||
\caption[Einkorn crum]{The crumb of a flatbread made with einkorn as flour.
|
||||
Einkorn is very low in gluten and thus does not trap as much \ch{CO2} as
|
||||
a wheat based dough. To make the dough fluffier use more water or
|
||||
consider adding more wheat to the mix of your dough.}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
|
||||
After 2--4~minutes flip over the pancake or flatbread. Bake it for the same
|
||||
time from the other side. Depending on what you like, you can wait a little
|
||||
longer to allow the bread to become a bit charred. The longer you
|
||||
bake your bread, the more of the acidity is going to evaporate. If your
|
||||
dough is a bit more on the sour side, you can use this trick to balance
|
||||
out the acidity. This really depends on which flavor you are looking for.
|
||||
|
||||
When making a flatbread I~recommend wrapping the baked flatbreads
|
||||
in a kitchen towel. This way more of the evaporating humidity
|
||||
stays inside of your bread. This makes sure your flatbreads stay
|
||||
nice and fluffy for a longer period after the 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.
|
||||
|
||||
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
|
||||
a little bit of water and flour and store this mixture in your fridge
|
||||
for as long as you like\footnote{The starter will stay good for months. If you expect to
|
||||
leave it longer, consider drying a little bit of your sourdough starter.}.
|
||||
There is a dedicated recipe and tutorial for this type of bread in the
|
||||
\nameref{chapter:wheat-sourdough} chapter.
|
||||
|
||||
BIN
book/cover/CC-BY-SA.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
@@ -29,9 +29,17 @@
|
||||
% Whitespace between the title block and the copyright text
|
||||
\vspace{0.5\textheight}
|
||||
|
||||
{\noindent The full source code for the book is available at \\
|
||||
\url{https://github.com/hendricius/the-sourdough-framework/} under MIT
|
||||
license. Do not hesitate to report mistakes or sug\-gestions for
|
||||
improvements. A hardcover version of the book is also available. More information here:
|
||||
\url{https://www.breadco.de/hardcover-book}}\\[\baselineskip]
|
||||
|
||||
{\noindent
|
||||
\begin{flushleft}
|
||||
\includegraphics[width=3cm]{cover/CC-BY-SA}\par
|
||||
The full source code for the book is available at
|
||||
\url{https://github.com/hendricius/the-sourdough-framework/} under CC-BY-SA
|
||||
license.
|
||||
See \url{https://creativecommons.org/licenses/by-sa/4.0/} for more details.
|
||||
Do not hesitate to report mistakes or sug\-gestions for
|
||||
improvements. A hardcover version of the book is also available. More
|
||||
information here: \url{https://www.breadco.de/hardcover-book}
|
||||
\end{flushleft}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,23 +1,22 @@
|
||||
\begin{tikzpicture}[node distance = 3cm, auto]
|
||||
\begin{tikzpicture}[node distance = 4cm, auto]
|
||||
\node [start] (heat_oven) {Heat oven to \qty{230}{\degreeCelsius} (\qty{446}{\degF}) for 30~minutes};
|
||||
\node [block, right of=heat_oven, node distance=3cm] (score_dough) {Score your dough};
|
||||
\node [block, right of=heat_oven] (score_dough) {Score your dough};
|
||||
\node [decision, right of=score_dough, node distance=4cm] (decide_steam) {Choose your steaming method};
|
||||
\node [block, below of=heat_oven, node distance=4cm] (inverted_tray_method) {Inverted tray method};
|
||||
\node [block, right of=inverted_tray_method, node distance=3cm] (dutch_oven) {Dutch oven};
|
||||
\node [block, right of=dutch_oven, node distance=3cm] (steam_injection) {Steam injection oven};
|
||||
\node [block, below of=inverted_tray_method, node distance=3cm] (bake_30) {Bake dough for 30~minutes with steam};
|
||||
\node [block, right of=bake_30, node distance=3cm] (remove_steam) {Remove source of steam};
|
||||
\node [block, right of=remove_steam, node distance=3cm] (build_crust) {Build the crust};
|
||||
\node [success, right of=build_crust, node distance=3cm] (finish_baking) {Stop baking 10--30~minutes later depending on crust preference};
|
||||
\node [block, below of=decide_steam, node distance=3.5cm] (dutch_oven) {Dutch oven};
|
||||
\node [block, left of=dutch_oven] (inverted_tray_method) {Inverted tray method};
|
||||
\node [block, right of=dutch_oven] (steam_injection) {Steam injection oven};
|
||||
\node [block, below of=dutch_oven, node distance=3cm] (bake_30) {Bake dough for 30~minutes with steam};
|
||||
\node [block, below of=bake_30, node distance=3cm] (remove_steam) {Remove source of steam};
|
||||
\node [success, right of=remove_steam] (finish_baking) {Stop baking 10--30~minutes later depending on crust preference};
|
||||
\path [line] (heat_oven) -- (score_dough);
|
||||
\path [line] (score_dough) -- (decide_steam);
|
||||
\path [line] (decide_steam) -- (inverted_tray_method);
|
||||
\path [line] (decide_steam) -- (inverted_tray_method.north east);
|
||||
\path [line] (decide_steam) -- (dutch_oven);
|
||||
\path [line] (decide_steam) -- (steam_injection);
|
||||
\path [line] (steam_injection) -- (bake_30);
|
||||
\path [line] (inverted_tray_method) -- (bake_30);
|
||||
\path [line] (decide_steam) -- (steam_injection.north west);
|
||||
\path [line] (steam_injection.south west) -- (bake_30.north east);
|
||||
\path [line] (inverted_tray_method.south east) -- (bake_30.north west);
|
||||
\path [line] (dutch_oven) -- (bake_30);
|
||||
\path [line] (bake_30) -- (remove_steam);
|
||||
\path [line] (remove_steam) -- (build_crust);
|
||||
\path [line] (build_crust) -- (finish_baking);
|
||||
\path [line] (remove_steam) -- (finish_baking);
|
||||
\draw[BC, decoration=mirror] (remove_steam.south west) ++(0, -0.3) -- node[below=1em]{Building crust}(finish_baking.south east);
|
||||
\end{tikzpicture}
|
||||
|
||||
@@ -1,25 +1,28 @@
|
||||
\begin{tikzpicture}[node distance = 3cm, auto]
|
||||
\node [start] (init) {Bulk fermentation};
|
||||
\node [block, right of=init] (check_dough) {Check the dough};
|
||||
\node [block, right of=init, node distance=4cm] (check_dough) {Check the dough};
|
||||
\node [block, right of=check_dough, node distance=4cm] (size_increase) {Check dough size increase};
|
||||
\node [block, below of=size_increase, node distance=2cm] (ph_value) {Check dough pH value};
|
||||
\node [block, below of=ph_value, node distance=2cm] (smell) {Check dough smell};
|
||||
\node [decision, right of=ph_value, node distance=4cm] (dough_ready) {Dough ready?};
|
||||
\node [success, below of=dough_ready] (divide_preshape) {Divide and preshape};
|
||||
\node [decision, below of=smell] (dough_flattened) {Dough flattened out?};
|
||||
\node [block, below of=check_dough, node distance=3cm] (wait_60_minutes) {Wait\\ 60~minutes};
|
||||
\node [block, below of=wait_60_minutes, node distance=4cm] (stretch_fold) {Stretch and fold};
|
||||
\node [decision, right of=size_increase, node distance=4cm] (dough_ready) {Dough ready?};
|
||||
\node [success] at(dough_ready |- smell) (divide_preshape) {Divide and preshape};
|
||||
\node [decision, above of=size_increase] (dough_flattened) {Dough flattened out?};
|
||||
\node [block, above of=check_dough] (wait_60_minutes) {Wait\\ 60~minutes};
|
||||
\node [block, above of=wait_60_minutes] (stretch_fold) {Stretch and fold};
|
||||
|
||||
\path [line] (init) -- (check_dough);
|
||||
\path [line] (check_dough) -- (size_increase);
|
||||
\path [line] (check_dough) -- node{or} (ph_value);
|
||||
\path [line] (check_dough) -- node{or} (smell);
|
||||
% Tricks not to get double lines
|
||||
\path [line] (check_dough) ++(2, -2) -- node{or} (ph_value);
|
||||
\path [line] (check_dough) ++(2, 0) -- node{} ++(0, -4) -- node{or} (smell);
|
||||
\path [line] (check_dough) ++(2, -4) -- node{or} (smell);
|
||||
\path [line] (size_increase) -- (dough_ready);
|
||||
\path [line] (ph_value) -- (dough_ready);
|
||||
\path [line] (smell) -- (dough_ready);
|
||||
% Same tricks not to get double lines and also we do _not_ want arrows
|
||||
\path [draw, thick] (ph_value) -- node{} ++(2, 0);
|
||||
\path [draw, thick] (smell) -| node{} ++(2, 4);
|
||||
\path [line] (dough_ready) -- node{yes} (divide_preshape);
|
||||
\path [line] (dough_ready) -- node{no} (dough_flattened);
|
||||
\path [line] (dough_flattened) -- node{yes} (stretch_fold);
|
||||
\path [line] (dough_ready) |- node[right=3pt]{no} (dough_flattened);
|
||||
\path [line] (dough_flattened) |- node[right=3pt]{yes} (stretch_fold);
|
||||
\path [line] (dough_flattened) -- node{no} (wait_60_minutes);
|
||||
\path [line] (stretch_fold) -- (wait_60_minutes);
|
||||
\path [line] (wait_60_minutes) -- (check_dough);
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
\node [start] (init) {Dividing required?};
|
||||
\node [decision, right of=init, node distance=5cm] (more_than_one_loaf) {More than 1 loaf?};
|
||||
\node [success, right of=more_than_one_loaf, node distance=5cm] (yes) {Yes};
|
||||
\node [success, below of=yes, node distance=3cm] (no) {No};
|
||||
\node [success, below of=yes] (no) {No};
|
||||
\path [line] (init) -- (more_than_one_loaf);
|
||||
\path [line] (more_than_one_loaf) -- (yes);
|
||||
\path [line] (more_than_one_loaf) -- (no);
|
||||
\path [line] (more_than_one_loaf.south) -- node{} ++(0, -1) |- (no);
|
||||
\end{tikzpicture}
|
||||
|
||||
@@ -7,14 +7,13 @@
|
||||
\node [block, below of=spritz] (close) {Close DO};
|
||||
\node [block, left of=close] (back_oven) {Place DO back in oven};
|
||||
\node [block, left of=back_oven] (bake) {Bake 30~minutes at \qty{230}{\degreeCelsius} (\qty{446}{\degF})};
|
||||
\node [block, below of=heat_oven] (wait_5_minutes) {Wait\\ 5 minutes};
|
||||
\node [decision, below of=wait_5_minutes, node distance=4cm] (is_ready_check) {Core temperature \qty{92}{\degreeCelsius} (\qty{197}{\degF})?};
|
||||
\node [decision, below right= 5cm and -1 cm of heat_oven] (is_ready_check)
|
||||
{Core temperature \qty{92}{\degreeCelsius} (\qty{197}{\degF})?};
|
||||
\node [block, below of=is_ready_check, node distance=4cm] (wait_5_minutes) {Wait\\ 5 minutes};
|
||||
\node [block, right of=is_ready_check, node distance=4cm] (remove_do_lid) {Remove DO lid};
|
||||
\node [block, right of=wait_5_minutes] (test_temperature_again) {Test core temperature again};
|
||||
\node [decision, right of=remove_do_lid, node distance=4cm] (dark_enough_decision) {Crust color dark enough?};
|
||||
\node [success, below of=dark_enough_decision] (finish_baking) {Bread is finished};
|
||||
\node [block, below of=close] (test_crust_again) {Test crust color again};
|
||||
\node [block, below of=test_crust_again] (bake_5_more_minutes) {Bake another 5~minutes};
|
||||
\node [decision, right of=remove_do_lid, node distance=3.5cm] (dark_enough_decision) {Crust color dark enough?};
|
||||
\node [success, below of=dark_enough_decision, node distance=4cm] (finish_baking) {Bread is finished};
|
||||
\node [block, right of=dark_enough_decision, node distance=3.5cm] (bake_5_more_minutes) {Bake another 5~minutes};
|
||||
\path [line] (heat_oven) -- (remove_oven);
|
||||
\path [line] (remove_oven) -- (open_load_dough);
|
||||
\path [line] (open_load_dough) -- (score);
|
||||
@@ -22,14 +21,12 @@
|
||||
\path [line] (spritz) -- (close);
|
||||
\path [line] (close) -- (back_oven);
|
||||
\path [line] (back_oven) -- (bake);
|
||||
\path [line] (bake) -- (is_ready_check);
|
||||
\path [line] (bake.west) -- node{} ++(-2, 0) -| (is_ready_check.north);
|
||||
\path [line] (is_ready_check) -- node{yes} (remove_do_lid);
|
||||
\path [line] (is_ready_check) -- node{no} (wait_5_minutes);
|
||||
\path [line] (wait_5_minutes) -- (test_temperature_again);
|
||||
\path [line] (test_temperature_again) -- (is_ready_check);
|
||||
\path [line] (wait_5_minutes.west) -- node{} ++(-1.5, 0) |- (is_ready_check.west);
|
||||
\path [line] (remove_do_lid) -- (dark_enough_decision);
|
||||
\path [line] (dark_enough_decision) -- node{yes} (finish_baking);
|
||||
\path [line] (dark_enough_decision) -- node{no} (bake_5_more_minutes);
|
||||
\path [line] (bake_5_more_minutes) -- (test_crust_again);
|
||||
\path [line] (test_crust_again) -- (dark_enough_decision);
|
||||
\path [line] (bake_5_more_minutes.east) -- node{} ++(1, 0) -- node{} ++(0, 2.3) -| (dark_enough_decision.north);
|
||||
\end{tikzpicture}
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
\begin{tikzpicture}[node distance = 3cm, auto]
|
||||
\begin{tikzpicture}[node distance = 4cm, auto]
|
||||
\node [start] (init) {Homogenize recipe ingredients};
|
||||
\node [block, right of=init, node distance=3cm] (wait1) {Wait\\15~minutes};
|
||||
\node [block, right of=init] (wait1) {Wait\\15~minutes};
|
||||
\path [line] (init) -- (wait1);
|
||||
\node [block, right of=wait1, node distance=3cm] (knead1) {Knead 5~minutes};
|
||||
\path [line] (wait1) -- (knead1);
|
||||
\node [block, right of=knead1, node distance=3cm] (wait2) {Wait\\15~minutes};
|
||||
\path [line] (knead1) -- (wait2);
|
||||
\node [decision, below of=wait2, node distance=3cm] (windowpane_test) {Window-pane?};
|
||||
\node [block, right of=wait1] (knead) {Knead 5~minutes};
|
||||
\path [line] (wait1) -- (knead);
|
||||
\node [block, right of=knead] (wait2) {Wait\\15~minutes};
|
||||
\path [line] (knead) -- (wait2);
|
||||
\node [decision, below of=wait2, node distance=4cm] (windowpane_test) {Window-pane?};
|
||||
\path [line] (wait2) -- (windowpane_test);
|
||||
\path [line] (windowpane_test) -- node{no} (knead1);
|
||||
\node [decision, left of=windowpane_test, node distance=4.5cm] (more_water) {Bassinage for more water?};
|
||||
\path [line] (windowpane_test.east) -- node{no} ++(1, 0) -- node{} ++(0, 5.7) -| (knead.north);
|
||||
\node [decision] at (windowpane_test -| knead) (more_water) {Bassinage for more water?};
|
||||
\path [line] (windowpane_test) -- node{yes} (more_water);
|
||||
\node [block, left of=more_water, node distance=4.5cm] (add_water) {Add water};
|
||||
\node [block] at (wait1 |- more_water) (add_water) {Add water};
|
||||
\path [line] (more_water) -- node{yes} (add_water);
|
||||
\path [line] (add_water) -- (knead1);
|
||||
\node [decision, below of=more_water, node distance=3.5cm] (dough_sample) {Aliquot sample?};
|
||||
\path [line] (add_water.north east) -- (knead.south west);
|
||||
\node [decision, below of=more_water, node distance=4.5cm] (dough_sample) {Aliquot sample?};
|
||||
\path [line] (more_water) -- node{no} (dough_sample);
|
||||
\node [block, right of=dough_sample, node distance=4.5cm] (dough_ball) {Make round dough ball};
|
||||
\node [block] at (dough_sample -| wait2) (dough_ball) {Make round dough ball};
|
||||
\path [line] (dough_sample) -- node{no} (dough_ball);
|
||||
\node [block, below of=dough_sample, node distance=3cm] (extract_sample) {Extract sample};
|
||||
\node [block, below of=dough_sample] (extract_sample) {Extract sample};
|
||||
\path [line] (dough_sample) -- node{yes} (extract_sample);
|
||||
\path [line] (extract_sample) -- (dough_ball);
|
||||
\node [success, below of=dough_ball, node distance=3cm] (begin_bulk) {Begin bulk fermentation};
|
||||
\path [line] (extract_sample.north east) -- (dough_ball.south west);
|
||||
\node [success, below of=dough_ball] (begin_bulk) {Begin bulk fermentation};
|
||||
\path [line] (dough_ball) -- (begin_bulk);
|
||||
\end{tikzpicture}
|
||||
|
||||
69
book/figures/fig-life-planet-sourdough-timeline.tex
Normal file
@@ -0,0 +1,69 @@
|
||||
\begin{tikzpicture}
|
||||
% Draw horizontal line
|
||||
\draw[line width=1pt] (0,0) -- (\textwidth,0);
|
||||
|
||||
% Define the width of each segment
|
||||
\pgfmathsetlengthmacro{\segmentwidth}{\textwidth/12}
|
||||
|
||||
% Draw lines for the events, higher up so that they don't overflow the text
|
||||
% Placing the lines has been a bit manual work of trying different values
|
||||
% Maritime bacteria.
|
||||
|
||||
\draw[line width=1pt] (2.8*\segmentwidth,1) -- (2.8*\segmentwidth,0.2);
|
||||
% Eukaryotes
|
||||
\draw[line width=1pt] (5.8*\segmentwidth,1.5) -- (5.8*\segmentwidth,0.2);
|
||||
% First bacteria on land
|
||||
\draw[line width=1pt] (9.1*\segmentwidth,-1.25) -- (9.1*\segmentwidth,-0.2);
|
||||
% Maritime fungi ancestors
|
||||
\draw[line width=1pt] (9.5*\segmentwidth,-2) -- (9.5*\segmentwidth,-0.2);
|
||||
% Fungi on land
|
||||
\draw[line width=1pt] (10.8*\segmentwidth,-2.75) -- (10.8*\segmentwidth,-0.2);
|
||||
% Yeasts on land
|
||||
\draw[line width=1pt] (11.1*\segmentwidth,-3.0) -- (11.1*\segmentwidth,-0.2);
|
||||
% First dinosaurs
|
||||
\draw[line width=1pt] (11.4*\segmentwidth,0.5) -- (11.4*\segmentwidth,0.2);
|
||||
% Pangea begins to rift apart
|
||||
\draw[line width=1pt] (11.6*\segmentwidth,1) -- (11.6*\segmentwidth,0.2);
|
||||
% Dinosaur extinction
|
||||
\draw[line width=1pt] (11.9*\segmentwidth,1.5) -- (11.9*\segmentwidth,0.2);
|
||||
% Additional line for dinosaurs since it is so close
|
||||
\draw[line width=1pt] (11.9*\segmentwidth,1.49) -- (11.70*\segmentwidth,1.85);
|
||||
|
||||
% Special lines for december events since they are so close togehter
|
||||
\draw[line width=1pt] (12.0*\segmentwidth,3.0) -- (12.0*\segmentwidth,0.2); % Main branch
|
||||
\draw[line width=1pt] (12.0*\segmentwidth,3.0) -- (11.75*\segmentwidth,2.5); % Branch to first humans
|
||||
\draw[line width=1pt] (12.0*\segmentwidth,3.0) -- (11.75*\segmentwidth,3.0); % Branch to Jordan
|
||||
% Move pasteur down a bit so the lines look like they cross
|
||||
\draw[line width=1pt] (12.0*\segmentwidth,2.99) -- (11.75*\segmentwidth,3.5); % Branch to Pasteur
|
||||
|
||||
% Draw months and month separators
|
||||
\foreach \i/\month in {0/Jan, 1/Feb, 2/Mar, 3/Apr, 4/May, 5/Jun, 6/Jul, 7/Aug, 8/Sep, 9/Oct, 10/Nov, 11/Dec} {
|
||||
% Separators
|
||||
\draw[line width=1pt] (\i*\segmentwidth,0.1) -- (\i*\segmentwidth,-0.1);
|
||||
% Month names
|
||||
\node[timeline_event, below] at ({(\i+0.5)*\segmentwidth},-0.1) {\month};
|
||||
}
|
||||
\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] {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);
|
||||
|
||||
% Place events on the timeline with dates using the timeline_event style
|
||||
% As a calculation I used (4.54 billion years / 12 months = 0.3785 billion years/month.
|
||||
\node[timeline_event, above] at (2.5*\segmentwidth,1) {Mar 25:~First maritime bacteria and archae};
|
||||
\node[timeline_event, above] at (4.50*\segmentwidth,1.5) {June 25:~First organisms with nuklei (eukaryotes)};
|
||||
\node[timeline_event, above] at (7.8*\segmentwidth,-1.5) {Oct 4:~First bacteria on land};
|
||||
\node[timeline_event, above] at (8.0*\segmentwidth,-2.25) {Oct 15:~First maritime ancestors of fungi};
|
||||
\node[timeline_event, above] at (9.7*\segmentwidth,-2.75) {Nov 24:~Fungi on land};
|
||||
\node[timeline_event, above] at (10.5*\segmentwidth,-3.25) {Dec 3:~Yeasts on land};
|
||||
\node[timeline_event, above] at (10.2*\segmentwidth,0.5) {Dec 14:~First dinosaurs};
|
||||
\node[timeline_event, above] at (9.8*\segmentwidth,1) {Dec 17:~Pangea begins to rift apart};
|
||||
\node[timeline_event, above] at (10.15*\segmentwidth,1.5) {Dec 29:~Dinosaurs go extinct};
|
||||
\node[timeline_event, above, anchor=east, align=right] at (11.75*\segmentwidth,2.5) {Dec 31:~First humans};
|
||||
\node[timeline_event, above, anchor=east, align=right] at (11.75*\segmentwidth,3.0) {Dec 31:~Sourdough in Jordan (23:59:55)};
|
||||
\node[timeline_event, above, anchor=east, align=right] at (11.75*\segmentwidth,3.5) {Dec 31:~Louis Pasteur isolated yeast (23:59:59)};
|
||||
|
||||
\end{tikzpicture}
|
||||
@@ -1,19 +1,17 @@
|
||||
\begin{tikzpicture}[node distance = 3cm, auto]
|
||||
\node [start] (init) {Make a regular or stiff starter};
|
||||
\begin{tikzpicture}[node distance = 5cm, auto]
|
||||
\node [start] (init) {Take your regular or stiff starter};
|
||||
\node [block, right of=init] (feed_new_ratio) {Mix \qty{1}{\gram} existing starter, \qty{5}{\gram} flour and \qty{25}{\gram} water};
|
||||
\node [block, right of=feed_new_ratio] (next_day) {Wait\\ \qty{24}{\hour}};
|
||||
\node [block, below of=init, node distance=4cm] (feed_again) {Feed again using 1:5:25 ratio};
|
||||
\node [block, right of=next_day, node distance=5cm] (test) {Check starter readiness?};
|
||||
\node [decision, below of=next_day, node distance=4cm] (ready_signs) {Sour yogurty smell and bubbles visible on flour?};
|
||||
\node [block, below of=test, node distance=4cm] (last_feed) {Feed one last time};
|
||||
\node [success, below of=last_feed, node distance=3cm] (bread_dough) {Make bread dough};
|
||||
\node [decision, below of=feed_new_ratio, node distance=5cm] (ready_signs) {Sour yogurty smell and bubbles visible on flour?};
|
||||
\node [block, right of=ready_signs, node distance=4cm] (feed_again) {Feed again using 1:5:25 ratio};
|
||||
\node [block, left of=ready_signs, node distance=5cm] (last_feed) {Feed one last time};
|
||||
\node [success, below of=last_feed, node distance=4cm] (bread_dough) {Make bread dough};
|
||||
\path [line] (init) -- (feed_new_ratio);
|
||||
\path [line] (feed_new_ratio) -- (next_day);
|
||||
\path [line] (feed_again) -- node{repeat 3 times} (feed_new_ratio);
|
||||
\path [line] (next_day) -- node{after 3~days} (test);
|
||||
\path [line] (next_day) -- (feed_again);
|
||||
\path [line] (test) -- (ready_signs);
|
||||
\path [line] (feed_new_ratio) -- node{Wait \qty{24}{\hour}} (ready_signs);
|
||||
\path [line] (feed_again) -- node[anchor=east] {} ++(2.2,0) |- (feed_new_ratio);
|
||||
\path [line] (ready_signs) -- node{no} (feed_again);
|
||||
\path [line] (ready_signs) -- node{yes} (last_feed);
|
||||
\path [line] (ready_signs) -- node[above=2pt]{~yes} (last_feed);
|
||||
\path [line] (last_feed) -- node{after \qtyrange{6}{12}{\hour}} (bread_dough);
|
||||
\draw [thick, ->] ($ (feed_again.north) +(0.7cm, 1cm)$) arc (-45:220:1cm);
|
||||
\node [anchor=north, text width=5em] at ($(feed_again.north west)+(1.8cm, 2.3cm)$) {Repeat 3~times};
|
||||
|
||||
\end{tikzpicture}
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
\begin{tikzpicture}[node distance = 3cm, auto]
|
||||
\node [start] (init) {Mix ingredients};
|
||||
\node [block, below of=init, node distance=3cm] (bulk_ferment) {Bulk ferment};
|
||||
\node [block, right of=init, node distance=3cm] (divide) {Divide};
|
||||
\node [block, below of=divide, node distance=3cm] (shape) {Shape};
|
||||
\node [block, right of=divide, node distance=3cm] (proof) {Proof};
|
||||
\node [success, below of=proof, node distance=3cm] (bake) {Bake};
|
||||
\begin{tikzpicture}[node distance = 3.8cm, auto]
|
||||
\node [start] (init) {Mix \\ingredients};
|
||||
\node [block, below of=init, node distance = 3cm] (bulk_ferment) {Bulk ferment};
|
||||
\node [block, right of=init] (divide) {Divide};
|
||||
\node [block] at (divide |- bulk_ferment) (shape) {Shape};
|
||||
\node [block, right of=divide] (proof) {Proof};
|
||||
\node [success] at (proof |- bulk_ferment) (bake) {Bake};
|
||||
\path [line] (init) -- (bulk_ferment);
|
||||
\path [line] (bulk_ferment) -- (divide);
|
||||
\path [line] (bulk_ferment.north east) -- (divide.south west);
|
||||
\path [line] (divide) -- (shape);
|
||||
\path [line] (shape) -- (proof);
|
||||
\path [line] (shape.north east) -- (proof.south west);
|
||||
\path [line] (proof) -- (bake);
|
||||
\end{tikzpicture}
|
||||
|
||||
@@ -1,22 +1,20 @@
|
||||
\begin{tikzpicture}[node distance = 3cm, auto]
|
||||
\node [decision_start] (init) {Room temperature proofing?};
|
||||
\node [decision, right of=init, node distance=9cm] (retard_bake_decision) {Bake in less than \qty{10}{\hour} from now?};
|
||||
\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, right of=poke, node distance=4cm] (wait_poke) {Wait\\ 15~minutes};
|
||||
\node [decision, below of=poke, node distance=3cm] (dent_visible_decision) {Dent still visible after 1~minute?};
|
||||
\node [block, left of=poke] (wait_poke) {Wait\\ 15~minutes};
|
||||
\node [decision, below of=poke] (dent_visible_decision) {Dent still visible after one~minute?};
|
||||
\node [success, right of=dent_visible_decision, node distance=4cm] (bake) {Score and bake};
|
||||
\node [block, below of=retard_bake_decision, node distance=3cm] (wait_retard) {Wait\\ 15~minutes};
|
||||
\node [block, below of=wait_retard, node distance=3cm] (retard) {Proof in fridge at \qty{4}{\degreeCelsius} (\qty{40}{\degF})};
|
||||
\node [block, right of=wait_retard, node distance=3cm] (move_to_fridge) {Move dough directly to fridge};
|
||||
\node [block] at (retard_bake_decision |- poke) (wait_retard) {Wait\\ 15~minutes};
|
||||
\node [block] at (wait_retard |- bake) (retard) {Proof in fridge at \qty{4}{\degreeCelsius} (\qty{40}{\degF})};
|
||||
\path [line] (init) -- node{yes} (poke);
|
||||
\path [line] (init) -- node{no} (retard_bake_decision);
|
||||
\path [line] (poke) -- (dent_visible_decision);
|
||||
\path [line] (dent_visible_decision) -- node{yes} (bake);
|
||||
\path [line] (dent_visible_decision) -- node{no} (wait_poke);
|
||||
\path [line] (dent_visible_decision.west) -- node{no} ++(-1.4, 0) -- node{} (wait_poke.south);
|
||||
\path [line] (wait_poke) -- (poke);
|
||||
\path [line] (retard_bake_decision) -- node{yes} (wait_retard);
|
||||
\path [line] (retard_bake_decision) -- node{no} (move_to_fridge);
|
||||
\path [line] (retard_bake_decision.east) -- node{no} ++(1, 0) |- node{} (retard.east);
|
||||
\path [line] (wait_retard) -- (retard);
|
||||
\path [line] (move_to_fridge) -- (retard);
|
||||
\path [line] (retard) -- (bake);
|
||||
\end{tikzpicture}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
\begin{tikzpicture}[node distance = 3cm, auto]
|
||||
\node [start] (init) {Begin shaping};
|
||||
\node [decision, right of=init, node distance=5cm] (overfermented_decision) {Dough overly sticky or dough tears?};
|
||||
\node [decision, right of=init, node distance=4cm] (overfermented_decision) {Dough overly sticky or dough tears?};
|
||||
\node [block, right of=overfermented_decision, node distance=4cm] (overfermented) {Your dough is likely overfermented};
|
||||
\node [fail, right of=overfermented, node distance=3cm] (loafpan) {Move to loaf pan, short proof, then bake directly};
|
||||
\node [block, below of=init, node distance=4cm] (shaping_technique) {Proceed with shaping technique};
|
||||
\node [block, right of=shaping_technique, node distance=3cm] (flour) {Flour shaped dough};
|
||||
\node [block, right of=flour, node distance=3cm] (banneton) {Place upside down in banneton};
|
||||
\node [success, right of=banneton, node distance=3cm] (proof) {Begin proofing};
|
||||
\node [fail, right of=overfermented, node distance=4cm] (loafpan) {Move to loaf pan, short proof, then bake directly};
|
||||
\node [block, below of=overfermented_decision, node distance=4cm] (shaping_technique) {Proceed with shaping technique};
|
||||
\node [block, right of=shaping_technique] (flour) {Flour shaped dough};
|
||||
\node [block, right of=flour] (banneton) {Place upside down in banneton};
|
||||
\node [success, right of=banneton] (proof) {Begin proofing};
|
||||
\path [line] (init) -- (overfermented_decision);
|
||||
\path [line] (overfermented_decision) -- node{yes} (overfermented);
|
||||
\path [line] (overfermented_decision) -- node{no} (shaping_technique);
|
||||
|
||||
69
book/figures/fig-sourdough-history-timeline.tex
Normal file
@@ -0,0 +1,69 @@
|
||||
\begin{tikzpicture}
|
||||
\pgfmathsetlengthmacro{\timelinewidth}{(\textwidth-0.5cm)}
|
||||
|
||||
% Define the width of each segment
|
||||
\pgfmathsetlengthmacro{\segmentwidth}{\timelinewidth/12}
|
||||
|
||||
% Draw horizontal lines
|
||||
\draw[line width=1pt, color=hlorange] (0,0) -- (\timelinewidth/2,0);
|
||||
\draw[line width=1pt] (\timelinewidth/2,0) -- (\timelinewidth/2 +1.5*\segmentwidth/3,0);
|
||||
\draw[line width=1pt] (\timelinewidth/2 + 2*\segmentwidth/3,0) --(\timelinewidth, 0);
|
||||
\draw[line width=1pt] (\timelinewidth/2+1.5*\segmentwidth/3-5,-0.2) -- (\timelinewidth/2+1.5*\segmentwidth/3+5, 0.2);
|
||||
\draw[line width=1pt] (\timelinewidth/2+2*\segmentwidth/3-5,-0.2) -- (\timelinewidth/2+2*\segmentwidth/3+5, 0.2);
|
||||
|
||||
% Lines for periods
|
||||
\draw[stealth-stealth, line width=1pt] (0,-3.7)
|
||||
-- node[midway, timeline_timespan] {Historic breadmaking} ({\segmentwidth * 7.8},-3.7);
|
||||
\draw[stealth-stealth, line width=1pt] ({\segmentwidth * 7.8},-3.7)
|
||||
-- node[midway, timeline_timespan] {Modern bread} ({\segmentwidth * 12},-3.7);
|
||||
|
||||
% Regularly placed events, not in chronological order
|
||||
% since should be placed on top of others on the timeline
|
||||
|
||||
% BC
|
||||
\draw[line width=1pt] ({\segmentwidth*3},1.0) -- ({\segmentwidth*3},0.3)
|
||||
node[at start, left, timeline_event] {6000~BC: First beer in Egypt};
|
||||
\draw[line width=1pt] ({\segmentwidth*5.95},1.5) -- ({\segmentwidth*5.95},0.3)
|
||||
node[at start, left, timeline_event] {70~BC:~First water mill};
|
||||
|
||||
% Sourdough in Jordan
|
||||
\draw[line width=1pt] (0,-0.3) -- (0,-1.5);
|
||||
\draw[line width=1pt] (0,-1.5) -- (0.25,-1.5);
|
||||
\node[timeline_event, below, anchor=west] at (0.25,-1.5)
|
||||
{\begin{tabular}{@{}l@{}l@{}}
|
||||
\num{12000}~BC:&~Sourdough in Jordan\\
|
||||
&~Cultivation of Einkorn\\
|
||||
\end{tabular}};
|
||||
|
||||
% AD
|
||||
\draw[line width=1pt] ({\segmentwidth*10.50},1.0) -- ({\segmentwidth*10.50},0.3)
|
||||
node[at start, above, timeline_event] {\hspace{1.0cm}1950:~Modern Wheat};
|
||||
\draw[line width=1pt] ({\segmentwidth*9.60},1.5) -- ({\segmentwidth*9.60},0.3)
|
||||
node[at start, above, timeline_event] {1868:~Commercial yeast};
|
||||
\draw[line width=1pt] ({\segmentwidth*7.8},2) -- ({\segmentwidth*7.8},0.3)
|
||||
node[at start, above, timeline_event] {1680:~Discovery of microorganisms};
|
||||
|
||||
\draw[line width=1pt] ({\segmentwidth*8.80},-1.25) -- ({\segmentwidth*8.80},-0.3)
|
||||
node[at start, left, timeline_event] {1785:~Steam mill};
|
||||
\draw[line width=1pt] ({\segmentwidth*9.57},-1.75) -- ({\segmentwidth*9.57},-0.3)
|
||||
node[at start, left, timeline_event] {1857:~Isolated Yeast};
|
||||
\draw[line width=1pt] ({\segmentwidth*9.80},-2.25) -- ({\segmentwidth*9.80},-0.3)
|
||||
node[at start, left, timeline_event] {1885:~Electrical mixer};
|
||||
\draw[line width=1pt] ({\segmentwidth*11.20},-2.75) -- ({\segmentwidth*11.20},-0.3)
|
||||
node[at start, left, timeline_event] {2020:~COVID-19 Pandemic};
|
||||
|
||||
% Indicators for period
|
||||
% Draw millenary and century separators
|
||||
\foreach \i/\century in {0/-12000, 1/-10000, 2/-8000, 3/-6000, 4/-4000, 5/-2000}{
|
||||
% Separators
|
||||
\draw[line width=1pt, color=hlorange] (\i*\segmentwidth,0.1) -- (\i*\segmentwidth,-0.1);
|
||||
% Events for timeline
|
||||
\node[timeline_event, below, text=hlorange] at ({(\i)*\segmentwidth},-0.1) {\num{\century}};
|
||||
}
|
||||
\foreach \i/\century in {6/0, 7/1600, 8/1700, 9/1800, 10/1900, 11/2000, 12/2100}{
|
||||
% Separators
|
||||
\draw[line width=1pt] (\i*\segmentwidth,0.1) -- (\i*\segmentwidth,-0.1);
|
||||
% Events for timeline
|
||||
\node[timeline_event, below] at ({(\i)*\segmentwidth},-0.1) {\num{\century}};
|
||||
}
|
||||
\end{tikzpicture}
|
||||
@@ -1,19 +1,40 @@
|
||||
\begin{tikzpicture}[node distance = 3cm, auto]
|
||||
\node [start] (init) {Make a starter};
|
||||
\node [block, right of=init, node distance=3cm] (feed) {Feed your starter};
|
||||
\path [line] (init) -- (feed);
|
||||
\node [block, right of=feed, node distance=3cm] (wait_12_after_feed) {Wait\\ \qty{12}{\hour}};
|
||||
\path [line] (feed) -- (wait_12_after_feed);
|
||||
\node [block, right of=wait_12_after_feed, node distance=3cm] (ready_question) {Perform readiness check};
|
||||
\path [line] (wait_12_after_feed) -- (ready_question);
|
||||
\node [block, above of=feed, node distance=3cm] (wait_12) {Wait\\ \qty{12}{\hour}};
|
||||
\path [line] (wait_12) -- (feed);
|
||||
\node [decision, right of=ready_question, node distance=3.2cm] (is_bubbly) {Bubbly? Size Increase?};
|
||||
\path [line] (ready_question) -- (is_bubbly);
|
||||
\path [line] (is_bubbly) -- node[anchor=east, above=2pt] {no} ++(2.2,0) |- (wait_12);
|
||||
\node [decision, below of=is_bubbly, node distance=4.0cm] (check_smell) {Vinegary, or yogurt smell?};
|
||||
\path [line] (is_bubbly) -- node{yes} (check_smell);
|
||||
\node [success, below of=wait_12_after_feed, node distance=4cm] (make_dough) {Make your dough};
|
||||
\path [line] (check_smell) -- node[anchor=west, above=2pt]{yes} (make_dough);
|
||||
\path [line] (check_smell) -- node[anchor=east, above=2pt] {no} ++(2.2,0) |- (wait_12);
|
||||
\node [decision, right of=init, node distance=3.5cm] (decision_start) {Starter last fed within 3~days?};
|
||||
\node [block, right of=decision_start, text width=7em, node distance=4cm] (feed_no_branch)
|
||||
{Feed starter twice:\par \qty{48}{\hour} before\par \qtyrange{6}{12}{\hour} before};
|
||||
\node [block, below of=feed_no_branch, text width=7em, node distance=2.7cm] (feed_yes_branch)
|
||||
{Feed starter \qtyrange{6}{12}{\hour} before making dough.};
|
||||
\node [block, right of=feed_no_branch, text width=7em, node distance=4cm] (high_ratio)
|
||||
{Use a 1:10:10 ratio:\par \begin{tabular}{r@{}l}
|
||||
10&~g starter,\\
|
||||
100&~g flour, \\
|
||||
100&~g water.\end{tabular}};
|
||||
\node [block, right of=feed_yes_branch, text width=7em, node distance=4cm] (low_ratio)
|
||||
{Use a 1:5:5 ratio:\par \begin{tabular}{r@{}l}
|
||||
10&~g starter,\\
|
||||
50&~g flour, \\
|
||||
50&~g water.\end{tabular}};
|
||||
\node [decision, below of=high_ratio, node distance=6cm] (size_check)
|
||||
{Bubbly? Increased in size?};
|
||||
\node [decision, below of=decision_start, node distance=6cm] (smell_check)
|
||||
{Vinegary or yogurty smell?};
|
||||
\node [success, below of=init, node distance=6cm] (make_dough)
|
||||
{Prepare dough};
|
||||
|
||||
\path [line] (init) -- (decision_start);
|
||||
\path [line] (decision_start) -- node{no} (feed_no_branch);
|
||||
\path [line] (decision_start) -- node[below=2pt]{yes} (feed_yes_branch.north west);
|
||||
\path [line] (feed_yes_branch) -- (low_ratio);
|
||||
\path [line] (feed_no_branch) -- (high_ratio);
|
||||
\path [line] (high_ratio) -- node[anchor=east, above=2pt] {} ++(2.2,0) |-(size_check);
|
||||
\path [line] (low_ratio) -- (size_check);
|
||||
\path [line] (size_check) -- node{no} (feed_yes_branch.south east);
|
||||
\path [line] (size_check) -- node{yes} (smell_check);
|
||||
\path [line] (smell_check) -- node{no} (feed_yes_branch.south west);
|
||||
\path [line] (smell_check) -- node{yes} (make_dough);
|
||||
|
||||
% braces
|
||||
\draw[BC] (size_check.south) --
|
||||
node[below=1em]{Check if starter is ready to be used}(smell_check.south);
|
||||
\end{tikzpicture}
|
||||
|
||||
@@ -1,25 +1,24 @@
|
||||
\begin{tikzpicture}[node distance = 3cm, auto]
|
||||
\node [start] (init) {Make a regular or liquid starter};
|
||||
\node [block, right of=init] (feed_new_ratio) {Mix \qty{10}{\gram} existing starter, \qty{50}{\gram} flour and \qty{25}{\gram} water};
|
||||
\node [decision, right of=feed_new_ratio, node distance=3.5cm] (too_dry) {Starter very dry, hard to mix?};
|
||||
\begin{tikzpicture}[node distance = 4cm, auto]
|
||||
\node [start] (init) {Take your regular or liquid starter};
|
||||
\node [block, right of=init, node distance = 4cm] (feed_new_ratio) {Mix \qty{10}{\gram} existing starter, \qty{50}{\gram} flour and \qty{25}{\gram} water};
|
||||
\node [decision, right of=feed_new_ratio, node distance=5cm] (too_dry) {Starter very dry, hard to mix?};
|
||||
\node [block, right of=too_dry, node distance=4cm] (add_water) {Add more water};
|
||||
\node [block, below of=add_water, node distance=2cm] (next_day) {Wait\\ \qty{24}{\hour}};
|
||||
\node [decision, below of=too_dry, node distance=3.5cm] (repeated_3_times) {Stiff starter fed 3 times overall?};
|
||||
\node [block, below of=feed_new_ratio, node distance=3.5cm] (feed_again) {Feed again using 1:5:2.5 ratio};
|
||||
\node [decision, below of=repeated_3_times, node distance=3.5cm] (ready_signs) {Size increase and sour smell?};
|
||||
\node [block, below of=next_day, node distance=2cm] (last_feed) {Feed one last time};
|
||||
\node [block, below of=too_dry] (next_day) {Wait\\ \qty{24}{\hour}};
|
||||
\node [block] at (feed_new_ratio |- next_day) (feed_again) {Feed again using 1:5:2.5 ratio};
|
||||
\node [decision, below of=next_day, node distance=3.5cm] (ready_signs) {Size increase and sour smell?};
|
||||
\node [block] at (ready_signs -| add_water) (last_feed) {Feed one last time};
|
||||
\node [success, below of=last_feed, node distance=3cm] (bread_dough) {Make bread dough};
|
||||
\path [line] (init) -- (feed_new_ratio);
|
||||
\path [line] (feed_again) -- (feed_new_ratio);
|
||||
\path [line] (next_day) -- (repeated_3_times);
|
||||
\path [line] (repeated_3_times) -- node{yes} (ready_signs);
|
||||
\path [line] (repeated_3_times) -- node{no} (feed_again);
|
||||
\path [line] (ready_signs) -- node{no} (feed_again);
|
||||
\path [line] (next_day) -- (ready_signs);
|
||||
\path [line] (ready_signs) -- node{no} (feed_again |- last_feed) |- (feed_again.south);
|
||||
\path [line] (ready_signs) -- node{yes} (last_feed);
|
||||
\path [line] (last_feed) -- node{after \qtyrange{6}{12}{\hour}} (bread_dough);
|
||||
\path [line] (feed_new_ratio) -- (too_dry);
|
||||
\path [line] (add_water) -- (next_day);
|
||||
\path [line] (add_water.north) -- node{} ++(0, 1.3) -| (too_dry.north);
|
||||
\path [line] (too_dry) -- node{no} (next_day);
|
||||
\path [line] (too_dry) -- node{yes} (add_water);
|
||||
\path [line] (ready_signs) -- node{yes} (last_feed);
|
||||
\draw [thick, <-] ($ (feed_again.east) +(2.1cm, 0.7cm)$) arc (-45:220:1cm);
|
||||
\node [anchor=north, text width=5em] at ($(feed_again.east)+(2cm, 2cm)$) {Repeat 3~times};
|
||||
\end{tikzpicture}
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
\begin{tikzpicture}[node distance = 3cm, auto]
|
||||
\begin{tikzpicture}[node distance = 3.2cm, auto]
|
||||
\node [start] (init) {Ready starter};
|
||||
\node [block, right of=init, node distance=3cm] (mix_ingredients) {Mix ingredients};
|
||||
\node [block, right of=mix_ingredients, node distance=3cm] (dough_strength) {Create dough strength};
|
||||
\node [block, right of=dough_strength, node distance=3cm] (bulk) {Bulk ferment};
|
||||
\node [decision, below of=dough_strength, node distance=3cm] (divide_test) {Making 1 loaf?};
|
||||
\node [block, left of=divide_test, node distance=3cm] (divide) {Divide};
|
||||
\node [block, left of=divide, node distance=3cm] (preshape) {Preshape};
|
||||
\node [block, below of=preshape, node distance=3cm] (shape) {Shape};
|
||||
\node [block, right of=shape, node distance=3cm] (proof) {Proof};
|
||||
\node [success, right of=proof, node distance=3cm] (bake) {Bake};
|
||||
\node [block, right of=init] (mix_ingredients) {Mix ingredients};
|
||||
\node [block, right of=mix_ingredients] (dough_strength) {Create dough strength};
|
||||
\node [block, right of=dough_strength] (bulk) {Bulk ferment};
|
||||
\node [decision, below of=bulk] (divide_test) {Making one loaf?};
|
||||
\node [block, right of=divide_test] (divide) {Divide};
|
||||
\node [block, below of=divide] (preshape) {Preshape};
|
||||
\node [block, below of=divide_test] (shape) {Shape};
|
||||
\node [block, left of=shape] (proof) {Proof};
|
||||
\node [success, left of=proof] (bake) {Bake};
|
||||
\path [line] (init) -- (mix_ingredients);
|
||||
\path [line] (mix_ingredients) -- (dough_strength);
|
||||
\path [line] (dough_strength) -- (bulk);
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
\begin{tikzpicture}[node distance = 3cm, auto]
|
||||
\node [decision_start] (init) {Starter last fed within 3 days?};
|
||||
\node [block, right of=init, node distance=4cm] (feed_no_branch)
|
||||
{Feed starter twice. \qty{48}{\hour} before and \qtyrange{6}{12}{\hour} before};
|
||||
\node [block, below of=feed_no_branch, node distance=3cm] (feed_yes_branch)
|
||||
{Feed starter once \qtyrange{6}{12}{\hour} before making dough};
|
||||
\node [block, right of=feed_no_branch, node distance=6cm] (high_ratio)
|
||||
{Use a 1:10:10 ratio. \qty{10}{\gram} starter, \qty{100}{\gram} flour, \qty{100}{\gram} water};
|
||||
\node [block, right of=feed_yes_branch, node distance=3cm] (low_ratio)
|
||||
{Use a 1:5:5 ratio. \qty{10}{\gram} starter, \qty{50}{\gram} flour, \qty{50}{\gram} water};
|
||||
\node [block, below of=high_ratio, node distance=6cm] (check_starter)
|
||||
{Check if starter is ready to be used};
|
||||
\node [decision, below of=init, node distance=6cm] (size_check)
|
||||
{Bubbly? Increased in size?};
|
||||
\node [decision, below of=size_check, node distance=5cm] (smell_check)
|
||||
{Vinegary or yogurty smell?};
|
||||
\node [success, right of=smell_check, node distance=6cm] (make_dough)
|
||||
{Prepare dough};
|
||||
\path [line] (init) -- node{no} (feed_no_branch);
|
||||
\path [line] (init) -- node{yes} (feed_yes_branch);
|
||||
\path [line] (feed_yes_branch) -- (low_ratio);
|
||||
\path [line] (feed_no_branch) -- (high_ratio);
|
||||
\path [line] (high_ratio) -- (check_starter);
|
||||
\path [line] (low_ratio) -- (check_starter);
|
||||
\path [line] (check_starter) -- (size_check);
|
||||
\path [line] (size_check) -- node{no} (feed_yes_branch);
|
||||
\path [line] (size_check) -- node{yes} (smell_check);
|
||||
\path [line] (smell_check) -- node{no} (feed_yes_branch);
|
||||
\path [line] (smell_check) -- node{yes} (make_dough);
|
||||
\end{tikzpicture}
|
||||
@@ -1,5 +1,6 @@
|
||||
\tikzstyle{every picture}+=[font=\footnotesize\sffamily]
|
||||
\usetikzlibrary{shapes,arrows}
|
||||
\usetikzlibrary{calc, shapes, arrows, decorations.pathreplacing, calligraphy,
|
||||
positioning}
|
||||
\tikzstyle{decision} = [diamond, draw=codeblack, fill=codeblack, text=white,
|
||||
text width=4.5em, text badly centered, node distance=3cm, inner sep=0pt,
|
||||
line width=2mm]
|
||||
@@ -19,3 +20,13 @@
|
||||
text width=5em, text centered, rounded corners, minimum height=4em,
|
||||
line width=0.4mm]
|
||||
\tikzstyle{line} = [draw, -latex', thick, ->,>=to]
|
||||
|
||||
\tikzstyle{BC} = [decorate, % Brace Calligraphic
|
||||
decoration={calligraphic brace, amplitude=3mm, raise=1mm},
|
||||
very thick, pen colour={black} ]
|
||||
\tikzstyle{loop} = [arc, draw=codeblack, line width=0.4mm]
|
||||
|
||||
\tikzstyle{timeline_event}=[align=center, fill=white, inner sep=2pt]
|
||||
|
||||
\tikzstyle{timeline_timespan} = [rectangle, draw=codeblack, fill=pinkpic, text=black,
|
||||
text centered, rounded corners, line width=0.4mm]
|
||||
|
||||
@@ -1,17 +1,19 @@
|
||||
\chapter{Flour types}%
|
||||
\label{ch:flour-types}
|
||||
\begin{quoting}
|
||||
In this chapter we will have a closer look at different flour types
|
||||
and their respective categorization. We will also look at common
|
||||
ways to distinguish different flours of the same type. This way you can more confidently
|
||||
purchase the flour that you need.
|
||||
ways to distinguish different flours of the same type, this way you can more
|
||||
confidently purchase the flour you need.
|
||||
\end{quoting}
|
||||
|
||||
The most basic flour type is a whole grain flour. In this case the whole seed has
|
||||
The most basic flour type is a whole grain flour, in this case the whole seed has
|
||||
been grounded to smaller pieces. Sometimes, depending on what you want to bake,
|
||||
the hearty taste of the bran might not be desired. In this case you can use
|
||||
whiter flours. With sieves, mills remove larger parts of the hull of the seed.
|
||||
The seed already contains a pre-built germ from the plant waiting to be
|
||||
whiter flours. Together with sieves, mills remove larger parts of the seed's
|
||||
hull. The seed already contains a pre-built germ from the plant waiting to be
|
||||
activated. The whitest flour you can get is mostly just the starch part of the seed.
|
||||
Depending on which layers are still present, names are used to describe the
|
||||
Depending on which layers are still present, different names are used to describe the
|
||||
type of flour.
|
||||
|
||||
\begin{table}[!htb]
|
||||
@@ -26,8 +28,8 @@ type of flour.
|
||||
In Germany, the ash content is used to describe the flours. The lab will burn
|
||||
\qty{100}{\gram} of flour in the oven. Then afterwards the remaining ash is extracted
|
||||
and measured. Depending on the quantity the flour is categorized. If the flour
|
||||
is of type 405 then \qty{405}{\mg} of ash have remained after burning the
|
||||
flour. The more hull parts the flour has, the more minerals remain. So the
|
||||
is of type 405, then \qty{405}{\mg} of ash have remained after burning the
|
||||
flour. The more hull parts the flour has, the more minerals remain, therefore the
|
||||
higher the number, the closer the flour is to whole flour. The numbers are
|
||||
slightly different between each grain type. Generally though, the higher the
|
||||
value, the heartier the taste is going to be.
|
||||
@@ -43,15 +45,19 @@ If you compare different grain types, there are grains with high gluten, low glu
|
||||
and no gluten. Gluten is what enables bread to have its fluffy consistency.
|
||||
Without gluten the baked goods wouldn't have the same properties. Managing
|
||||
gluten makes the whole bread-making process more complex as more steps are involved.
|
||||
A dough without gluten doesn't have to be kneaded. Kneading creates
|
||||
|
||||
A dough without gluten doesn't have to be kneaded as the role of kneading is
|
||||
to create
|
||||
the gluten bonds. The more you knead, the stronger they become. With low-gluten
|
||||
and no-gluten flours, you only have to mix the ingredients together, making
|
||||
sure you properly homogenize everything. During fermentation
|
||||
sure you properly homogenize everything.
|
||||
|
||||
During fermentation
|
||||
the gluten degrades as the microorganisms metabolize it. When too much gluten
|
||||
has been converted your dough will no longer have the wheat-like structure previously
|
||||
described. For no/low gluten flour your main focus is managing acidity. You do not
|
||||
want the final bread to be too sour. You do not have to worry about the gluten
|
||||
degradation, removing a huge headache from the equation.
|
||||
described. For no/low gluten flour your main focus is managing acidity, you do not
|
||||
want the final bread to be too sour. Conversely you do not have to worry about
|
||||
the gluten degradation, removing a huge headache from the equation.
|
||||
|
||||
\begin{table}[!htb]
|
||||
\begin{center}
|
||||
@@ -61,14 +67,14 @@ degradation, removing a huge headache from the equation.
|
||||
\end{center}
|
||||
\end{table}
|
||||
|
||||
As gluten has a special role, the rest of this chapter is dedicated to having a
|
||||
closer look at different gluten flours and how to distinguish them. Spelt
|
||||
also contains significant amounts of gluten, so the same characteristics hold
|
||||
Because gluten has a special role, the rest of this chapter is dedicated to having a
|
||||
closer look at different gluten flours and how to distinguish them. Like wheat
|
||||
spelt contains significant amounts of gluten, so the same characteristics hold
|
||||
true.
|
||||
|
||||
Several recipes call for wheat bread flour. Bread flour can refer to different types
|
||||
of flour. It could be a T405 or a T550 in Germany. This is very often
|
||||
classified incorrectly. The terms \emph{strong} or \emph{bread} flour in this case
|
||||
Several recipes call for wheat bread flour, but bread flour can refer to different types
|
||||
of flour. It could be a T405 or a T550 in Germany---this is very often
|
||||
classified incorrectly---the terms \emph{strong} or \emph{bread} flour in this case
|
||||
refer to the properties of the flour. A bread flour is considered to have a
|
||||
higher amount of protein and thus gluten. This flour is excellent when you
|
||||
want to make a sourdough bread as your dough allows for a longer leavening
|
||||
@@ -80,16 +86,17 @@ properties might not be desirable since the final cake could have a chewy textur
|
||||
In conclusion, not every T405, T45 or T00 flour is the same. Depending on the properties
|
||||
of the plant they come from, the flours will have different properties. For that reason
|
||||
some countries like Germany have introduced additional scales to evaluate the quality of the
|
||||
wheat. The category \textbf{A} refers to good quality wheat that can be blended
|
||||
with poorer qualities to improve the flour. The category \textbf{B} refers to
|
||||
average wheat that can be used to create different baked goods. Category \textbf{C}
|
||||
wheat. The category \emph{A} refers to good quality wheat that can be blended
|
||||
with poorer qualities to improve the flour. The category \emph{B} refers to
|
||||
average wheat that can be used to create different baked goods. Category \emph{C}
|
||||
is used for wheat that has poor baking qualities. This could happen, for instance,
|
||||
if the wheat already started to sprout and thus lost some of its desirable
|
||||
baking properties. This type of wheat is typically used in animal feed or
|
||||
as fermentable biomass for generators. Category \textbf{E} refers to \emph{Elite} wheat. It's
|
||||
as fermentable biomass for generators. Category \emph{E} refers to \emph{Elite} wheat. It's
|
||||
the highest quality of wheat. This kind of wheat can only be harvested when the
|
||||
wheat has grown under optimal conditions. You can compare this to a winery
|
||||
that uses only the best grapes to make a reserve wine. Unfortunately, this is normally never printed
|
||||
that uses only the best grapes to make a reserve wine. Unfortunately, this is
|
||||
usually not printed
|
||||
on the packaging of the flour that you buy. You can look out for the protein
|
||||
value as a possible indicator. However, large mills blend flours together to
|
||||
maintain quality throughout the years. Blended flour is also not listed on
|
||||
@@ -97,7 +104,7 @@ the packaging. It might be that bakeries extract gluten from some flour and
|
||||
then mix it in order to create better baking flours.
|
||||
|
||||
In Italy the so-called
|
||||
\textbf{W-value} has been introduced to better show how the flour will behave.
|
||||
\emph{W-value} has been introduced to better show how the flour will behave.
|
||||
A dough is made, and then the resistance of this dough to kneading is measured.
|
||||
The more gluten a flour has, the more elastic the dough is, and the more it will
|
||||
resist kneading. A higher W flour will have a higher gluten content and allow for a longer
|
||||
@@ -120,8 +127,8 @@ your dough with more flavor.
|
||||
Generally, when aiming to
|
||||
bake free standing sourdough bread, aim for a higher protein content. If the
|
||||
gluten value is relatively low, your bread will collapse faster. Baking bread
|
||||
is still possible, but it might be easier to use tools such as a loaf pan, or
|
||||
to make skilled bread or flatbread.
|
||||
is still possible, but it might be easier to use other techniques such as a
|
||||
loaf pan, to consider skillet bread or flatbread.
|
||||
|
||||
An additional, rarely considered characteristic of good flour is the level of damage to the
|
||||
starch molecules. This is a common problem when you are trying to mill your own wheat flours at
|
||||
@@ -134,8 +141,8 @@ 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
|
||||
mill the flour 10 times with short breaks, I~was not able to achieve the same
|
||||
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
|
||||
de-gas quickly and turn into very flat breads. I~have had great success though when
|
||||
|
||||
464
book/glossary/glossary.tex
Normal file
@@ -0,0 +1,464 @@
|
||||
\chapter{Glossary}%
|
||||
\label{ch:Glossary}
|
||||
|
||||
\begin{quoting}
|
||||
This glossary provides definitions and explanations for terms frequently
|
||||
used in bread making. Understanding these terms is essential for both
|
||||
novice and experienced bakers aiming to master the art and science of
|
||||
bread making. The glossary is arranged alphabetically for easy reference.
|
||||
\end{quoting}
|
||||
|
||||
\begin{description}
|
||||
|
||||
\item[Acetic Acid] A type of organic acid produced by hetero fermentative lactic
|
||||
acid bacteria and acetic acid bacteria during fermentation. It gives sourdough bread
|
||||
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.
|
||||
|
||||
\item[Alpha-amylase] A type of amylase that breaks down starch molecules into
|
||||
shorter fragments, producing maltose and some glucose.
|
||||
|
||||
\item[Alveograph] A device used primarily in the evaluation of wheat flour's
|
||||
baking quality. The alveograph assesses the dough's rheological properties,
|
||||
particularly its extensibility and resistance to extension, by inflating a piece
|
||||
of dough like a balloon until it bursts. The resulting chart, or \emph{alveogram},
|
||||
displays a curve that represents the balance between the dough's elasticity and
|
||||
extensibility. Specific parameters derived from the curve, such as the P (pressure
|
||||
required to inflate the dough) and L (extensibility of the dough), provide invaluable
|
||||
insights to bakers and millers regarding the flour's potential performance in
|
||||
bread-making. By analyzing the alveogram, professionals can make informed decisions
|
||||
about the suitability of a flour for certain baking applications, as well as
|
||||
potential blending needs with other flours.
|
||||
|
||||
\item[Alveoli] (singular Alveolus) The little pockets that form the crumb,
|
||||
formed by the gluten matrix trapping carbon dioxide.
|
||||
|
||||
\item[Amylase] An enzyme that breaks down starches into simpler sugars, facilitating
|
||||
the fermentation process in beer and bread making. When making beer the temperature
|
||||
of the brew is kept for extended periods at certain temperatures to ensure that most
|
||||
starches are broken down to sugars. These sugars are then consumed by the microbes
|
||||
during the fermentation process.
|
||||
|
||||
\item[Autolyse] A process where flour and water are mixed and then left to rest
|
||||
before adding other ingredients. This activates enzymes such as amylase and protease.
|
||||
By doing so the bulk fermentation time is shortened and the final loaf will have
|
||||
better properties. The browning of the loaf becomes better and the crumb fluffier.
|
||||
An autolyse is recommended when using a high percentage of starter to inoculate the
|
||||
dough (>~\SI{20}{\percent}). An alternative easier approach can be the fermentolyse.
|
||||
|
||||
\item[Bacteria] Unicellular microorganisms that exist in diverse forms and
|
||||
habitats. They play crucial roles in various natural processes, especially in food
|
||||
preparation like sourdough fermentation. Lactic and acetic acid bacteria, in particular,
|
||||
are pivotal in the sourdough process, contributing to its distinct taste and texture.
|
||||
Some bacteria are beneficial, aiding in digestion or producing vitamins, while others
|
||||
can be harmful and cause diseases.
|
||||
|
||||
\item[Baker’s Math] Baker’s math is a ratio based system of sharing recipes,
|
||||
making them easily scalable. It’s based on the total weight of the flour in a formula,
|
||||
where each ingredients weight is divided by the flours weight to give a percentage.
|
||||
For \SI{500}{\gram} of flour you could be using \SI{60}{\percent} of water (\SI{300}{\gram}),
|
||||
\SI{10}{\percent} of starter (\SI{50}{\gram}) and \SI{2}{\percent} of salt (\SI{10}{\gram}).
|
||||
|
||||
\item[Baker’s percentage] See Baker’s math.
|
||||
|
||||
\item[Baking] The final, transformative step in bread making wherein dough is
|
||||
exposed to high temperatures, causing a series of chemical and physical reactions
|
||||
that result in a finished loaf of bread. During the baking stage:
|
||||
|
||||
\begin{enumerate}
|
||||
\item \emph{Yeast Activity \& Oven Spring:} In the initial phase of baking, the
|
||||
temperature inside the dough rises, increasing yeast activity. This results in rapid
|
||||
carbon dioxide production, leading to what bakers refer to as \emph{oven spring}, or the
|
||||
rapid rise of the loaf.
|
||||
|
||||
\item \emph{Protein Coagulation:} As the temperature continues to climb, the proteins
|
||||
in the dough, primarily gluten, begin to coagulate or set, which gives the bread its
|
||||
structure.
|
||||
|
||||
\item \emph{Starch Gelatinization:} Starches absorb water and swell, eventually
|
||||
gelatinizing. This process contributes to the crumb structure of the bread.
|
||||
|
||||
\item \emph{Caramelization \& Maillard Reaction:} The crust of the bread browns due
|
||||
to two primary reactions: caramelization of sugars and the Maillard reaction between
|
||||
amino acids and reducing sugars. This not only affects the appearance but also imparts
|
||||
a distinctive flavor and aroma to the bread.
|
||||
|
||||
\item \emph{Evaporation of Acids:} Some acids produced during fermentation evaporate at
|
||||
certain temperatures during baking. This evaporation can influence the final flavor
|
||||
profile of the bread, making it less tangy than the unbaked dough. By extending the
|
||||
baking time the acids become less concentrated and the dough can lose some of its tang.
|
||||
|
||||
\item \emph{Moisture Evaporation:} Water in the dough turns to steam and begins to
|
||||
evaporate. The steam contributes to the oven spring and also helps in gelatinizing
|
||||
the starches.
|
||||
|
||||
\item \emph{Crust Formation:} The outer layer of the dough dries out and hardens to
|
||||
form a crust, which acts as a protective barrier, keeping the inner crumb moist.
|
||||
\end{enumerate}
|
||||
|
||||
\item[Banneton] A wicker basket used to shape and support dough during its final
|
||||
proof. The bannetons are typically made out of rattan or wood pulp. An alternative
|
||||
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
|
||||
when making pizza doughs. Without an extended bench rest the dough is too elastic and
|
||||
can not be shaped.
|
||||
|
||||
\item[Beta-amylase] An enzyme that further breaks down the starch fragments
|
||||
produced by alpha-amylase into maltose.
|
||||
|
||||
\item[Bread Flour] A flour that is perfect for sourdough bread making. It features
|
||||
a higher amount of gluten and can thus ferment for a longer period of time.
|
||||
|
||||
\item[Brühstück] A German baking technique similar to a scald. It translates as
|
||||
\emph{boil piece}. Hot or boiling water is poured over whole grain flour or crushed grains,
|
||||
then cooled and mixed with the main dough. This process helps in moisture retention
|
||||
and can enhance the flavor and texture of the final bread. Also see \emph{scald}.
|
||||
|
||||
\item[Bulk Fermentation] The initial rising period after mixing all the ingredients.
|
||||
The dough is typically allowed to rise until it increases to a certain volume. The
|
||||
volume of increase depends on the flour that is used. When baking with wheat flour
|
||||
the gluten amount of the flour is the deciding factor. The more gluten your flour has
|
||||
(protein) the longer you can bulk ferment. A longer bulk fermentation improves the
|
||||
flavor and texture of the final bread. It becomes tangier and fluffier. You can aim
|
||||
for a \SI{25}{\percent} size increase of your dough and then slowly increase this to find your
|
||||
flour’s sweet spot. This is highly dependant from flour to flour. When using low gluten
|
||||
flour like rye you need to be careful as the longer fermentation can create a too
|
||||
sticky dough which collapses and does not hold its shape anymore.
|
||||
|
||||
\item[Cake Flour] Cake flour is a light, finely milled flour with a lower protein
|
||||
content than all-purpose flour. It's ideal for tender baked goods like cakes, cookies,
|
||||
and pastries.
|
||||
|
||||
\item[Coil fold] A special stretch and folding technique. The coil fold is
|
||||
very gentle on the dough and is thus excellent throughout the bulk fermentation.
|
||||
By applying the coil fold the dough strength is improved by minimising damage
|
||||
to the dough structure.
|
||||
|
||||
\item[Crumb] The inner texture of the bread, which is characterized by the size,
|
||||
shape, and distribution of the holes (or \emph{alveoli}). It's what's inside once you slice
|
||||
a loaf of bread open. A \emph{tight crumb} refers to bread with small, evenly distributed
|
||||
holes, while an \emph{open crumb} has larger, more irregular holes.
|
||||
|
||||
\item[Diastatic Malt] Malted grain that has been dried and then ground into a powder.
|
||||
This malt contains enzymes that can break down starches into sugars, which can be
|
||||
beneficial in the fermentation process for bread. When added to dough, it can improve
|
||||
the bread's flavor, color, and shelf life.
|
||||
|
||||
\item[Discard] The portion of sourdough starter that is removed and not fed when
|
||||
maintaining the starter. This is often done to prevent the starter from becoming too
|
||||
large and unmanageable. Discard can be used in various recipes or thrown away.
|
||||
|
||||
\item[Dividing] The process of breaking the dough mass into smaller pieces,
|
||||
typically to shape into individual loaves or portions.
|
||||
|
||||
\item[Dough Hydration] Expressed as a percentage, it's the amount of water in a
|
||||
dough relative to the amount of flour. A higher hydration dough will be wetter and
|
||||
stickier, while a lower hydration dough will be firmer. For example, a dough
|
||||
with \SI{500}{\gram} of flour and \SI{375}{\gram} of water has a hydration of
|
||||
\SI{75}{\percent}
|
||||
|
||||
\item[Dough Strength] Refers to the dough's resilience, elasticity, and structure.
|
||||
A strong dough can be stretched without tearing and holds its shape well. This is
|
||||
largely influenced by the flour's protein content and the development of the gluten
|
||||
network.
|
||||
|
||||
\item[Dutch Oven] A heavy-duty pot with a tight-fitting lid, often made of cast
|
||||
iron. It's used in baking to trap steam during the initial phase of baking, helping
|
||||
to create a crusty exterior on bread.
|
||||
|
||||
\item[Elasticity] A property of dough that describes its ability to return to
|
||||
its original shape after being stretched or deformed. It's influenced by the flour's
|
||||
protein content and the development of the gluten network.
|
||||
|
||||
\item[Extensibility] Refers to the dough’s ability to be stretched or extended
|
||||
without tearing. It's the opposite of elasticity and is desirable in certain types
|
||||
of breads, like ciabatta, that have a more open crumb structure.
|
||||
|
||||
\item[Feed] The act of adding fresh flour and water to maintain a sourdough
|
||||
starter. Regular feeding keeps the starter active and healthy.
|
||||
|
||||
\item[Fermentation] The metabolic process by which microorganisms such as yeast
|
||||
and bacteria convert carbohydrates (like sugars) into alcohol or acids. In bread
|
||||
making, this produces carbon dioxide which causes the dough to rise.
|
||||
|
||||
\item[Fermentolyse] Using a small amount of starter to slow fermentation.
|
||||
It's a method where fermentation and autolyse are combined. Typically around \SI{10}{\percent}
|
||||
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
|
||||
improper shaping techniques.
|
||||
|
||||
\item[Gluten] A protein complex formed from gliadin and glutenin, found in wheat
|
||||
and some other grains. It provides elasticity and strength to the dough when
|
||||
properly aligned and developed. During the course of the bulk fermentation much of
|
||||
the gluten is degraded by the protease enzyme and lactic acid bacteria.
|
||||
|
||||
\item[Homogenizing] The act of creating a consistent and uniform mixture. For
|
||||
flours like einkorn and rye, where gluten alignment isn't the main goal, kneading
|
||||
ensures that the dough achieves this homogeneous consistency.
|
||||
|
||||
\item[Hooch] A liquid layer that sometimes forms on top of a sourdough starter.
|
||||
It's an indication that the starter is hungry and needs feeding. It acts as a
|
||||
barrier shield and prevents the starter from catching mold. It can be mixed right
|
||||
back into the starter or extracted to make hot sauces.
|
||||
|
||||
\item[Kneading] The manual or mechanical process of working dough to develop gluten
|
||||
in wheat and spelt-based breads, or to homogenize the dough mass in flours like
|
||||
einkorn or rye.
|
||||
|
||||
\item[Kochstück] When making a Kochstück, the flour or grains are heated
|
||||
together with the fluid. The mixture needs to be stirred while heating up
|
||||
to prevent clumping and burning it.
|
||||
|
||||
\item[Lactic Acid] Another organic acid produced by lactic acid bacteria during
|
||||
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
|
||||
of end products with different tastes and aromas. Maillard reactions occur readily
|
||||
above \SI{150}{\celsius}, although will still occur much more slowly below that
|
||||
temperature. Optimal reaction rate occurs between \pHvalue{6.0} to \pHvalue{8.0},
|
||||
although it favours alkaline conditions.
|
||||
|
||||
\item[Maltose] A sugar produced from the enzymatic breakdown of starch by amylases.
|
||||
It's a primary food source for yeast during fermentation.
|
||||
|
||||
\item[Non-diastatic Malt] Malted grain that has been dried at higher temperatures,
|
||||
deactivating its enzymes. It's used primarily for flavor and color in bread making.
|
||||
Amylase and protease become degraded at temperatures higher than 50°C.
|
||||
|
||||
\item[Oven Spring] The rapid rise of the dough in the oven during the early stages
|
||||
of baking due to the expansion of trapped gases and water.
|
||||
|
||||
\item[Over Fermenting] A common problem when making wheat or spelt doughs. When the
|
||||
dough is fermented for too long most of the gluten in the dough is broken down. The
|
||||
resulting dough is very sticky. The final bread will be very flat and lose some of its
|
||||
typical texture. The crumb structure features many tiny pockets of air. A lot of the
|
||||
trapped gasses can diffuse out of the dough during baking. If you notice this during
|
||||
bulk fermentation it is advised to place the loaf inside of a loaf pan and then bake
|
||||
it after a 30 to 60 minute rest.
|
||||
|
||||
\item[Over Proofing] The same as over fermenting, however happening during the
|
||||
proofing stage.
|
||||
|
||||
%Hack to make sure there is a carriage return
|
||||
\item[pH] A measure of the acidity or alkalinity of a solution. The pH scale
|
||||
ranges from 0 to 14, where a pH value of 7 is neutral. Solutions with a pH value below
|
||||
7 are acidic, while those with a pH above 7 are alkaline or basic. Fermented
|
||||
foods with a pH below 4.2 are generally considered foodsafe. A pH meter can be
|
||||
used to monitor your sourdough bread's fermentation progress.
|
||||
|
||||
\item[P/L Value] A critical parameter derived from the alveograph test, the P/L
|
||||
value represents the ratio of the dough's tenacity (P) to its extensibility (L).
|
||||
Specifically:
|
||||
|
||||
\begin{itemize}
|
||||
\item[] \emph{P (Pressure)} refers to the pressure required to inflate the
|
||||
dough during the alveograph test. It indicates the dough's resistance
|
||||
to deformation or its strength.
|
||||
\item[] \emph{L (Length)} represents the extensibility of the dough, or
|
||||
how far it can be stretched before tearing.
|
||||
\end{itemize}
|
||||
The P/L ratio provides insights into the balance between the dough's elasticity and
|
||||
extensibility:
|
||||
%
|
||||
\begin{itemize}
|
||||
\item[] \emph{Low P/L Value} indicates a dough that is more extensible
|
||||
than resistant. This means the dough can be stretched easily, making
|
||||
it suitable for certain products like pizza or ciabatta.
|
||||
\item[] \emph{High P/L Value} suggests a dough that has more strength than
|
||||
extensibility. Such a dough is more resistant to deformation, which
|
||||
can be preferable for products that require good volume and structure,
|
||||
like certain types of bread.
|
||||
\end{itemize}
|
||||
The P/L value helps bakers and millers determine the suitability of a flour for
|
||||
specific baking applications. Adjustments in flour blends or baking processes might
|
||||
be made based on this ratio to achieve desired bread characteristics.
|
||||
|
||||
\item[Preferment] A mixture of a proportion of the doughs ingredients which is
|
||||
allowed to ferment before being added to the final bread dough. These can include
|
||||
sourdough, poolish, biga, pâte fermentée, or a general sponge.
|
||||
|
||||
\item[Preshaping] When dividing your large dough mass into smaller portions you end
|
||||
up having non-uniform pieces of dough. This makes shaping much harder because the
|
||||
resulting shaped dough will not be uniform. For this reason bakers drag the tiny dough
|
||||
pieces over the surface of the counter to create more uniform looking dough balls.
|
||||
|
||||
\item[Proof] The final rise of the shaped dough before baking.
|
||||
|
||||
\item[Protease] An enzyme that breaks down proteins, including gluten, into smaller
|
||||
peptide chains and amino acids. In the context of bread making, protease activity can
|
||||
both benefit and challenge bakers. Moderate protease activity can make dough more
|
||||
extensible, which can be helpful in some bread-making processes. However, excessive
|
||||
protease activity can weaken the gluten network, leading to doughs that are slack,
|
||||
sticky, and challenging to handle, and may result in breads with poor volume and
|
||||
structure. Factors such as fermentation time, dough temperature, and the source of the
|
||||
flour can influence protease activity in bread doughs. In sourdoughs, longer
|
||||
fermentation times, particularly at warmer temperatures, can lead to higher protease
|
||||
activity, as the acidic conditions activate cereal proteases. Flour from sprouted
|
||||
grains or malted grains can have higher protease activity due to the sprouting or
|
||||
malting process. Understanding and controlling protease activity is crucial in
|
||||
achieving desired bread quality and handling characteristics.
|
||||
|
||||
\item[Pullman Loaf] A type of bread loaf characterized by its perfectly rectangular
|
||||
shape and soft, fine crumb. It is baked in a special lidded pan called a Pullman pan
|
||||
or pain de mie pan. The lid ensures that the bread rises in a perfectly straight
|
||||
shape, without the domed top characteristic of other bread loaves. Pullman loaves are
|
||||
often sliced very thin and are popular for making sandwiches.
|
||||
|
||||
\item[Retarding] The process of slowing down fermentation during the proofing
|
||||
stage by placing the dough in a colder environment, typically a refrigerator. This aids
|
||||
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. 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
|
||||
many health benefits, so it's often combined with wheat flour in baking. Pure rye
|
||||
breads are typically made with a sourdough process to help the dough rise.
|
||||
|
||||
\item[Scald] A method where boiling water is poured over flour, grains, or other
|
||||
ingredients and then allowed to cool. In baking, this process can gelatinize the
|
||||
starches in the flour or grains, resulting in a dough that retains moisture better,
|
||||
provides a softer crumb, and potentially extends the bread's shelf life. Additionally,
|
||||
scalding can help inactivate certain enzymes which can be detrimental to the dough's
|
||||
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[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.
|
||||
|
||||
\item[Sift] To pass flour or another dry ingredient through a sieve to
|
||||
remove lumps and aerate it.
|
||||
|
||||
\item[Soaker] A mixture of grains or seeds with water that is left to soak overnight (or for a
|
||||
specified amount of time) before being incorporated into bread dough. This helps to
|
||||
soften and hydrate the grains or seeds (sesame, pumpkin, etc.), making them
|
||||
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
|
||||
yeast that is allowed to ferment for a certain period before being incorporated into
|
||||
the final dough.
|
||||
|
||||
\item[Starter] A fermented mixture of flour and water containing a colony of
|
||||
microorganisms including wild yeast and lactic acid bacteria. It's used to leaven
|
||||
bread.
|
||||
|
||||
\item[Straight Dough] A bread-making method where all ingredients are mixed
|
||||
together at once, without the use of a preferment.
|
||||
|
||||
\item[Stretch and Fold] S\&F is a technique used during the bulk fermentation phase
|
||||
to strengthen the dough and help align the gluten structure. Instead of traditional
|
||||
kneading, the dough is gently stretched and then folded over itself. This process is
|
||||
typically repeated multiple times throughout bulk fermentation.
|
||||
|
||||
\item[Tangzhong] A Chinese technique for bread-making, similar to the
|
||||
Japanese yudane method. It involves cooking a small portion of the flour
|
||||
with water (or milk) to create a slurry or roux. This process, which can be seen as a
|
||||
variant of scald, gelatinizes the starches in the flour, resulting in breads
|
||||
that are softer, fluffier, and have improved moisture retention. Once cooled, the
|
||||
Tangzhong is mixed with the remaining ingredients to produce the final dough.
|
||||
|
||||
\item[Tight Crumb] Refers to a bread crumb (the soft inner part of the bread) that
|
||||
has small, uniform air holes.
|
||||
|
||||
\item[Wild Yeast] Naturally occurring yeast, present in the environment and on the
|
||||
surface of grains, used in sourdough fermentation as opposed to commercial yeast.
|
||||
There’s wild yeast on almost any surface of plants. The wild yeasts live in symbiosis
|
||||
with the plant providing a shield against pathogens and receiving sugars from the
|
||||
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 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
|
||||
by weight. After mixing, the paste is left to cool to room temperature and then
|
||||
refrigerated overnight. The next day, it is combined with the remaining ingredients
|
||||
to make the dough. The Yudane method, essentially a type of scald, helps in
|
||||
improving the texture of the bread, making it softer and fluffier while also enhancing
|
||||
its shelf life.
|
||||
|
||||
\end{description}
|
||||
@@ -9,11 +9,78 @@
|
||||
lessons from the past.
|
||||
\end{quoting}
|
||||
|
||||
Sourdough has been made since ancient times. The exact origins of fermented
|
||||
The story of sourdough bread begins in prehistoric oceans. These oceans were the
|
||||
birthplace of all life on Earth. To better envision the vast history of
|
||||
our planet, lets create a timeline in one~year/365~days. On this scale,
|
||||
January~1 signifies Earth's
|
||||
formation 4.54~billion years ago. Midnight on December~31 is the present.
|
||||
Each day represents roughly 12~million years. This technique simplifies the
|
||||
complexity of time but also renders the extraordinary expanse of our planet's
|
||||
history into a more graspable timeframe. We humans, are in fact a recent
|
||||
addition to our planet, so young that we made our first appearance on
|
||||
the evening of December~31. It seems that humans managed to arrive just
|
||||
in time to join the celebration at the end of the year.
|
||||
|
||||
On March~25, the oceans birthed the first single-celled bacteria. In these
|
||||
waters, another single-celled life form, \emph{archaea}, also thrived. These
|
||||
organisms inhabit extreme environments, from boiling vents to icy waters.
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\begin{center}
|
||||
\input{figures/fig-life-planet-sourdough-timeline.tex}
|
||||
\caption[Sourdough microbiology timeline]{Timeline of significant events
|
||||
starting from the first day of Earth's existence,
|
||||
divided into months, and extending to the present day,
|
||||
marked at midnight. This visualization shows the pivotal steps
|
||||
of life and sourdough on earth.}%
|
||||
\label{fig:planet-timeline}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
|
||||
Whoever comes first, bacteria or archaea, remains debated. For three
|
||||
months (or approximately 1.1~billion years), these life forms dominated
|
||||
the oceans. Then, on June~25 in an highly unlikely event, an archaeon consumed a bacterium.
|
||||
Instead of digesting it, they formed a symbiotic relationship. This led to the
|
||||
first nucleated organisms, marking an evolutionary milestone. This event lead
|
||||
to the development of plants, fungi and also ultimately humans.
|
||||
|
||||
Life stayed aquatic for another three months.
|
||||
On October~4, bacteria first colonized land. By October~15, the
|
||||
first aquatic fungi appeared. They adapted and, by November~24, had colonized
|
||||
land.
|
||||
|
||||
By December~3, yeasts emerged on land. This laid groundwork for bread-making.
|
||||
Jump 140~million years to December~14, and dinosaurs arose. Just a couple
|
||||
of days after their appearance on December~17 the super continent Pangea
|
||||
started to rift apart, reshaping the continents into their current form.
|
||||
The dinosaurs reigned until December~29 when they faced extinction.
|
||||
Another 25~million years later, or our timeline's 2~days after the dinosaur
|
||||
extinction, humans appeared.
|
||||
|
||||
A few hours later after the arrival of humans, a more subtle culinary
|
||||
revolution was unfolding. By \num{12000}~BC, just 5 seconds before our metaphorical
|
||||
midnight, the first sourdough breads were being baked in ancient Jordan. A blink of
|
||||
an eye later, or 4~seconds in our time compression, Pasteur's groundbreaking work
|
||||
with yeasts set the stage for modern bread-making. From the moment this book
|
||||
began to take shape to your current reading, only milliseconds have ticked
|
||||
by~\cite{Yong+2017}.
|
||||
|
||||
Now delving deeper into the realm of sourdough, it can likely be traced to aforementioned
|
||||
Ancient Jordan~\cite{jordan+bread}. Looking at the earth's timeline sourdough
|
||||
bread can be considered a very recent invention.
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\begin{center}
|
||||
\input{figures/fig-sourdough-history-timeline.tex}
|
||||
\caption[Sourdough history timeline]{Timeline of significant discoveries and
|
||||
events leading to modern sourdough bread.}%
|
||||
\label{fig:sourdough-timeline}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
|
||||
The exact origins of fermented
|
||||
bread are, however, unknown. One of the most ancient preserved
|
||||
sourdough breads has been excavated in Switzerland.
|
||||
However, based on recent research, some scientists speculate that sourdough
|
||||
bread had already been made in \num{12000}~BC in ancient Jordan~\cite{jordan+bread}.
|
||||
sourdough breads has been excavated in Switzerland~\cite{switzerland+bread}.
|
||||
|
||||
\begin{figure}[ht]
|
||||
\includegraphics[width=\textwidth]{einkorn-crumb}
|
||||
@@ -28,16 +95,17 @@ dough and at her return a few days later, she noticed that the dough had
|
||||
increased in size and smelled funky. She decided to bake
|
||||
the dough anyway and was rewarded with a much
|
||||
lighter, softer, better tasting bread dough. From that day
|
||||
on she continued to make bread this way.
|
||||
on she continued to make bread this way~\cite{egyptian+bread}.
|
||||
|
||||
Little did the people back then know that tiny microorganisms
|
||||
were the reason the bread was better. It is not clear when
|
||||
they started using a bit of the dough from the previous
|
||||
day for the next batch of dough. But by doing so, sourdough
|
||||
bread making was born: Wild yeast in the flour and in the air
|
||||
plus bacteria start to decompose the flour-water mixture, also
|
||||
known as your dough. The yeast makes the dough fluffy, and
|
||||
the bacteria primarily creates acidity. The different
|
||||
bread making---as we know it today---was born: Wild yeast
|
||||
in the flour and in the air, with bacteria
|
||||
starting to decompose the flour-water mixture.
|
||||
The yeast makes the dough fluffy,
|
||||
and the bacteria primarily creates acidity. The different
|
||||
microorganisms work in a symbiotic relationship. Humans
|
||||
appreciated the enhanced airy structure and slight acidity
|
||||
of the dough. Furthermore, the shelf life of such bread
|
||||
@@ -46,18 +114,18 @@ was extended due to the increased acidity.
|
||||
Quickly, similar processes were discovered when brewing beer
|
||||
or making wine. A small tiny batch of the previous production
|
||||
would be used for the next production. In this way, humans created
|
||||
modern bread yeasts, wine yeasts, and beer yeasts. Only in 1680,
|
||||
the scientist Anton van~Leeuwenhoek first studied yeast microorganisms
|
||||
under a microscope. Over time with each batch, the yeasts and bacteria
|
||||
modern bread yeasts, wine yeasts, and beer yeasts~\cite{egypt+beer}.
|
||||
|
||||
Over time with each batch, the yeasts and bacteria
|
||||
would become better at consuming whatever they were thrown at.
|
||||
By feeding your sourdough starter, you are selectively breeding
|
||||
microorganisms that are good at eating your flour. With
|
||||
each iteration, your sourdough knows how to better ferment the flour
|
||||
at hand. This is also the reason why more mature sourdough starters sometimes
|
||||
tend to leaven doughs faster~\cite{review+of+sourdough+starters}. It is crazy if you
|
||||
think about it. People have been using this process despite not
|
||||
knowing what was actually going on for thousands of years! The
|
||||
sourdough in itself is a symbiotic relationship. But the sourdough
|
||||
at hand. This is also the reason\footnote{It is crazy if you think about it.
|
||||
People have been using this process despite not knowing what was going on for
|
||||
thousands of years!} why more mature sourdough starters sometimes tend to
|
||||
leaven doughs faster~\cite{review+of+sourdough+starters}. The sourdough in
|
||||
itself is a symbiotic relationship, but the sourdough
|
||||
also adapted to humans and formed a symbiotic relationship with us.
|
||||
For food and water, we are rewarded with delicious bread. In exchange,
|
||||
we shelter and protect the sourdough. Spores from the starter
|
||||
@@ -65,39 +133,122 @@ are spread through aerial contamination or insects like fruit flies.
|
||||
This allows the sourdough starter to spread its spores even
|
||||
further all around the world.
|
||||
|
||||
Brewers would start to experiment with utilizing the muddy leftovers
|
||||
of the beer fermentation to start making doughs. They would notice
|
||||
Evidence suggests early grain grinding in northern Australia around
|
||||
\num{60000}~BC, notably at the Madjedbebe rock shelter in Arnhem
|
||||
Land~\cite{aboriginal+grinding+stones}. However, a more significant
|
||||
advancement occurred later, as documented by the ancient Greek geographer
|
||||
Strabo in \num{71}~BC\@. Strabo's writings described the first water-powered
|
||||
stone mill, known as a \emph{gristmill}. These mills advanced flour production
|
||||
from a few kilograms up to several metric tons per day~\cite{history+mills}.
|
||||
|
||||
These early mills featured horizontal paddle wheels, eventually termed
|
||||
\emph{Norse wheels} due to their prevalence in Scandinavia. The paddle wheels
|
||||
connected to a shaft, which, in turn, linked to the central runner stone for
|
||||
grinding. Water flow propelled the paddle wheels, transferring the grinding
|
||||
force to the stationary \emph{bed}, typically a stone of similar size and
|
||||
shape. This design was straightforward, avoiding the need for gears. However,
|
||||
it had a limitation: the stone's rotation speed relied on water volume and
|
||||
flow rate, making it most suitable for regions with fast-flowing streams,
|
||||
often found in mountainous areas~\cite{mills+scandinavia}.
|
||||
|
||||
In the year \num{1680}, a remarkable scientist by the name of
|
||||
Antonie~van~Leeuwenhoek introduced a groundbreaking innovation that would
|
||||
forever alter our understanding of the microscopic world and ultimately bread
|
||||
making. Van~Leeuwenhoek, a master of lens craftsmanship, possessed an
|
||||
insatiable fascination with realms invisible to the naked eye. His pioneering
|
||||
work birthed the first modern microscope. What set Van~Leeuwenhoek apart was
|
||||
the exceptional quality of his lenses, capable of magnifying tiny
|
||||
microorganisms by an astounding factor of \num{270}. Driven by an unrelenting
|
||||
curiosity to unveil the unseen, he embarked on a journey of exploration. He
|
||||
scrutinized flies, examined lice-infested hair, and ultimately turned his gaze
|
||||
toward the tranquil waters of a small lake near Delft.
|
||||
|
||||
In this serene aquatic habitat, he made astonishing observations, discovering
|
||||
algae and minuscule, dancing creatures hitherto hidden from human perception.
|
||||
Eager to share his revelatory findings with the scientific community,
|
||||
Van~Leeuwenhoek faced skepticism, as it was difficult to fathom that someone
|
||||
had witnessed thousands of diminutive, dancing entities—entities so tiny that
|
||||
they eluded the human eye.
|
||||
|
||||
Undeterred by skepticism, he continued his relentless pursuit of the unseen,
|
||||
directing his lens towards a brewer's beer sludge. In this obscure medium,
|
||||
Van~Leeuwenhoek made history by becoming the first human to lay eyes upon
|
||||
bacteria and yeast, unraveling a previously concealed world that would
|
||||
revolutionize our understanding of microbiology~\cite{Yong+2017+Leeuwen}.
|
||||
|
||||
At the same time brewers would start to experiment with utilizing the muddy
|
||||
leftovers of the beer fermentation to start making doughs. They would notice
|
||||
that the resulting bread doughs were becoming fluffy and compared
|
||||
to the sourdough process would lack the acidity in the final product.
|
||||
A popular example is shown in a report from 1875. Eben Norton Horsford
|
||||
A popular example is shown in a report from \num{1875}. Eben Norton Horsford
|
||||
wrote about the famous \emph{Kaiser Semmeln} (Emperor's bread rolls).
|
||||
These are essentially bread rolls made with brewer's yeast instead
|
||||
of the sourdough leavening agent. As the process is more expensive,
|
||||
bread rolls like these were ultimately consumed by the noble people
|
||||
in Vienna~\cite{vienna+breadrolls}.
|
||||
|
||||
As industrialisation began the first steam-powered grain mill was developed by
|
||||
Oliver Evans in \num{1785}. Evans' design incorporated several innovations,
|
||||
including automated machinery for various milling processes, making it more
|
||||
efficient than traditional water or animal-powered mills. His steam-powered
|
||||
mill marked a significant advancement in industrial technology for bread
|
||||
making~\cite{evans+mill}.
|
||||
|
||||
\begin{figure}[ht]
|
||||
\includegraphics[width=\textwidth]{sourdough-stove}
|
||||
\caption{A bread made over the stove without an oven.}%
|
||||
\label{sourdough-stove}
|
||||
\end{figure}
|
||||
|
||||
Only in 1857, the French microbiologist Louis Pasteur discovered
|
||||
The biggest advancement of industrial breadmaking happened in \num{1857}.
|
||||
The French microbiologist Louis Pasteur discovered
|
||||
the process of alcoholic fermentation. He would prove that
|
||||
yeast microorganisms are the reason for alcoholic fermentation
|
||||
and not other chemical catalysts. What would then start is
|
||||
what I~describe as the 150 lost years of bread making. In 1879
|
||||
the first machines and centrifuges were developed to centrifuge
|
||||
pure yeast. This yeast would be extracted from batches of sourdough.
|
||||
and not other chemical catalysts. He continued with his research and
|
||||
was the first person to isolate and grow pure yeast strains.
|
||||
Soon later in \num{1868} in the Fleischmann brothers Charles
|
||||
and Maximilian were the first to patent pure yeast strains
|
||||
for bread making. The yeasts offered
|
||||
were isolated from batches of sourdough. By \num{1879} the machinery was built
|
||||
to multiply the yeast in large centrifuges~\cite{fleischmann+history}.
|
||||
The pure yeast would prove to be excellent and turbocharged
|
||||
at leavening bread doughs. What would previously take 10~hours
|
||||
to leaven a bread dough could now be done within 1~hour.
|
||||
The process became much more efficient. During World~War~II
|
||||
the first packaged dry yeast was developed. This would ultimately
|
||||
allow bakeries and home bakers to make bread much faster.
|
||||
Thanks to pure yeast, building bread making machines was
|
||||
possible. Provided you maintain the same temperature,
|
||||
your yeast would always ferment exactly the same way.
|
||||
The process became much more efficient. What ultimately made making large
|
||||
batches of dough possible, was the invention of the electrical kneader. Rufus
|
||||
Eastman, an American inventor, is often credited with an important advancement
|
||||
in mixer technology. In \num{1885}, he received a patent for an electric mixer
|
||||
with a mechanical hand-crank mechanism. This device was not as advanced or as
|
||||
widely adopted as later electric mixers, but it was an early attempt to
|
||||
mechanize mixing and kneading processes in the kitchen using electricity.
|
||||
Eastman's invention represented an important step in the development of
|
||||
electric mixers, but it wasn't as sophisticated or popular as later models
|
||||
like the KitchenAid mixer. The KitchenAid mixer, introduced in \num{1919}, is
|
||||
often recognized as one of the first widely successful electric mixers and
|
||||
played a significant role in revolutionizing kitchen appliances for home
|
||||
cooks~\cite{first+mixer}~\cite{kitchenaid+history}.
|
||||
|
||||
During World~War~II the first packaged dry yeast was developed. This would
|
||||
ultimately allow bakeries and home bakers to make bread much faster and more
|
||||
consistently. Thanks to pure yeast, building industrial bread making machines
|
||||
was now possible. Provided you maintain the same temperature, same flour and
|
||||
yeast strains fermentation became precisely reproducible. This ultimately lead
|
||||
to the development of giga bakeries and flour blenders. The bakeries demanded
|
||||
the same flour from year to year to bake bread in their machines. For this
|
||||
reason, none of the supermarket flour you buy today is single origin. It is
|
||||
always blended to achieve exactly the same product throughout the years.
|
||||
|
||||
Modern wheat, specifically the high-yielding and disease-resistant varieties
|
||||
commonly grown today, began to be developed in the mid-20th century. This
|
||||
period is often referred to as the \emph{Green Revolution.}
|
||||
|
||||
One of the key figures in this development was American scientist Norman
|
||||
Borlaug, who is credited with breeding high-yield wheat varieties,
|
||||
particularly dwarf wheat varieties, that were resistant to diseases and could
|
||||
thrive in various environmental conditions. His work, which started in the
|
||||
1940s and continued through the \num{1960}s, played a crucial role in
|
||||
increasing wheat production worldwide and alleviating food
|
||||
shortages~\cite{green+revolution}.
|
||||
|
||||
As fermentation
|
||||
times sped up, the taste of the final bread would deteriorate.
|
||||
@@ -111,7 +262,7 @@ of true nerds would continue making bread with sourdough.
|
||||
|
||||
Suddenly people started to talk more often about celiac disease
|
||||
and the role of gluten. The disease isn't new; it has first
|
||||
been described in 250 AD~\cite{coeliac+disease}. People
|
||||
been described in \num{250}~AD~\cite{coeliac+disease}. People
|
||||
would note how modern bread has much more gluten compared
|
||||
to ancient bread. The bread in ancient times probably was much flatter.
|
||||
The grains over time have been bred more and more towards containing a higher
|
||||
@@ -151,8 +302,9 @@ During the California Gold Rush, French bakers brought the sourdough
|
||||
culture to Northern America. A popular bread became the
|
||||
San Francisco sourdough. It's characterized by its unique
|
||||
tang (which was previously common for every bread). It
|
||||
however remained more of a niche food. What really expedited
|
||||
the comeback of sourdough was the 2020 COVID-19 pandemic.
|
||||
however remained more of a niche food while industrial bread
|
||||
was on the rise. What really expedited
|
||||
the comeback of sourdough was the \num{2020} COVID-19 pandemic.
|
||||
Flour and yeast became scarce in the supermarkets. While
|
||||
flour returned yeast couldn't be found. People started
|
||||
to look for alternatives and rediscovered the ancient
|
||||
|
||||
BIN
book/images/external/hooch.jpg
vendored
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 1.1 MiB |
BIN
book/images/flat-breads-selection.jpg
Normal file
|
After Width: | Height: | Size: 586 KiB |
|
Before Width: | Height: | Size: 1.2 MiB |
@@ -1,4 +0,0 @@
|
||||
\chapter{Foreword}%
|
||||
\label{ch:Foreword}
|
||||
Hopefully one day there is going to be an awesome foreword
|
||||
by another bread baker!
|
||||
@@ -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}
|
||||
|
||||
203
book/makefile
@@ -1,13 +1,23 @@
|
||||
# Macros for commands
|
||||
LATEX := latexmk -cd -pdflua -lualatex="lualatex -interaction=nonstopmode" -synctex=1 -use-make
|
||||
EBOOK := tex4ebook --lua -d epub -c tex4ebook.cfg
|
||||
WEBSITE := make4ht --lua -c website.cfg -a debug -uf html5+tidy+common_domfilters+dvisvgm_hashes
|
||||
EBOOK := tex4ebook --lua -d epub -f epub -c tex4ebook.cfg
|
||||
WEBSITE := make4ht --lua -c website.cfg -a debug -uf html5+tidy+common_domfilters
|
||||
CLEAN := latexmk -cd -lualatex -c -use-make
|
||||
EBOOK_CONVERT := kindlegen
|
||||
CHECK_1 := lacheck
|
||||
CHECK_2 := chktex
|
||||
CONVERT_PIC := convert
|
||||
REDUCE_PIC := -resize '800x800>' \
|
||||
-strip -interlace Plane -gaussian-blur 0.05 -quality 85\% \
|
||||
-set colorspace Gray -separate -evaluate-sequence Mean
|
||||
RSYNC := rsync -au --exclude 'book.epub' --exclude '*.jpg' --exclude '*.png'
|
||||
|
||||
# We want bash as shell
|
||||
SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
|
||||
else if [ -x /bin/bash ]; then echo /bin/bash; \
|
||||
else echo sh; fi; fi)
|
||||
|
||||
ifdef DEBUG
|
||||
LATEX += -diagnostics
|
||||
EBOOK += -a debug
|
||||
WEBSITE += -a debug
|
||||
endif
|
||||
@@ -17,7 +27,7 @@ website_dir := static_website_html
|
||||
# List all files that are dependencies
|
||||
chapters = baking basics bread-types cover flour-types history intro mix-ins\
|
||||
non-wheat-sourdough sourdough-starter storing-bread troubleshooting\
|
||||
wheat-sourdough
|
||||
wheat-sourdough glossary
|
||||
|
||||
src_tables := $(wildcard tables/table-*.tex)
|
||||
src_figures := $(wildcard figures/fig-*.tex) figures/flowcharts_tikz.tex
|
||||
@@ -31,11 +41,19 @@ images += $(wildcard images/*.jpg)
|
||||
images += $(wildcard images/*.png)
|
||||
images += $(wildcard images/*/*.png)
|
||||
images += $(foreach directory, $(chapters), $(wildcard $(directory)/*.jpg))
|
||||
images += $(foreach directory, $(chapters), $(wildcard $(directory)/*/*.jpg))
|
||||
images += $(foreach directory, $(chapters), $(wildcard $(directory)/*.png))
|
||||
images += $(foreach directory, $(chapters), $(wildcard $(directory)/*/*.png))
|
||||
|
||||
src_all := $(src_tex) $(src_figures) $(src_tables) tex4ebook.cfg book.mk4 $(images)
|
||||
# Black and White ebook, we will just re-zip directory after converting the
|
||||
# images to lower resolution and greyscale
|
||||
bw_images := $(addprefix bw-book-epub/OEBPS/, $(images))
|
||||
|
||||
website_src := $(src_all) website.cfg
|
||||
src_all := $(src_tex) $(src_figures) $(src_tables) $(images)
|
||||
|
||||
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)
|
||||
@@ -43,6 +61,10 @@ ruby_pkg := ../website/Gemfile ../website/Gemfile.lock
|
||||
|
||||
tgt_figures := $(patsubst %.tex, %.png,$(src_figures))
|
||||
|
||||
# Default target is not all because most of the time we just want a pdf...
|
||||
# and ebook take a long time to build.
|
||||
.DEFAULT_GOAL := build_serif_pdf
|
||||
|
||||
# Default rules for pdf and ebooks, getting overwritten when built in a
|
||||
# sub-directory
|
||||
%.pdf: %.tex
|
||||
@@ -67,20 +89,30 @@ book_serif/book.pdf: $(src_all)
|
||||
book_sans_serif/book_sans_serif.pdf: $(src_all)
|
||||
$(LATEX) -output-directory=book_sans_serif book_sans_serif.tex
|
||||
|
||||
epub/%.epub: %.tex $(src_all) cover/cover-page.xbb
|
||||
$(EBOOK) -f epub $<
|
||||
.PHONY: copy_ebook_files
|
||||
|
||||
epub/%.mobi: epub/%.epub
|
||||
$(EBOOK_CONVERT) $< -o $(notdir $@)
|
||||
epub/%.epub: %.tex $(ebook_src) cover/cover-page.xbb
|
||||
$(EBOOK) $<
|
||||
|
||||
epub/%.azw3: epub/%.epub
|
||||
$(EBOOK_CONVERT) $< -o $(notdir $@)
|
||||
copy_ebook_files: build_ebook
|
||||
$(RSYNC) book-epub/ bw-book-epub/
|
||||
|
||||
# We not convert SVG to B&W or lower res for now as they are super small
|
||||
# anyway
|
||||
bw-book-epub/OEBPS/%.jpg: %.jpg
|
||||
mkdir -p $(dir $@)
|
||||
$(CONVERT_PIC) $< $(REDUCE_PIC) $@
|
||||
|
||||
bw-book-epub/OEBPS/%.png: %.png
|
||||
mkdir -p $(dir $@)
|
||||
$(CONVERT_PIC) $< $(REDUCE_PIC) $@
|
||||
|
||||
epub/bw_book.epub: copy_ebook_files $(bw_images)
|
||||
cd bw-book-epub; zip -q0X ../epub/bw_book.epub mimetype
|
||||
cd bw-book-epub; zip -q9XrD ../epub/bw_book.epub ./
|
||||
|
||||
# Now with the rules
|
||||
# Expected usual rules first
|
||||
.PHONY: default
|
||||
default: build_serif_pdf
|
||||
|
||||
.PHONY: all
|
||||
all: bake
|
||||
|
||||
@@ -89,32 +121,35 @@ help:
|
||||
@echo ""
|
||||
@echo "default: builds the book in pdf format (serif)"
|
||||
@echo ""
|
||||
@echo "all: pdf and ebooks serif and sans-serif accessible version, same as"
|
||||
@echo " build release"
|
||||
@echo "all: pdf serif and sans-serif accessible version, as well as ebooks"
|
||||
@echo " in colour and black&white versions"
|
||||
@echo ""
|
||||
@echo "bake: same as build all"
|
||||
@echo ""
|
||||
@echo "check: runs static analysis checker on LaTeX source to spot"
|
||||
@echo " programming or typographic mistakes"
|
||||
@echo ""
|
||||
@echo "clean: delete all intermediate files keep targets (pdf/ebooks/website)"
|
||||
@echo ""
|
||||
@echo "mrproper: delete all generated files intermediate and pdf/ebooks/website"
|
||||
@echo " clean_figures: delete intermediate TikZ files"
|
||||
@echo " clean_website_build: delete intermediate website files"
|
||||
@echo " clean_ebook_build: delete intermediate ebook files"
|
||||
@echo ""
|
||||
@echo "build_ebook: builds only the ebook serif and accessible version"
|
||||
@echo "build_pdf: builds both serif and accessible pdf"
|
||||
@echo ""
|
||||
@echo "build_sans_serif_ebook: build accessible ebook only"
|
||||
@echo "build_ebook: builds only the colour ebook"
|
||||
@echo ""
|
||||
@echo "build_bw_ebook: builds the low res black & white ebook"
|
||||
@echo ""
|
||||
@echo "build_sans_serif_pdf: build accessible pdf only"
|
||||
@echo ""
|
||||
@echo "build_serif_ebook: build serif ebook only"
|
||||
@echo "build_serif_pdf: build serif pdf only"
|
||||
@echo ""
|
||||
@echo "figures: build TikZ figures"
|
||||
@echo ""
|
||||
@echo "release_serif: build serif only version of pdf and ebooks"
|
||||
@echo "release_sans_serif: build sans-serif/accessible version of pdf and ebooks"
|
||||
@echo "release_sans_serif: build sans-serif/accessible version of pdf"
|
||||
@echo ""
|
||||
@echo "website: build the static website from LaTeX sources and post-process it"
|
||||
@echo "html: build the static website from LaTeX sources _without_ post-processing"
|
||||
@@ -123,7 +158,7 @@ help:
|
||||
@echo ""
|
||||
@echo "quick: compiles serif_pdf but runs lulatex only once"
|
||||
@echo ""
|
||||
@echo "quick_ebook: compiles serif_ebook but runs lulatex only once"
|
||||
@echo "quick_ebook: compiles ebook but runs lulatex only once"
|
||||
@echo ""
|
||||
@echo "show_tools_version: Show version of tools used on the build machine"
|
||||
@echo ""
|
||||
@@ -134,34 +169,26 @@ help:
|
||||
@echo "set DEBUG i.e make DEBUG=1 build_ebook to add debug flags to commands"
|
||||
|
||||
|
||||
# Finally project specif targets
|
||||
.PHONY: build_pdf
|
||||
# Finally actual project targets (i.e. build pdf and ebooks)
|
||||
.PHONY: build_pdf build_serif_pdf build_sans_serif_pdf build_ebook
|
||||
|
||||
build_pdf: build_serif_pdf build_sans_serif_pdf
|
||||
|
||||
.PHONY: build_serif_pdf
|
||||
build_serif_pdf: book_serif/book.pdf
|
||||
|
||||
.PHONY: build_sans_serif_pdf
|
||||
build_sans_serif_pdf: book_sans_serif/book_sans_serif.pdf
|
||||
|
||||
.PHONY: build_ebook
|
||||
build_ebook: build_serif_ebook build_sans_serif_ebook
|
||||
build_ebook: epub/book.epub
|
||||
|
||||
.PHONY: build_serif_ebook
|
||||
build_serif_ebook: epub/book.epub epub/book.mobi epub/book.azw3 | make_release_dir
|
||||
build_bw_ebook: epub/bw_book.epub
|
||||
|
||||
.PHONY: build_sans_serif_ebook
|
||||
build_sans_serif_ebook: epub/book_sans_serif.epub epub/book_sans_serif.mobi \
|
||||
epub/book_sans_serif.azw3 | make_release_dir
|
||||
|
||||
.PHONY: export_figures
|
||||
.PHONY: export_figures check
|
||||
# Requires that you have docker running on your computer.
|
||||
export_figures: build_pdf $(tgt_figures)
|
||||
cd figures/ && bash export_figures.sh
|
||||
|
||||
# Goal is not really to have 0 warning reported but we should check we don't
|
||||
# add many and if we do, we know they are false positive
|
||||
PHONY: check
|
||||
check: $(SRC_TEX)
|
||||
@echo "Running: " $(CHECK_1)
|
||||
$(CHECK_1) book.tex
|
||||
@@ -169,7 +196,9 @@ check: $(SRC_TEX)
|
||||
@echo "Running: " $(CHECK_2)
|
||||
$(CHECK_2) book.tex
|
||||
|
||||
.PHONY: clean_figures
|
||||
|
||||
# Clean up and delete generated files
|
||||
.PHONY: clean_figures clean_ebook_build clean_website_build clean mrproper
|
||||
clean_figures:
|
||||
- $(CLEAN) $(patsubst %.tex, %.png.in, $(src_figures))
|
||||
- rm $(patsubst %.tex, %.png.pdf, $(src_figures))
|
||||
@@ -177,50 +206,26 @@ clean_figures:
|
||||
- rm $(wildcard figures/*.png.*)
|
||||
- rm cover/cover-page.xbb
|
||||
|
||||
.PHONY: clean_ebook_build
|
||||
clean_ebook_build:
|
||||
-rm book*.loc
|
||||
-rm book*.aux
|
||||
-rm book*.run.xml
|
||||
-rm book*.bcf
|
||||
-rm book*.blg
|
||||
-rm book*.log
|
||||
-rm book*.4tc
|
||||
-rm book*.4ct
|
||||
-rm book*.dvi
|
||||
-rm book.css
|
||||
-rm book_sans_serif.css
|
||||
-rm book*.idv
|
||||
-rm book*.lg
|
||||
-rm book*.ncx
|
||||
-rm book*.tmp
|
||||
-rm book*.xref
|
||||
-rm book*.html
|
||||
-rm book*.fls
|
||||
-rm book*.fdb_latexmk
|
||||
-rm book*.bbl
|
||||
-rm content.opf
|
||||
-rm book*.{4ct,4tc,aux,bbl,bcf,blg,dvi,fdb_latexmk,fls,html}
|
||||
-rm book*.{idv,lg,loc,log,ncx,run.xml,tmp,xref}
|
||||
-rm book*x.svg
|
||||
-rm book.css
|
||||
-rm content.opf
|
||||
|
||||
.PHONY: clean_website_build
|
||||
clean_website_build: clean_ebook_build
|
||||
-rm book-*.svg
|
||||
-rm book.loc
|
||||
-rm book.dlog
|
||||
-rm book.{loc,dlog}
|
||||
-rm $(subst $(website_dir)/,, $(wildcard $(website_dir)/*.html))
|
||||
|
||||
.PHONY: clean
|
||||
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*/*.loc
|
||||
-rm book*/*.bbl
|
||||
-rm book*/*.run.xml
|
||||
-rm -rf book*-epub/META-INF
|
||||
-rm -rf book*-epub/OEBPS
|
||||
-rm book*-epub/mimetype
|
||||
-rm book*/*.{bbl,loc,.run.xml}
|
||||
-rm -rf *book-epub/META-INF
|
||||
-rm -rf *book-epub/OEBPS
|
||||
-rm *book-epub/mimetype
|
||||
|
||||
.PHONY: mrproper
|
||||
mrproper: clean
|
||||
$(CLEAN) -C $(src_figures)
|
||||
$(CLEAN) -C -output-directory=book_serif book.tex
|
||||
@@ -228,40 +233,34 @@ mrproper: clean
|
||||
-rm figures/*.png
|
||||
-rm *.html
|
||||
-rm *.svg
|
||||
rm -rf epub/
|
||||
rm -rf release/
|
||||
rm -rf book_serif/
|
||||
rm -rf book_sans_serif/
|
||||
rm -rf book-epub/
|
||||
rm -rf book_sans_serif-epub/
|
||||
rm -rf $(website_dir)
|
||||
-rm -rf epub/
|
||||
-rm -rf release/
|
||||
-rm -rf book_serif/
|
||||
-rm -rf book_sans_serif/
|
||||
-rm -rf *book-epub/
|
||||
-rm -rf $(website_dir)
|
||||
|
||||
# top level releases rules
|
||||
.PHONY: bake release_serif release_sans_serif
|
||||
|
||||
.PHONY: bake
|
||||
bake: release_serif release_sans_serif
|
||||
|
||||
.PHONY: make_release_dir
|
||||
make_release_dir:
|
||||
release:
|
||||
mkdir -p release
|
||||
|
||||
.PHONY: release_serif
|
||||
release_serif: build_serif_pdf build_serif_ebook | make_release_dir
|
||||
release_serif: build_serif_pdf build_ebook build_bw_ebook | release
|
||||
cp book_serif/book.pdf release/TheBreadCode-The-Sourdough-Framework.pdf
|
||||
cp epub/book.mobi release/TheBreadCode-The-Sourdough-Framework.mobi
|
||||
cp epub/book.epub release/TheBreadCode-The-Sourdough-Framework.epub
|
||||
cp epub/book.azw3 release/TheBreadCode-The-Sourdough-Framework.azw3
|
||||
cp epub/bw_book.epub release/TheBreadCode-The-Sourdough-Framework-black-and-white.epub
|
||||
|
||||
.PHONY: release_sans_serif
|
||||
release_sans_serif: build_sans_serif_pdf build_sans_serif_ebook | make_release_dir
|
||||
release_sans_serif: build_sans_serif_pdf | release
|
||||
cp book_sans_serif/book_sans_serif.pdf release/TheBreadCode-The-Sourdough-Framework-sans-serif.pdf
|
||||
cp epub/book_sans_serif.mobi release/TheBreadCode-The-Sourdough-Framework-sans-serif.mobi
|
||||
cp epub/book_sans_serif.epub release/TheBreadCode-The-Sourdough-Framework-sans-serif.epub
|
||||
cp epub/book_sans_serif.azw3 release/TheBreadCode-The-Sourdough-Framework-sans-serif.azw3
|
||||
|
||||
# Website stuff
|
||||
.PHONY: html website
|
||||
$(website_dir)/book.html: $(website_src) cover/cover-page.xbb
|
||||
$(WEBSITE) -d $(website_dir) book.tex
|
||||
|
||||
.PHONY: html
|
||||
html: $(website_dir)/book.html
|
||||
cp $< $(website_dir)/index.html
|
||||
|
||||
@@ -273,23 +272,27 @@ html: $(website_dir)/book.html
|
||||
touch ../website/$@
|
||||
|
||||
# TODO: this will run every single time, but is so fast we don't really care
|
||||
.PHONY: website
|
||||
website: html ../website/_bundle_install_done $(ruby_src)
|
||||
cd ../website && ruby modify_build.rb
|
||||
|
||||
# Debug Stuff from now on
|
||||
.PHONY: quick show_tools_version printvars
|
||||
.PHONY: quick quick_ebook show_tools_version printvars
|
||||
|
||||
# Those 2 targets allow fast debug cycles but not reolvig refrences etc
|
||||
quick: # run latex only once no biber, no references etc..
|
||||
$(LATEX) -e '$$max_repeat=1' -output-directory=book_serif book.tex
|
||||
# Those 2 targets allow fast debug cycles but not resolving references etc
|
||||
# They also ignore dependencies and run each time you call them.
|
||||
quick: # run latex only once no biber, no references etc...
|
||||
$(LATEX) -e '$$max_repeat=1' -halt-on-error -output-directory=book_serif book.tex
|
||||
|
||||
quick_ebook: # run latex only once no biber, no references etc..
|
||||
$(EBOOK) --mode draft -f epub book.tex
|
||||
quick_ebook: cover/cover-page.xbb # run latex only once no biber, ref etc...
|
||||
$(EBOOK) --mode draft book.tex
|
||||
|
||||
show_tools_version: # Show version of tools used on the build machine
|
||||
- git log -n 1
|
||||
@echo ""
|
||||
- uname -a
|
||||
@echo ""
|
||||
- $(SHELL) --version
|
||||
@echo ""
|
||||
- latexmk --version
|
||||
@echo ""
|
||||
- lualatex --version
|
||||
@@ -300,7 +303,7 @@ show_tools_version: # Show version of tools used on the build machine
|
||||
@echo ""
|
||||
- tidy -version
|
||||
@echo ""
|
||||
- kindlegen --version
|
||||
- dvisvgm --version
|
||||
@echo ""
|
||||
- lacheck --version
|
||||
@echo ""
|
||||
@@ -312,7 +315,9 @@ show_tools_version: # Show version of tools used on the build machine
|
||||
@echo ""
|
||||
- ruby --version
|
||||
@echo ""
|
||||
|
||||
- $(CONVERT_PIC) --version
|
||||
@echo ""
|
||||
- rsync --version
|
||||
|
||||
# You can find the value of variable X with the following command:
|
||||
# make print-X
|
||||
|
||||
BIN
book/mix-ins/apple-swirl.jpg
Normal file
|
After Width: | Height: | Size: 687 KiB |
BIN
book/mix-ins/beer-bread.jpg
Normal file
|
After Width: | Height: | Size: 384 KiB |
BIN
book/mix-ins/broa.jpg
Normal file
|
After Width: | Height: | Size: 860 KiB |
@@ -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.}
|
||||
|
||||
BIN
book/mix-ins/pumpkin-on-flour.jpg
Normal file
|
After Width: | Height: | Size: 741 KiB |
BIN
book/mix-ins/pumpkin-sourdough.jpg
Normal file
|
After Width: | Height: | Size: 529 KiB |
BIN
book/mix-ins/seeded-sourdough.jpg
Normal file
|
After Width: | Height: | Size: 385 KiB |
BIN
book/mix-ins/seeds-bread.jpg
Normal file
|
After Width: | Height: | Size: 805 KiB |
BIN
book/mix-ins/stollen-close-up.jpg
Normal file
|
After Width: | Height: | Size: 463 KiB |
BIN
book/mix-ins/surface-seeds.jpg
Normal file
|
After Width: | Height: | Size: 192 KiB |
@@ -1,13 +1,38 @@
|
||||
\chapter{Non wheat sourdough}%
|
||||
\label{chapter:non-wheat-sourdough}
|
||||
\begin{quoting}
|
||||
In this chapter you will learn how to make a basic sourdough bread
|
||||
using non-wheat flour. This includes all flour except spelt.
|
||||
using non-wheat flour, basically all flour except spelt.
|
||||
The key difference between wheat and non-wheat flour is
|
||||
the quantity of gluten. Wheat and spelt feature a high amount
|
||||
of gluten. The non-wheat flours do not. In the case of rye flour,
|
||||
sugars called pentosans prevent gluten bonds from properly
|
||||
forming~\cite{rye+pentosans}.
|
||||
the quantity of gluten, the former feature a high amount
|
||||
of gluten, while the non-wheat flours do not.
|
||||
\end{quoting}
|
||||
|
||||
The whole process (see Flowchart~\ref{flc:non-wheat-sourdough}) is a lot
|
||||
easier: you mix the ingredients and wait for a certain period until the dough
|
||||
has reached the level of acidity that you like. Afterward, you shape the
|
||||
dough or pour it into a loaf pan. After a short proofing period, the bread can
|
||||
be baked. Due to the lack of gluten development, the final bread will feature
|
||||
a denser crumb compared to wheat, as you can see in
|
||||
Picture~\ref{fig:rye-crumb}.
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\input{figures/fig-non-wheat-process.tex}
|
||||
\caption[Process for non-wheat sourdough bread]{A visualization of the
|
||||
process to make non-wheat sourdough bread. The process is much simpler
|
||||
than making wheat sourdough bread. There is no gluten development. The
|
||||
ingredients are simply mixed together.}%
|
||||
\label{flc:non-wheat-sourdough}
|
||||
\end{center}
|
||||
\end{flowchart}
|
||||
|
||||
For non-wheat flours---including rye, emmer, and einkorn---no gluten
|
||||
development has to be done, meaning there is no kneading, no
|
||||
over-fermentation, and no issues with making flat bread. In the case of rye
|
||||
flour, sugars called pentosans prevent gluten bonds from properly
|
||||
forming~\cite{rye+pentosans}.
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\includegraphics[width=\textwidth]{final-bread}
|
||||
\caption[Sourdough rye bread]{A sourdough rye bread made using a loaf pan.
|
||||
@@ -16,49 +41,28 @@ forming~\cite{rye+pentosans}.
|
||||
\label{fig:non-wheat-final-bread}
|
||||
\end{figure}
|
||||
|
||||
For these flours including rye, emmer, and einkorn, no gluten
|
||||
development has to be done. This means there is no kneading,
|
||||
no over-fermentation, and no issues with making flat bread.
|
||||
The whole process
|
||||
is a lot easier. You mix the ingredients and
|
||||
wait for a certain period until the dough has
|
||||
reached the level of acidity that you like. Afterward, you
|
||||
shape the dough or pour it into a loaf pan. After a short proofing
|
||||
period, the bread can be baked. Due to the lack
|
||||
of gluten development, the final bread will feature a denser
|
||||
crumb compared to wheat.
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\input{figures/fig-non-wheat-process.tex}
|
||||
\caption[Process for non-wheat sourdough bread]{A visualization of the
|
||||
process to make non-wheat sourdough bread. The process is much simpler
|
||||
than making wheat sourdough bread. There is no gluten development. The
|
||||
ingredients are simply mixed together.}%
|
||||
\label{fig:non-wheat-sourdough}
|
||||
\end{center}
|
||||
\end{flowchart}
|
||||
|
||||
This chapter will focus on making rye bread. The flour could
|
||||
be replaced with einkorn or emmer based on your preference.
|
||||
|
||||
The following recipe will make you 2 loaves:
|
||||
\begin{itemize}
|
||||
\item \qty{1000}{\gram} of whole rye flour
|
||||
\item \qty{800}{\gram} of room temperature water (\qty{80}{\percent})
|
||||
\item \qty{200}{\gram} of sourdough starter (\qty{20}{\percent})
|
||||
\item \qty{20}{\gram} of salt (\qty{2}{\percent})
|
||||
\end{itemize}
|
||||
|
||||
\begin{tabular}{r@{}rl@{}}
|
||||
\qty{1000}{\gram} &~(\qty{100}{\percent}) & Whole rye flour\\
|
||||
\qty{800}{\gram} & (\qty{80}{\percent}) & Water at room temperature\\
|
||||
\qty{200}{\gram} & (\qty{20}{\percent}) & Sourdough starter\\
|
||||
\qty{20}{\gram} & (\qty{2}{\percent}) & Salt\\
|
||||
\end{tabular}
|
||||
|
||||
The sourdough starter can be in an active or inactive state. If it has been
|
||||
at room temperature for a week with no feedings then it will be okay, or
|
||||
at room temperature for a week with no feedings then it will be okay, same
|
||||
if it has come right out of the fridge then still it will be no problem.
|
||||
The dough is very forgiving.
|
||||
|
||||
If you follow the suggested dough from the recipe you are making a relatively
|
||||
wet rye dough. It's so wet that it can only be made using a loaf pan. If
|
||||
you want to make a freestanding rye bread, consider reducing the hydration
|
||||
to around \qty{60}{\percent}.
|
||||
If you follow the suggested quantities from the recipe you are making a
|
||||
relatively wet rye dough. It's so wet that it can only be made using a loaf
|
||||
pan. If you want to make a freestanding rye bread, consider reducing the
|
||||
hydration to around~\qty{60}{\percent}.
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\includegraphics[width=\textwidth]{ingredients}
|
||||
@@ -68,12 +72,11 @@ to around \qty{60}{\percent}.
|
||||
\label{fig:non-wheat-ingredients}
|
||||
\end{figure}
|
||||
|
||||
Mix together all the ingredients with your hands. You can also
|
||||
opt for a spatula to simplify things. Rye flour itself is very
|
||||
sticky and unpleasant to mix by hand. The dough will stick
|
||||
a lot to your hands. If you use a stiff starter, it can be
|
||||
easier to dissolve it in the dough's water. Once dissolved,
|
||||
add the other ingredients.
|
||||
Mix together all the ingredients with your hands, or opt for a spatula to
|
||||
simplify things. Rye flour itself is very sticky and unpleasant to mix by
|
||||
hand, the dough will stick a lot to your hands. If you use a stiff starter, it
|
||||
could be easier to first dissolve it in the dough's water, then add the other
|
||||
ingredients.
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\includegraphics[width=\textwidth]{sticky-hands}
|
||||
@@ -84,7 +87,7 @@ add the other ingredients.
|
||||
\label{fig:non-wheat-sticky-hands}
|
||||
\end{figure}
|
||||
|
||||
The goal of the mixing process is to homogenize the dough. There
|
||||
The goal of the mixing process is simply to homogenize the dough, there
|
||||
is no need to develop any dough strength. Once you see that
|
||||
your sourdough starter has been properly incorporated, your
|
||||
dough is ready to begin bulk fermentation.
|
||||
@@ -97,21 +100,11 @@ most of the nutrients have been eaten by your microorganisms.
|
||||
You could let your dough sit for longer, but it wouldn't alter the
|
||||
final flavor profile by much.
|
||||
|
||||
I~recommend waiting until the dough has roughly increased by~\qty{50}{\percent}
|
||||
in size. If you are daring, you can taste the dough
|
||||
to get an idea of the acidity profile. The dough will likely
|
||||
taste very sour. However, a lot of the acid will evaporate
|
||||
during the baking process. So the final loaf will not be
|
||||
as sour as the dough you are tasting.
|
||||
|
||||
Once you are happy with the acidity level, proceed to dividing
|
||||
and shaping your dough. Shaping might not be possible if you opt
|
||||
for the wetter dough. If you made a drier dough, use as much
|
||||
flour as needed to dry the dough a little bit and form a dough ball.
|
||||
There is no folding the dough. All you do is tuck it together
|
||||
as much as is needed to apply the shape of your banneton.
|
||||
For the wetter dough, use a spatula and pour as much dough as
|
||||
needed into your greased loaf pan.
|
||||
I~recommend waiting until the dough has roughly increased
|
||||
by~\qty{50}{\percent} in size. If you are daring, you can taste the dough to
|
||||
get an idea of the acidity profile, it will likely taste very sour. However, a
|
||||
lot of the acid will evaporate during the baking process, therefore the final
|
||||
loaf will not be as sour as the dough you are tasting.
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\includegraphics[width=\textwidth]{crumb}
|
||||
@@ -124,15 +117,21 @@ needed into your greased loaf pan.
|
||||
\label{fig:rye-crumb}
|
||||
\end{figure}
|
||||
|
||||
Carefully spread the dough with a spatula in your loaf pan. You
|
||||
can wet the spatula to make this process easier. Spread it
|
||||
until the surface looks smooth and shiny.
|
||||
Once you are happy with the acidity level, proceed to dividing
|
||||
and shaping your dough. If you made a drier dough, use as much
|
||||
flour as needed to dry the dough a little bit and form a dough ball.
|
||||
There is no folding the dough. All you do is tuck it together
|
||||
as much as is needed to apply the shape of your banneton.
|
||||
|
||||
Shaping might not be possible if you opt for the wetter dough. Carefully spread
|
||||
the dough with a spatula in your greased loaf pan, wetting the spatula to make
|
||||
this process easier. Spread it until the surface looks smooth and shiny.
|
||||
|
||||
For proofing, I~recommend waiting around 60~minutes. An extended
|
||||
proofing period does not make sense unless you want to further
|
||||
increase the dough's acidity. The dough will not become fluffier
|
||||
the longer you proof. With the short proofing period, however,
|
||||
the dough will become a bit more homogenous. This way the final
|
||||
the dough will become a bit more homogeneous. This way the final
|
||||
bread looks more uniform. The proofing period also allows the
|
||||
dough to fully extend and fill the edges of the loaf pan. I~also
|
||||
like to move the dough to the fridge for proofing. The dough stays
|
||||
@@ -140,24 +139,23 @@ good in the fridge for weeks. You can proceed and bake it at a
|
||||
convenient time for you.
|
||||
|
||||
Once you are happy with the proofing stage, proceed and bake your dough
|
||||
just like you'd normally do. For more details please refer to
|
||||
just like you'd normally do, more details can be found in
|
||||
Chapter~\ref{chapter:baking}. One challenging aspect
|
||||
of using a loaf pan is to make sure that the center part of your
|
||||
dough is properly cooked. For this reason, it is best to use a thermometer
|
||||
and measure the internal temperature. The bread is
|
||||
ready once the internal temperature reaches \qty{92}{\degreeCelsius} (\qty{197}{\degF}). I~recommend
|
||||
removing the bread from the loaf pan once it reaches the desired
|
||||
temperature. Then you can continue baking the loaf without the pan and
|
||||
steam. This way you achieve a great crust all around your
|
||||
loaf. You can bake as long as you like until you have achieved
|
||||
your crust color of choice. The darker, the more crunchy
|
||||
the crust and the more flavor it offers. If you feel your
|
||||
dough might have been overly acidic, you can extend the baking time.
|
||||
The longer you bake, the more acidity will evaporate.
|
||||
and measure the internal temperature. The bread is ready once the internal
|
||||
temperature reaches \qty{92}{\degreeCelsius} (\qty{197}{\degF}). I~recommend
|
||||
removing the bread from the loaf pan once it reaches the desired temperature,
|
||||
then continue baking the loaf without the pan and steam. This way you achieve
|
||||
a great crust all around your loaf, and can bake as long as you like until you
|
||||
have achieved your crust color of choice. The darker, the more crunchy
|
||||
the crust and the more flavor it offers. If you feel your dough might have
|
||||
been overly acidic you can extend the baking time, as the longer you bake, the
|
||||
more acidity will evaporate.
|
||||
|
||||
This is one of my favorite breads to bake which I~eat on an
|
||||
almost daily basis. The effort required to make bread like
|
||||
this is much lower compared to a wheat-based dough. In some
|
||||
cases, I~extend the recipe and add additional sourdough discard
|
||||
to the dough. You can add as much discard as you like. The resulting
|
||||
bread has a very complex but delicious flavor profile.
|
||||
bread will have a very complex but delicious flavor profile.
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
note = {Accessed: 2022-03-24}
|
||||
}
|
||||
|
||||
@article{rye-defects,
|
||||
@misc{rye-defects,
|
||||
author = {Marie Oest et al.},
|
||||
title = {Rye Bread Defects: Analysis of Composition and
|
||||
Further Influence Factors as Determinants
|
||||
@@ -26,7 +26,7 @@
|
||||
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,22 +83,130 @@
|
||||
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,
|
||||
@misc{jordan+bread,
|
||||
author = {Amaia Arranz-Otaegui et al.},
|
||||
title = {Archaeobotanical evidence reveals the origins of bread 14,400 years ago in northeastern Jordan},
|
||||
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{vienna+breadrolls,
|
||||
@misc{fleischmann+history,
|
||||
author = {Fleischmann History},
|
||||
title = {History of Fleischmann's},
|
||||
howpublished = {\url{https://www.fleischmannsyeast.com/our-history/}},
|
||||
note = {Accessed: 2023-12-04}
|
||||
}
|
||||
|
||||
@misc{evans+mill,
|
||||
author = {Jeremy Norman},
|
||||
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}
|
||||
}
|
||||
|
||||
@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}
|
||||
}
|
||||
|
||||
@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}
|
||||
}
|
||||
|
||||
@misc{kitchenaid+history,
|
||||
author = {KitchenAid},
|
||||
title = {KitchenAid Brand History},
|
||||
howpublished = {\url{https://www.kitchenaid.com/100year/history.html}},
|
||||
note = {Accessed: 2023-12-04}
|
||||
}
|
||||
|
||||
@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}},
|
||||
note = {Accessed: 2023-12-04}
|
||||
}
|
||||
|
||||
@book{history+mills,
|
||||
title = {Archaeological Evidence for Early Water-Mills. An Interim Report},
|
||||
journal = {History of Technology},
|
||||
number = {10},
|
||||
author = {Wikander, Örjan},
|
||||
year = {1985},
|
||||
pages = {151--179}
|
||||
}
|
||||
|
||||
@book{mills+scandinavia,
|
||||
title = {Waterwheels and Windmills: Five machines that changed the world},
|
||||
author = {Mark, Denny},
|
||||
year = {2007},
|
||||
pages = {36}
|
||||
}
|
||||
|
||||
@article{green+revolution,
|
||||
author = {Borlaug, Norman},
|
||||
title = {Contributions of conventional plant breeding to food production},
|
||||
journal = {Science},
|
||||
volume = {219},
|
||||
number = {4585},
|
||||
pages = {689-693},
|
||||
year = {1983},
|
||||
doi = {10.1126/science.219.4585.689}
|
||||
}
|
||||
|
||||
@article{switzerland+bread,
|
||||
author = {Pasquale Catzeddu},
|
||||
title = {Flour and Breads and their Fortification in Health and Disease Prevention},
|
||||
pages = {37--46},
|
||||
year = {2011}
|
||||
}
|
||||
|
||||
@book{Yong+2017,
|
||||
place = {London},
|
||||
title = {I contain multitudes: The microbes within US and a grander view of life},
|
||||
publisher = {Vintage},
|
||||
author = {Yong, Ed},
|
||||
year = {2017},
|
||||
pages = {5--9}
|
||||
}
|
||||
|
||||
@book{Yong+2017+Leeuwen,
|
||||
place = {London},
|
||||
title = {I contain multitudes: The microbes within US and a grander view of life},
|
||||
publisher = {Vintage},
|
||||
author = {Yong, Ed},
|
||||
year = {2017},
|
||||
pages = {39}
|
||||
}
|
||||
|
||||
@article{egyptian+bread,
|
||||
title = {Investigation of ancient Egyptian baking
|
||||
and brewing methods by correlative microscopy},
|
||||
volume = {273},
|
||||
doi = {10.1126/science.273.5274.488},
|
||||
number = {5274},
|
||||
journal = {Science},
|
||||
author = {Samuel, Delwen},
|
||||
year = {1996},
|
||||
pages = {488–490}
|
||||
}
|
||||
|
||||
@misc{vienna+breadrolls,
|
||||
author = {Eben Norton Horsford},
|
||||
title = {Report on Vienna bread},
|
||||
year = {1875},
|
||||
@@ -106,7 +214,7 @@
|
||||
note = {Accessed: 2022-05-02}
|
||||
}
|
||||
|
||||
@article{coeliac+disease,
|
||||
@misc{coeliac+disease,
|
||||
author = {Giovanni Battista Gasbarrini et al.},
|
||||
title = {Coeliac disease: an old or a new disease? History of a pathology},
|
||||
year = {2014},
|
||||
@@ -114,7 +222,7 @@
|
||||
howpublished = {\url{https://pubmed.ncbi.nlm.nih.gov/24435555/}}
|
||||
}
|
||||
|
||||
@article{interview+karl+de+smedt,
|
||||
@misc{interview+karl+de+smedt,
|
||||
author = {Hendrik Kleinwächter},
|
||||
title = {Interview with Karl de Smedt},
|
||||
year = {2021},
|
||||
@@ -146,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},
|
||||
@@ -165,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}
|
||||
@@ -173,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}
|
||||
@@ -181,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}},
|
||||
@@ -195,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}},
|
||||
@@ -203,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/}},
|
||||
@@ -212,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},
|
||||
@@ -220,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},
|
||||
@@ -228,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},
|
||||
@@ -244,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},
|
||||
@@ -252,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},
|
||||
@@ -260,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},
|
||||
@@ -268,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/}},
|
||||
@@ -284,7 +404,7 @@
|
||||
}
|
||||
|
||||
|
||||
@article{bassinage+technique,
|
||||
@misc{bassinage+technique,
|
||||
title = {The Bassinage Method},
|
||||
author = {The Sourdough School},
|
||||
howpublished = {\url{https://www.sourdough.co.uk/glossary/bassinage/}},
|
||||
@@ -292,7 +412,7 @@
|
||||
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/}},
|
||||
@@ -300,7 +420,7 @@
|
||||
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}},
|
||||
@@ -309,7 +429,8 @@
|
||||
}
|
||||
|
||||
@article{rye+pentosans,
|
||||
author = {Krzysztof Buksa and Anna Nowotna and Werner Praznik and Halina Gambu{\'s} and Rafa{\l} Ziobro and Jan Krawontka},
|
||||
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},
|
||||
@@ -327,6 +448,13 @@
|
||||
note = {Accessed: 2023-02-03}
|
||||
}
|
||||
|
||||
@article{bread+temperature+baking,
|
||||
author = {Athanasius},
|
||||
title = {What is the maximum internal temperature of baked goods?},
|
||||
url = {https://cooking.stackexchange.com/questions/54068/what-is-the-maximum-internal-temperature-of-baked-goods},
|
||||
note = {Accessed: 2023-03-03}
|
||||
}
|
||||
|
||||
@misc{wheat+kernel,
|
||||
author = {W. Berghoff},
|
||||
title = {A wheat kernel and its nutritional value.},
|
||||
@@ -338,12 +466,14 @@
|
||||
author = {Rachana Poudel},
|
||||
title = {Enzymatic Activities and Compostional Properties of Whole Wheat Flour},
|
||||
year = {2018},
|
||||
page = {67},
|
||||
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},
|
||||
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},
|
||||
@@ -352,7 +482,8 @@
|
||||
|
||||
@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.},
|
||||
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},
|
||||
@@ -364,7 +495,21 @@
|
||||
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},
|
||||
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}
|
||||
}
|
||||
|
||||
BIN
book/sourdough-starter/sourdough-starter-hooch.jpg
Normal file
|
After Width: | Height: | Size: 335 KiB |
|
Before Width: | Height: | Size: 494 KiB After Width: | Height: | Size: 250 KiB |
|
Before Width: | Height: | Size: 724 KiB After Width: | Height: | Size: 1.3 MiB |
@@ -1,19 +1,15 @@
|
||||
\chapter{Sourdough starter types}%
|
||||
\label{ch:starter-types}
|
||||
\begin{quoting}
|
||||
In this chapter of the book we will have a closer look
|
||||
at different sourdough starter types and their respective
|
||||
traits.
|
||||
at different sourdough starter types, and their respective
|
||||
traits and usage. They are mostly characterized by their hydration
|
||||
level, and this will provide a trade-off between acidity, volume increase and
|
||||
the gluten level of your flour.
|
||||
\end{quoting}
|
||||
|
||||
\begin{table}[htp!]
|
||||
\begin{center}
|
||||
\input{tables/table-starter-types.tex}
|
||||
\caption[Different types of sourdough]{A comparison of different
|
||||
sourdough starter types and their respective properties. The only
|
||||
difference is the level of water (hydration) that is used when
|
||||
feeding the starter.}%
|
||||
\label{tab:starter-types-comparison}
|
||||
\end{center}
|
||||
\end{table}
|
||||
\section{Introduction}%
|
||||
\label{sec:starter-types-intro}
|
||||
|
||||
Depending on the flour you have at hand, the type of starter changes. With more
|
||||
bacterial activity you have more gluten consumption of your microbes. So if
|
||||
@@ -27,7 +23,27 @@ very strong wheat flour then you can try to play with a liquid sourdough
|
||||
starter. The key difference between all of the starters is how much water
|
||||
is used in the starter. The regular starter has a 1:1 relationship of flour
|
||||
to water. The liquid starter has a 5:1 water-to-flour ratio, and the stiff
|
||||
starter has half the water as flour.
|
||||
starter has half as much water as flour, as summarized in
|
||||
Table~\ref{tab:starter-types-comparison}.
|
||||
|
||||
\begin{table}[htp!]
|
||||
\begin{center}
|
||||
\input{tables/table-starter-types.tex}
|
||||
\caption[Different types of sourdough]{A comparison of different
|
||||
sourdough starter types and their respective properties. The only
|
||||
difference is the amount of water (hydration) that is used when
|
||||
feeding the starter.}%
|
||||
\label{tab:starter-types-comparison}
|
||||
\end{center}
|
||||
\end{table}
|
||||
|
||||
You can change your starter type by just adjusting the feeding ratio of how
|
||||
much flour and water you use. I~frequently change my starter type from
|
||||
regular to liquid and then back to a stiff starter. After changing the
|
||||
environment of your microbes, apply feedings at the same ratio over a couple of
|
||||
days so that they can adapt to the new environment. I~typically see
|
||||
changes after a single feeding, but I~recommend 2 to 3 feedings, one feeding per
|
||||
day, to see a stronger effect.
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\includegraphics[width=\textwidth]{sourdough-starter-types}
|
||||
@@ -39,28 +55,23 @@ starter has half the water as flour.
|
||||
\label{fig:starter-types}
|
||||
\end{figure}
|
||||
|
||||
|
||||
You can change your starter type by just adjusting the feeding ratio of how
|
||||
much flour and water you use. I~frequently change my starter type from
|
||||
regular to liquid and then back to a stiff starter. After changing the
|
||||
environment of your microbes, apply feedings at the same ratio over a couple of
|
||||
days so that they can adapt to the new environment. I~typically see
|
||||
changes after a single feeding, but I~recommend 2 to 3 feedings, one feeding per
|
||||
day, to see a stronger effect.
|
||||
|
||||
Your dough is generally just a big sourdough starter. So your starter is going
|
||||
to adapt and regrow inside of your main dough. But you can influence the
|
||||
properties that your starter carries over to your main dough. If you have more
|
||||
bacterial fermentation, then your dough will also have slightly more bacterial
|
||||
fermentation. If you have more yeast fermentation, then your main dough will
|
||||
have slightly more yeast fermentation. This is important to know when you are
|
||||
working with a more mature unfed starter. Let's say your starter had last been
|
||||
fed 48~hours ago. Chances are that your bacteria is very active while the
|
||||
working with a more mature unfed starter.
|
||||
|
||||
Let's say your starter had last been
|
||||
fed 48~hours ago. Chances are that your bacteria are very active while the
|
||||
yeast could be dormant. In such a case you can skip feeding your starter
|
||||
before making another dough. Just use a very tiny amount of starter. For \qty{1000}{\gram}
|
||||
of flour I~would take around \qty{10}{\gram} of starter (\qty{1}{\percent} in terms of baker's
|
||||
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.
|
||||
|
||||
@@ -74,7 +85,8 @@ out during baking and no longer have the typical characteristics (fluffy crumb
|
||||
structure). A stronger flour with more gluten is thus advised. It allows for
|
||||
a longer fermentation before most gluten is broken down.
|
||||
|
||||
\section{Regular starter}
|
||||
\section{Regular starter}%
|
||||
\label{sec:regular-starter}
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\includegraphics[width=\textwidth]{sourdough-starter.jpg}
|
||||
@@ -86,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
|
||||
@@ -100,7 +112,7 @@ A regular starter is a perfect choice to use when utilizing stronger wheat or sp
|
||||
It also nicely works with rye, emmer or einkorn. If you only have a weak flour
|
||||
at hand with less gluten, this starter might cause issues. As you tend to have
|
||||
quite some bacterial activity, gluten is going to be broken down fast. When
|
||||
using the starter, use around 1 to \qty{20}{\percent} starter based on the flour of your
|
||||
using the starter, use around \qtyrange{1}{20}{\percent} starter based on the flour of your
|
||||
dough.
|
||||
|
||||
Depending on the bacteria cultivated, a regular starter either has a lactic (dairy),
|
||||
@@ -122,20 +134,23 @@ starter's flavor by changing the type to a liquid starter.
|
||||
\end{figure}
|
||||
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\input{figures/fig-liquid-starter-conversion.tex}
|
||||
\caption[Converting to a liquid starter]{The process to convert your regular
|
||||
or stiff starter into a liquid starter. The whole process takes around 3
|
||||
days. The longer you maintain your starter at the suggested hydration
|
||||
or stiff starter into a liquid starter. The whole process takes around
|
||||
3~days. The longer you maintain your starter at the suggested hydration
|
||||
level, the more adapted your microorganisms become. It is recommended to
|
||||
keep a backup of your original starter as the liquid environment will
|
||||
select anaerobic microorganisms. This boosts bacteria that create lactic
|
||||
acid rather than acetic acid. The resulting acidity will be perceived as
|
||||
milder.}%
|
||||
\label{fig:liquid-starter-conversion}
|
||||
milder. When beginning with a liquid starter your stiff starter will
|
||||
feature mild dairy notes. When beginning this process with a regular
|
||||
starter your created stiff starter will feature both dairy
|
||||
and vinegary notes.}%
|
||||
\label{flc:liquid-starter-conversion}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
\end{flowchart}
|
||||
|
||||
The liquid starter is made at a hydration of around \qty{500}{\percent}. This means
|
||||
the starter has much more water than flour. The additional layer of water on
|
||||
@@ -148,10 +163,14 @@ in this environment. This is a neat little trick to change your starter's
|
||||
flavor profile from vinegary to lactic. Your starter is going to develop
|
||||
dairy creamy notes. Interestingly, when changing the hydration again, your starter
|
||||
is going to maintain the liquid starter flavor profile, but then benefit again
|
||||
from enhanced yeast activity. The liquid starter conversion is non reversible.
|
||||
So ideally keep a backup of your stiff or regular starter.
|
||||
from enhanced yeast activity. The liquid starter conversion is nonreversible.
|
||||
By changing to a liquid starter you will permanently select a subset of
|
||||
microbes that work better in the more liquid environment. So even after going back to a regular
|
||||
or stiff starter the subset of microbes created by the liquid conversion
|
||||
will remain. For this reason, it is recommended to keep a backup of the starter
|
||||
before the liquid starter conversion.
|
||||
|
||||
To commence with the
|
||||
To begin with the
|
||||
conversion, simply take around \qty{1}{\gram} of your starter, mix with \qty{5}{\gram} flour and
|
||||
\qty{25}{\gram} water. Stir everything together properly. After a few minutes the flour is
|
||||
going to start settling in at the bottom of your jar. Repeat this process over
|
||||
@@ -173,12 +192,12 @@ and I~use \qty{50}{\gram} of starter, then I~would proceed and only use \qty{550
|
||||
water.
|
||||
|
||||
This type of starter is also an excellent mold combatant. As you are removing
|
||||
oxygen from the equation, aerobic mold can not properly grow. If your starter
|
||||
oxygen from the equation, aerobic mold cannot properly grow. If your starter
|
||||
has a mold problem then the liquid conversion could be the remedy. Take a
|
||||
piece of your starter where you suspect mold growth. Apply the conversion
|
||||
as mentioned before. The mold will likely sporulate as it runs out of food.
|
||||
With each new feeding you are reducing the mold spores. The spores can no
|
||||
longer reactivate as they can not do so in the anaerobic conditions.
|
||||
longer reactivate as they cannot do so in the anaerobic conditions.
|
||||
|
||||
The liquid on top of your starter is an excellent resource that you could use
|
||||
to make sauces. If you feel you would like to add a little bit of acidity,
|
||||
@@ -192,8 +211,10 @@ times to make lacto-fermented hot sauces.
|
||||
\includegraphics[width=\textwidth]{sourdough-starter-stiff.jpg}
|
||||
\caption[Stiff starter upside-down]{A stiff sourdough starter that I~used to
|
||||
make a Stollen dough for Christmas. Note the bubbles on the edge of the
|
||||
container. The dough does not fall out of the jar.}%
|
||||
\label{fig:stiff-sourdough-starter}
|
||||
container. The dough does not fall out of the jar. The moment
|
||||
the gluten structure breaks down due to fermentation the starter
|
||||
will ultimately fall in the jar.}%
|
||||
\label{flc:stiff-sourdough-starter}
|
||||
\end{figure}
|
||||
|
||||
The stiff starter is the driest of all the starters. It has a hydration of
|
||||
@@ -220,7 +241,7 @@ for a visual example of the starter's required hydration level.
|
||||
\label{fig:stiff-starter-dry-check}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\input{figures/fig-stiff-starter-conversion.tex}
|
||||
\caption[Converting to a stiff starter]{The process to convert your regular
|
||||
@@ -232,7 +253,7 @@ for a visual example of the starter's required hydration level.
|
||||
stiff consider increasing this to \qty{60}{\percent}.}%
|
||||
\label{fig:stiff-starter-conversion}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
\end{flowchart}
|
||||
|
||||
In the stiffer environment the yeast thrives more. This means you will have
|
||||
more \ch{CO2} production and less acid production. In my tests this is a game
|
||||
@@ -258,13 +279,13 @@ production.
|
||||
\label{fig:stollen}
|
||||
\end{figure}
|
||||
|
||||
I~then proceeded and bought a cheap low cake flour in my nearby supermarket.
|
||||
This flour before had caused me massive headaches before. I~made a sourdough bread
|
||||
exactly how I~would normally do. I~had to reduce the hydration a bit as a low
|
||||
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.
|
||||
|
||||
@@ -281,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
|
||||
@@ -292,10 +314,11 @@ water you are about to use for your dough. This will make mixing a lot easier.
|
||||
|
||||
\section{Lievito madre or pasta madre}
|
||||
|
||||
The lievito madre, also known as pasta madre, belongs to the same category as
|
||||
the stiff sourdough starter. After conducting hours of research, I~could not
|
||||
find a difference between pasta madre and lievito madre. Both terms seem to be
|
||||
used interchangeably in literature.
|
||||
The \emph{lievito madre}, also known as \emph{pasta madre}, belongs to the
|
||||
same category as the stiff sourdough starter. After conducting hours of
|
||||
research, I~could not find a difference between \emph{pasta madre} and
|
||||
\emph{lievito madre}. Both terms seem to be used interchangeably in
|
||||
literature.
|
||||
|
||||
In many recipes this starter is made directly
|
||||
from dried or fresh fruits. You can also make a starter from leaves from your
|
||||
@@ -308,19 +331,21 @@ acidifies properly when making a dough. A tool such as a pH meter can be of
|
||||
optimal help. Generally, the lower the pH, the higher the acidity. The acidity
|
||||
should be below 4.2 to know that your starter produces sufficient acidity.
|
||||
|
||||
Some bakers cleanse the lievito madre in a bath of water. This is supposed to
|
||||
Some bakers cleanse the \emph{lievito madre} in a bath of water. This is supposed to
|
||||
remove excess acidity. In my own experiments I~have not been able to confirm
|
||||
this methodology. The acidity remains the same. The only reason this could
|
||||
make sense is if you also tried to boost anaerobic microorganisms. However, then the
|
||||
starter would need to remain in this environment for quite some time and not just
|
||||
a few hours.
|
||||
|
||||
\section{Conclusion}%
|
||||
\label{sec:starter-type-conclusion}
|
||||
Baking with sourdough is simple. It's just flour and water. When seeing a recipe
|
||||
from an experienced baker you wonder, Wait, that's it? There is nothing more
|
||||
to it? I~feel that this might be the reason why some bakers have such complicated
|
||||
feeding procedures. They resort to several feedings per day at a certain given ratio.
|
||||
This makes the baker feel a little more elitist. Of course over time as
|
||||
more and more people follow this procedure, it becomes a self fulfilling prophecy.
|
||||
more and more people follow this procedure, it became a self fulfilling prophecy.
|
||||
The more experienced you become, the higher the chances are that a bogus starter
|
||||
feeding guide will reward you with beautiful results. The reason however is
|
||||
not in the starter routine. The reason is that you understand the fermentation better
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
\chapter{Making a sourdough starter}%
|
||||
\label{chapter:sourdough-starter}
|
||||
\begin{quoting}
|
||||
In this chapter you will learn how to make your
|
||||
own sourdough starter. Before doing so you will
|
||||
own sourdough starter, but before doing so you will
|
||||
quickly learn about baker's math. Don't worry,
|
||||
it's a very simple way how to write a recipe which
|
||||
is cleaner and more scalable. Once you get the hang
|
||||
of it you will want to write every recipe this way.
|
||||
You will learn to understand the signs to determine
|
||||
your starter's readiness. Furthermore you will
|
||||
also learn how to prepare your starter for long-term storage.
|
||||
You will learn to understand the signs indicating
|
||||
your starter's readiness, as well as
|
||||
how to prepare your starter for long-term storage.
|
||||
\end{quoting}
|
||||
|
||||
\section{Baker's math}%
|
||||
@@ -30,7 +32,7 @@ pizza dough recipe. In Napoli modern pizzerias would use fresh or dry yeast.
|
||||
However traditionally pizza has always been made with sourdough.}.
|
||||
The next day you suddenly have \qty{1.4}{\kg} of flour
|
||||
at hand and thus can make more pizza dough. What do you do?
|
||||
Do you multiply all the ingredients by 1.4? Yes you could,
|
||||
Do you multiply all the ingredients by \num{1.4}? Yes you could,
|
||||
but there is an easier way. This is where baker's math
|
||||
comes in handy. Let's look at the default recipe with baker's
|
||||
math and then adjust it for the \qty{1.4}{\kg} flour quantity.
|
||||
@@ -45,8 +47,8 @@ math and then adjust it for the \qty{1.4}{\kg} flour quantity.
|
||||
|
||||
Note how each of the ingredients is calculated as a percentage
|
||||
based on the flour. The \qty{100}{\percent} is the baseline and represents the absolute
|
||||
amount of flour that you have at hand. In this case that's \qty{1000}{\gram}
|
||||
(\qty{1}{\kg}).
|
||||
amount of flour that you have at hand. In this case that's
|
||||
\qty{1000}{\gram}~(\qty{1}{\kg}).
|
||||
|
||||
Now let's go back to our example and adjust the flour, as we have
|
||||
more flour available the next day. As mentioned the next day
|
||||
@@ -70,7 +72,6 @@ For the second day, that is \qty{840}{\gram}. Proceed to do the same
|
||||
thing for all the other ingredients and you will know
|
||||
your recipe.
|
||||
|
||||
|
||||
Let's say you would want to use \qty{50}{\kg} of flour
|
||||
the next day. What would you do? You would simply proceed
|
||||
to calculate the percentages one more time. I~like this
|
||||
@@ -91,12 +92,13 @@ are completely lost when trying to scale it up.
|
||||
\label{fig:sourdough-starter}
|
||||
\end{figure}
|
||||
|
||||
Making a sourdough starter is very easy. All you need
|
||||
is a little bit of patience. The flour you should
|
||||
use to setup your starter is ideally a whole flour.
|
||||
You could use whole-wheat, whole rye, whole spelt or
|
||||
Making a sourdough starter is very easy, all you need
|
||||
is a little bit of patience. It is in fact so easy that it can be summarized
|
||||
in a simple flowchart~\ref{fig:sourdough-starter-process} The flour you should
|
||||
use to bootstrap your starter is ideally a whole flour.
|
||||
You could use whole-wheat, whole-rye, whole-spelt or
|
||||
any other flour you have. In fact gluten free flours such
|
||||
as rice or corn would also work. Don't worry, you can
|
||||
as rice or corn would also work. Don't worry, you can always
|
||||
change the flour later. Use whatever whole flour you
|
||||
already have at hand.
|
||||
|
||||
@@ -104,11 +106,11 @@ Your flour is contaminated with millions of microbes. As explained
|
||||
before in the chapter about wild yeast and bacteria, these
|
||||
microbes live on the surface of the plant. That's why
|
||||
a whole flour works better because you have more natural
|
||||
contamination of the microbes you are trying to cultivate
|
||||
contamination from the microbes you are trying to cultivate
|
||||
in your starter. More of them live on the hull compared to the
|
||||
endophytes living in the grain.
|
||||
|
||||
Start by measuring approximately \qty{50}{\gram} each of flour and
|
||||
Start by measuring approximately \qty{50}{\gram} of both flour and
|
||||
water. The measurements don't have to be exact; you can use
|
||||
less or more, or just eyeball the proportions. These
|
||||
values are just shown as a reference.
|
||||
@@ -120,39 +122,42 @@ to water as a disinfectant to kill microorganisms, you will
|
||||
not be able to grow a starter with chlorinated water.
|
||||
|
||||
In this process, the hydration of your starter is \qty{100}{\percent}.
|
||||
This means you're using equal parts flour and
|
||||
This means you're using equal amount of flour and
|
||||
water. Stir everything together so that all the flour is
|
||||
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}
|
||||
\input{figures/fig-starter-process.tex}
|
||||
\caption[Process for starter from scratch]{The process of making a sourdough
|
||||
\caption[The full sourdough starter process]{The process of making a sourdough
|
||||
starter from scratch.}%
|
||||
\label{fig:sourdough-starter-process}
|
||||
\end{center}
|
||||
\end{flowchart}
|
||||
|
||||
Now an epic battle begins. In one study scientists
|
||||
have identified more than 150 different yeast species living
|
||||
on a single leaf of a plant~\cite{yeasts+biocontrol+agent}.
|
||||
Now an epic battle begins. In one study~\cite{yeasts+biocontrol+agent}
|
||||
scientists have identified more than \num{150}~different yeast species living
|
||||
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. By adding water to the
|
||||
most adaptable microorganisms will survive.
|
||||
|
||||
By adding water to the
|
||||
flour the starches start to degrade. The seedling tries to
|
||||
sprout but it no longer can. Essential for this process is the
|
||||
amylase enzyme. The compact starch is broken down to more
|
||||
digestible sugars to fuel plant growth. Glucose is what the
|
||||
plant needs in order to grow. The microorganisms that survive
|
||||
this frenzy are adapted to consuming glucose. Luckily for us
|
||||
this frenzy are adapted to consuming glucose.
|
||||
|
||||
Luckily for us
|
||||
bakers, the yeast and bacteria know very well how to metabolize
|
||||
glucose. This is what they have been fed in the wild by the plants.
|
||||
By forming patches on the leaf and protecting the plant from
|
||||
@@ -161,7 +166,9 @@ Each of the microbes tries to defeat the other by consuming the
|
||||
food fastest, producing agents to inhibit food uptake by others or by producing
|
||||
bactericides and/or fungicides. This early stage of the starter
|
||||
is very interesting as more research could possibly reveal
|
||||
new fungicides or antibiotics. Depending on where your flour
|
||||
new fungicides or antibiotics.
|
||||
|
||||
Depending on where your flour
|
||||
is from, the starting microbes of your starter might be different
|
||||
than the ones from another starter. Some people have also reported
|
||||
how the microbes from your hand or air can influence your starter's
|
||||
@@ -170,12 +177,14 @@ hand's microbes might be good at fermenting your sweat, but
|
||||
probably not so good at metabolizing glucose. The contamination
|
||||
of your hands or air might play a minor role in the initial epic
|
||||
battle. But only the fittest microbes fitting the sourdough's
|
||||
niche are going to survive. This means the microorganisms that know
|
||||
niche are going to survive.
|
||||
|
||||
This means the microorganisms knowing
|
||||
how to convert maltose or glucose will have the upper hand. Or the
|
||||
microbes that ferment the waste of the other microbes. Ethanol created
|
||||
microbes fermenting the waste of the other microbes. Ethanol created
|
||||
by the yeast is metabolized by the bacteria in your sourdough. That's
|
||||
why a sourdough has no alcohol. I~can confirm the role of aerial
|
||||
contamination to a certain extent. When setting up a new sourdough
|
||||
contamination to a certain extent, when setting up a new sourdough
|
||||
starter the whole process is quite quick for me. After a few
|
||||
days my new starter seems to be quite alive already. This might
|
||||
be due to previous contamination of flour fermenting microbes in
|
||||
@@ -195,48 +204,54 @@ my kitchen.
|
||||
\label{fig:sourdough-starter-microbial-war}
|
||||
\end{figure}
|
||||
|
||||
|
||||
Wait for around 24~hours and observe what happens to your starter.
|
||||
You might see some early signs of fermentation already. Use your nose
|
||||
to smell the dough. Look for bubbles in the dough. Your dough
|
||||
might already have increased in size a little bit. Whatever
|
||||
you see and notice is a sign of the first battle. Some microbes
|
||||
you see and notice is a sign of the first battle.
|
||||
|
||||
Some microbes
|
||||
have already been outperformed. Others have won the first battle.
|
||||
After around 24~hours most of the starch has been broken down
|
||||
and your microbes are hungry for additional sugars. With a spoon
|
||||
take around \qty{10}{\gram} from the previous day's mixture and place
|
||||
it in a new container. Again --- you could also simply eye ball
|
||||
all the quantities. It does not matter that much. Mix the 10
|
||||
grams from the previous day with another \qty{50}{\gram} of flour
|
||||
and \qty{50}{\gram} of water. Note the ratio of 1:5. I~very often use
|
||||
1 part of old culture with 5 parts of flour and 5 parts of water.
|
||||
all the quantities. It does not matter that much. Mix the \qty{10}{\gram}
|
||||
from the previous day with another \qty{50}{\gram} of flour
|
||||
and \qty{50}{\gram} of water.
|
||||
|
||||
Note the ratio of 1:5. I~very often use
|
||||
1~part of old culture with 5~parts of flour and 5~parts of water.
|
||||
This is also very often the same ratio I~use when making a dough.
|
||||
A dough is nothing else than a sourdough starter with slightly different
|
||||
A dough is nothing else than a giant sourdough starter with slightly different
|
||||
properties. I'd always be using around \qtyrange{100}{200}{\gram} of starter
|
||||
for around \qty{1000}{\gram} of flour (baker's math: \qtyrange{10}{20}{\percent}).
|
||||
|
||||
Homogenize your new mixture again with a spoon. Then cover
|
||||
the mix again with a glass or a lid. If you notice the top of
|
||||
your mixture dries out a lot consider using another cover. The
|
||||
dried-out parts will be composted by more adapted microbes such as
|
||||
mold. In many user reports, I~saw mold being able to damage
|
||||
the starter when the starter itself dried out a lot. You will
|
||||
the starter when the starter itself dried out a lot.
|
||||
|
||||
You will
|
||||
still have some mixture left from your first day. As this contains
|
||||
possibly dangerous pathogens that have been activated we will discard
|
||||
this mixture. Once your sourdough starter is mature never
|
||||
possibly dangerous pathogens that have been activated make sure you discard
|
||||
this mixture. Once your sourdough starter is mature you never need to
|
||||
discard it. It's long-fermented flour that is an excellent addon
|
||||
used to make crackers, pancakes and or delicious hearty sandwich
|
||||
bread. I~also frequently dry it and use it as a rolling agent
|
||||
used to make crackers, pancakes or delicious hearty sandwich
|
||||
bread\ldots I~also frequently dry it and use it as a rolling agent
|
||||
for pizzas that I~am making.
|
||||
|
||||
You should hopefully again see some bubbles, the starter increasing
|
||||
in size and/or the starter changing its smell. Some people give
|
||||
up after the second or third day. That is because the signs might no longer
|
||||
up after the second or third day, because the signs might no longer
|
||||
be as dominant as they were on day one. The reason for this lies in only a few
|
||||
select microbes starting to take over the whole sourdough starter. The most
|
||||
adaptable ones are going to win. They are very small in quantity and will
|
||||
adaptable ones are going to win, they are very small in quantity and will
|
||||
grow in population with each subsequent feeding. Even if you see no signs
|
||||
of activity directly, don't worry. There is activity in
|
||||
your starter on a microscopic level.
|
||||
of activity directly, do not worry, there is activity in
|
||||
your starter at a microscopic level.
|
||||
|
||||
24~hours later again we will repeat the same thing again until
|
||||
we see that our sourdough starter is active. More on that in the
|
||||
@@ -245,7 +260,7 @@ next section of this book.
|
||||
\section{Determining starter readiness}
|
||||
|
||||
For some people the whole process of setting up a starter takes
|
||||
only 4 days. For others it can take 7 days, for some even 20 days.
|
||||
only 4~days. For others it can take 7~days, for some even 20~days.
|
||||
This depends on several factors including how good your wild microbes
|
||||
are at fermenting flour. Generally speaking, with each feeding
|
||||
your starter becomes more adapted to its environment. Your
|
||||
@@ -259,7 +274,7 @@ starters.
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\input{figures/fig-starter-readiness.tex}
|
||||
\caption[Sourdough readiness flow chart]{A flow chart showing you how to
|
||||
\caption[Determining sourdough starter readiness]{A flow chart showing you how to
|
||||
determine if your sourdough starter is ready to be used. For checking
|
||||
readiness look at a size increase and take note of your starter's smell.
|
||||
Both are important indicators to check for readiness.}%
|
||||
@@ -267,10 +282,11 @@ starters.
|
||||
\end{center}
|
||||
\end{flowchart}
|
||||
|
||||
The key signs to look at are bubbles that you see in your starter
|
||||
The key sign to look at is bubbles that you see in your starter
|
||||
jar. This is a sign that the yeast is metabolizing your
|
||||
dough and creates \ch{CO2}. The \ch{CO2} is trapped in your dough
|
||||
matrix and then visualized on the edges of the container.
|
||||
|
||||
Also note the size increase of your dough. The amount the dough increases
|
||||
in size is irrelevant. Some bakers claim it doubles, triples or quadruples.
|
||||
The amount of size increase depends on your microbes, but also on
|
||||
@@ -282,11 +298,13 @@ wheat microbes might be better at breaking down gluten compared
|
||||
to rye microbes. That's one of the reasons why I~decided to change
|
||||
the flour of my sourdough starter quite often. I~had hoped to create
|
||||
an all-around starter that can ferment all sorts of different
|
||||
flour\footnote{Whether this is working I~can't scientifically say.
|
||||
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.}. Your nose is also
|
||||
my microorganisms are from a rye source.}.
|
||||
|
||||
Your nose is also
|
||||
a great tool to determine starter readiness. Depending on
|
||||
your starter's microbiome you should notice either the smell
|
||||
of lactic acid or acetic acid. Lactic acid has dairy yogurty notes.
|
||||
@@ -298,25 +316,26 @@ to determine starter readiness.
|
||||
In rare events your flour might be treated and prevent microbe growth.
|
||||
This can happen if the flour is not organic and a lot of biochemical
|
||||
agents have been used by the farmer. In that case simply try again
|
||||
with different flour. 7 days is a good period of time to wait before
|
||||
with different flour. Ten~days is a good period of time to wait before
|
||||
trying again.
|
||||
|
||||
Another methodology used by some bakers is the so called \emph{float test}.
|
||||
The idea is to take a piece of your sourdough starter and place it
|
||||
on top of some water. If the dough is full with gas it will float
|
||||
on top of some water, if the dough is full with gas it will float
|
||||
on top of the water. If it's not ready, it can't float and will
|
||||
sink to the bottom. This test does not work with every flour.
|
||||
Rye flour for instance can't retain the gas as well as wheat flour
|
||||
sink to the bottom. This test does not work with every flour,
|
||||
rye flour for instance can't retain the gas as well as wheat flour
|
||||
and thus in some cases will not float. That's why I~personally
|
||||
don't use this test and can't recommend it.
|
||||
|
||||
Once you see your starter is ready I~would recommend giving it
|
||||
one last feeding and then you are ready to make your dough in the
|
||||
evening or the next day. For the instructions to make your
|
||||
first dough please refer to the next chapters in this book.
|
||||
evening or the next day. For the instructions on how to make your
|
||||
first dough please refer to the next chapters (\ref{chapter:wheat-sourdough}
|
||||
and~\ref{chapter:non-wheat-sourdough}) in this book.
|
||||
|
||||
If your first bread failed, chances are your fermentation hasn't
|
||||
worked as expected. In many cases the source is your sourdough starter. Maybe
|
||||
worked as expected. In many cases the reason is your sourdough starter. Maybe
|
||||
the balance of bacteria and yeast isn't optimal yet. In that case a good
|
||||
solution is to keep feeding your starter once per day. With each feeding your
|
||||
starter becomes better at fermenting flour. The microbes will adapt more and
|
||||
@@ -393,8 +412,8 @@ sourdough starter into the right shape again.
|
||||
The following are a couple of scenarios that will help you to conduct proper
|
||||
starter maintenance, depending on when you want to bake the next time.
|
||||
|
||||
\textbf{I~would like to bake again the next day:}
|
||||
|
||||
\begin{description}
|
||||
\item[I~would like to bake again the next day:]
|
||||
Simply take whatever starter you have left and feed it again. If you depleted
|
||||
all your starter you can cut a piece of your dough. The dough itself is
|
||||
nothing different than a gigantic starter. I~recommend a 1:5:5 ratio like
|
||||
@@ -405,8 +424,7 @@ case I~would go for a 1:10:10 ratio. Sometimes I~don't have enough starter.
|
||||
Then I~even use a ratio of 1:50:50 or 1:100:100. Depending on how much new
|
||||
flour you feed it takes longer for your starter to be ready again.
|
||||
|
||||
\textbf{I~would like to take a break and bake next week:}
|
||||
|
||||
\item[I~would like to take a break and bake next week:]
|
||||
Simply take your leftover starter and place it inside of your fridge. It will stay good
|
||||
for a very long period. The only thing I~see happening is the surface
|
||||
drying out in the fridge. So I~recommend drowning the starter in a little bit
|
||||
@@ -419,13 +437,12 @@ to make a lacto fermented hot sauce for instance.
|
||||
The colder it is the longer you preserve a good balance of yeast and
|
||||
bacteria. Generally, the warmer it is the faster the fermentation process is,
|
||||
and the colder it is the slower the whole process becomes.
|
||||
Below \qty{4}{\degreeCelsius} the starter fermentation almost completely stops. The
|
||||
Below~\qty{4}{\degreeCelsius} the starter fermentation almost completely stops. The
|
||||
fermentation speed at low temperatures depends on the
|
||||
strains of wild yeast and bacteria
|
||||
that you have cultivated.
|
||||
|
||||
\textbf{I~would like to take a several months break:}
|
||||
|
||||
\item[I~would like to take a several months break:]
|
||||
Drying your starter might be the best option to preserve it in this case. As
|
||||
you remove humidity and food your microbes will sporulate. As there is no
|
||||
humidity the spores can resist other pathogens very well. A dried starter can
|
||||
@@ -435,7 +452,7 @@ Simply take your starter and mix it with flour. Try to crumble the starter as
|
||||
much as possible. Add more flour continuously until you notice that there is no
|
||||
moisture left. Place the flour starter in a dry place in your house. Let it
|
||||
dry out even more. If you have a dehydrator you can use this to speed up the
|
||||
process. Set it to around \qty{30}{\degreeCelsius} and dry the starter for 12--20~hours. The next
|
||||
process. Set it to around~\qty{30}{\degreeCelsius} and dry the starter for 12--20~hours. The next
|
||||
day your starter has dried out a bit. It is in a vulnerable state as there is still a bit
|
||||
of humidity left. Add some more flour to speed up the drying process. Repeat
|
||||
for another 2 days until you feel that there is no humidity left. This is
|
||||
@@ -445,10 +462,11 @@ the dried starter. Both options work perfectly fine. Your sporulated starter
|
||||
is now waiting for your next feeding. If available you can add some silica
|
||||
bags to the container to further absorb excess moisture.
|
||||
|
||||
Initially, it would take about 3 days for my starter to become alive again
|
||||
Initially, it would take about three~days for my starter to become alive again
|
||||
after drying and reactivating it. If I~do the same thing now my starter is
|
||||
sometimes ready after a single feeding. It seems that the microbes adapt. The ones
|
||||
that survive this shock become dominant subsequently.
|
||||
\end{description}
|
||||
|
||||
So in conclusion the maintenance mode you choose depends on when you want to bake next.
|
||||
The goal of each new feeding is to make sure your starter
|
||||
|
||||
@@ -13,6 +13,12 @@
|
||||
\usepackage[font={sffamily, sbseries}]{quoting}
|
||||
\usepackage{microtype}
|
||||
|
||||
% style=nextline breaks on make4ht
|
||||
\ifdefined\HCode\else
|
||||
\usepackage{enumitem}
|
||||
\setlist[description]{style=nextline, leftmargin=0cm}
|
||||
\fi
|
||||
|
||||
\DeclareNewTOC[
|
||||
type=flowchart,%
|
||||
types=flowcharts,% ,
|
||||
@@ -28,6 +34,9 @@
|
||||
\newcommand{\ie}{\emph{i.e.}\@ifnextchar.{\!\@gobble}{}}
|
||||
\newcommand{\eg}{\emph{e.g.}\@ifnextchar.{\!\@gobble}{}}
|
||||
|
||||
% Consistent pH values
|
||||
\newcommand{\pHvalue}[1]{pH~\SI{#1}{}}
|
||||
|
||||
% For tables
|
||||
\renewcommand\theadfont{\bfseries}
|
||||
|
||||
@@ -96,6 +105,7 @@
|
||||
{wheat-sourdough/}
|
||||
{wheat-sourdough/shaping/}
|
||||
{non-wheat-sourdough/}
|
||||
{mix-ins/}
|
||||
}
|
||||
|
||||
% Caption and figure size below images
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
book.tex
|
||||
@@ -1,10 +1,13 @@
|
||||
\chapter{Storing bread}%
|
||||
\label{chapter:storing-bread}
|
||||
\begin{quoting}
|
||||
In this chapter you will learn about different
|
||||
methods of storing your bread. This way
|
||||
your bread can be best enjoyed at a later
|
||||
time.
|
||||
In this chapter you will discuss different methods of storing your bread, each
|
||||
with their own pro and cons. This way your bread can be best enjoyed at a
|
||||
later time.
|
||||
\end{quoting}
|
||||
|
||||
A summary can be found in Table~\ref{table:bread-storage}, with details and
|
||||
explanation in th rest of this chapter.
|
||||
\begin{table}[!htb]
|
||||
\begin{center}
|
||||
\input{tables/table-storing-bread-overview.tex}
|
||||
@@ -35,7 +38,7 @@ A low-hydration recipe can dry out after 1--2 days;
|
||||
a high-hydration bread needs 3--4 days to dry out.
|
||||
|
||||
Once your bread has dried out, you can run it under
|
||||
tap water for around 10 to 15 seconds.
|
||||
tap water for around 10 to 15~seconds.
|
||||
This water bath allows the
|
||||
crumb's starch to absorb a lot of water. Proceed and
|
||||
bake your bread again in the oven. The resulting loaf
|
||||
@@ -55,9 +58,9 @@ base ingredients for other recipes such as \emph{Knödel}\footnote{\emph{Knödel
|
||||
Just like the previous option, you can also store your
|
||||
bread inside a container. This could be a paper bag,
|
||||
a plastic bag, or a bread storage box. The paper bag and
|
||||
most bread boxes are not fully sealed. They allow some of
|
||||
the air to diffuse out of the container. This means that
|
||||
the bread will also slightly dry out.
|
||||
most bread boxes are not fully sealed, allowing some of
|
||||
the air to diffuse out of the container. This also means that
|
||||
the bread will slightly dry out.
|
||||
|
||||
When using a sealed bag such as a plastic bag, the bread
|
||||
will retain a lot of moisture. The bread will stay good
|
||||
@@ -81,7 +84,7 @@ inhibitor.
|
||||
\section{Fridge}
|
||||
|
||||
In my own experience storing bread inside the fridge
|
||||
works well as long as you use a sealed container. Some
|
||||
works well as long as you use a sealed container, even if some
|
||||
sources say that the bread dries out inside of the
|
||||
fridge~\cite{storing+bread}. Supposedly the fridge
|
||||
encourages liquid from the crumb to migrate to the bread's surface.
|
||||
@@ -103,13 +106,19 @@ that you can consume within a day. Store each portion
|
||||
in a separate container and place them inside your
|
||||
freezer.
|
||||
|
||||
When you want to eat fresh bread, open one of the portions
|
||||
When you want to eat fresh bread, open one of the containers
|
||||
in the morning and allow the bread to thaw over a few
|
||||
hours. This way you can easily remove the frozen-together
|
||||
slices. Proceed and toast the slices in your toaster
|
||||
hours. This is needed so you can easily separate the frozen-together
|
||||
slices. Toast the slices in your toaster
|
||||
or bake them in the oven until they have the crispness
|
||||
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}.
|
||||
250
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,22 @@ body{
|
||||
/* ****************** */
|
||||
|
||||
main.main-content,main.titlepage,div.footnotes{
|
||||
padding:1rem;
|
||||
}
|
||||
|
||||
.permalink {
|
||||
opacity: 0.5;
|
||||
text-decoration: none;
|
||||
font-size: 0.75rem;
|
||||
line-height: 0.8rem;
|
||||
margin-left: 0.25rem;
|
||||
color: black;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.sectionHead, .subsectionHead {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
align-content: center;
|
||||
}
|
||||
|
||||
p.indent, p.noindent{
|
||||
@@ -127,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 {
|
||||
@@ -159,6 +177,7 @@ figure.texsource, figure.shellcommand, figure.htmlsource, figure.luasource, figu
|
||||
|
||||
.main-content {
|
||||
line-height: var(--f-lh);
|
||||
margin-left: 30px;
|
||||
}
|
||||
|
||||
div.footnotes {
|
||||
@@ -214,6 +233,7 @@ figcaption.caption {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 300px;
|
||||
}
|
||||
|
||||
.menu-items .chapterToc, .menu-items .likechapterToc {
|
||||
@@ -224,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;
|
||||
@@ -233,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;
|
||||
@@ -268,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;
|
||||
@@ -287,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;
|
||||
}
|
||||
@@ -304,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;
|
||||
}
|
||||
|
||||
@@ -352,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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,74 +1,90 @@
|
||||
Abu,
|
||||
Adam,
|
||||
Adele Schmitz,
|
||||
Agatha,
|
||||
Alanblue,
|
||||
Albert,
|
||||
Alicia,
|
||||
Amanda M.,
|
||||
Amanor,
|
||||
Andail,
|
||||
Andreas Schmid,
|
||||
Andrzej Mitelski,
|
||||
Anna G.,
|
||||
anonnn,
|
||||
aomanor,
|
||||
Anonnn,
|
||||
Anthony Atkinson,
|
||||
Aurore,
|
||||
BTSkete,
|
||||
Beatriz,
|
||||
Bee,
|
||||
Ben Davies,
|
||||
BigWullie,
|
||||
Blixikan,
|
||||
Blusie,
|
||||
Brigitta,
|
||||
Brockman,
|
||||
BTSkete,
|
||||
C Fazio,
|
||||
Cal Kotz,
|
||||
Case,
|
||||
Cédric Andrieu,
|
||||
Charlene Adkins,
|
||||
Chin Pui Ling,
|
||||
Chris DuBosq,
|
||||
Chris G,
|
||||
Chris Toph,
|
||||
Christiane B,
|
||||
Christine,
|
||||
Chrysanna,
|
||||
Colleen Guidone,
|
||||
DKitSeattle,
|
||||
Danieel,
|
||||
Daniel,
|
||||
David,
|
||||
Dee,
|
||||
Desiree S,
|
||||
DKitSeattle,
|
||||
dlenkes,
|
||||
douglas.penna,
|
||||
DRey,
|
||||
Douglas Penna,
|
||||
Drey,
|
||||
Duivelsjong,
|
||||
Elaine Leung,
|
||||
Ellie,
|
||||
Ethan,
|
||||
Francois le Danois,
|
||||
François le Danois,
|
||||
Fredrik,
|
||||
Geoff,
|
||||
Guillermo,
|
||||
HansAndreManfredsson,
|
||||
Hansandremanfredsson,
|
||||
Heather Currier,
|
||||
Hito,
|
||||
IlseFA,
|
||||
Inma McLeish,
|
||||
Ilsefa,
|
||||
Inma Mcleish,
|
||||
Jackie,
|
||||
Jacques Lucke,
|
||||
Jan Chrillesen,
|
||||
Jan-Pieter Van Den Wittenboer,
|
||||
Jane,
|
||||
Jc Bell,
|
||||
Jenny,
|
||||
Jessicat,
|
||||
JimJo,
|
||||
Jimjo,
|
||||
John E Bergman,
|
||||
Jonathan,
|
||||
JorisBelmans,
|
||||
Jose Lausuch,
|
||||
Judith Roth,
|
||||
Julian,
|
||||
Justin Dybedahl,
|
||||
JZ,
|
||||
Jz,
|
||||
Kankiti,
|
||||
Kathy Goldstein,
|
||||
kathy word,
|
||||
Kathy Word,
|
||||
Ken Miller,
|
||||
Kirill Sivy,
|
||||
Kuchengnom,
|
||||
Laurent Bouguetaïa,
|
||||
Leon,
|
||||
Lili1232000,
|
||||
Lise W,
|
||||
Lizabeth Kelly,
|
||||
lou,
|
||||
Lou,
|
||||
Lukasz G,
|
||||
Manse,
|
||||
Marcel,
|
||||
@@ -77,51 +93,57 @@ Marie,
|
||||
Marijke,
|
||||
Mark,
|
||||
Martin,
|
||||
Matthew Nowosiadly,
|
||||
Medea,
|
||||
Meghann,
|
||||
Melissa,
|
||||
Michaela,
|
||||
Michaela Gáliková,
|
||||
mieke,
|
||||
Michaela,
|
||||
Mieke,
|
||||
Mimi,
|
||||
moj shar,
|
||||
MonicaKS,
|
||||
Moj Shar,
|
||||
Monicaks,
|
||||
Nancy Anne Martin,
|
||||
Nancy Keary,
|
||||
Nic Lecloux,
|
||||
Nick,
|
||||
nirpf,
|
||||
Nirpf,
|
||||
Paaskus,
|
||||
Pascal H,
|
||||
Paula Jean McKenney Valadez,
|
||||
Paul Will,
|
||||
Paula Jean Mckenney Valadez,
|
||||
Pauline Roberts (Capyboppy),
|
||||
Pitdepitis,
|
||||
Rachelle and Omar,
|
||||
RaptorRich,
|
||||
Rachelle And Omar,
|
||||
Raptorrich,
|
||||
Rich,
|
||||
RiztheBread,
|
||||
RoijalBaker,
|
||||
Rizthebread,
|
||||
Roijalbaker,
|
||||
Rori,
|
||||
Ruben August Fischer,
|
||||
Sander,
|
||||
Sandy,
|
||||
Sarah,
|
||||
Scooter,
|
||||
Scott Mattson,
|
||||
SebastianKlocke,
|
||||
Sebastianklocke,
|
||||
Sharon Eicher,
|
||||
ShelleyMierle,
|
||||
SheriK,
|
||||
Shelleymierle,
|
||||
Sherik,
|
||||
Smirnov,
|
||||
Spencer,
|
||||
strambinha,
|
||||
Sue,
|
||||
Strambinha,
|
||||
Sue,
|
||||
Sune,
|
||||
Susan,
|
||||
Sven,
|
||||
tbonewilly,
|
||||
Tbonewilly,
|
||||
Thales Mello,
|
||||
TheRealBruce,
|
||||
Therealbruce,
|
||||
Tracy \& Paul Will,
|
||||
Usliv,
|
||||
Vassil Dichev,
|
||||
Vladimir Smirnov,
|
||||
Voicu,
|
||||
Zika,
|
||||
Zoltan
|
||||
Zoltan.
|
||||
|
||||
|
Can't render this file because it has a wrong number of fields in line 149.
|
@@ -1,10 +1,10 @@
|
||||
%TODO: last line is not great
|
||||
-\begin{tabular}{lll}
|
||||
%TODO: Alignement is not great
|
||||
\begin{tabular}{@{}lll@{}}
|
||||
\toprule
|
||||
& \textbf{Flat breads} & \textbf{Pancakes} \\ \midrule
|
||||
\textbf{Flour} & 100g & 100g \\
|
||||
\textbf{Water} & 100g (100\%) & 300g (300\%) \\
|
||||
\textbf{Sourdough starter} & 5--20g (5--20\%) & 5--20g (5--20\%) \\
|
||||
\textbf{Salt} & 2g (2\%) & 2g (2\%) \\
|
||||
\textbf{Bake when?} & Dough increased 50 percent in size & Bubbles visible on surface \\ \bottomrule
|
||||
Flour & \qty{100}{g} & \qty{100}{g} \\
|
||||
Water & up to \qty{100}{g} (\qty{100}{\percent}) & \qty{300}{g} (\qty{300}{\percent}) \\
|
||||
Sourdough starter & 5--\qty{20}{g} (5--\qty{20}{\percent}) & 5--\qty{20}{g} (5--\qty{20}{\percent}) \\
|
||||
Salt & \qty{2}{g} (\qty{2}{\percent}) & \qty{2}{g} (\qty{2}{\percent}) \\
|
||||
Bake when? & Dough increased \qty{50}{\percent} in size & Bubbles visible on surface \\ \bottomrule
|
||||
\end{tabular}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
\begin{tabular}{@{}llrrr@{}}
|
||||
\toprule
|
||||
\thead{USA} & \thead{UK} & {\thead{Germany}} & {\thead{France}} & {\thead{Italy}} \\ \midrule
|
||||
\textbf{USA} & \textbf{UK} & {\textbf{Germany}} & {\textbf{France}} & {\textbf{Italy}} \\ \midrule
|
||||
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
|
||||
|
||||
@@ -1,12 +1,6 @@
|
||||
\begin{tabular}{@{}>{\bfseries}lcccc@{}}
|
||||
\begin{tabular}{@{}lcccc@{}}
|
||||
\toprule
|
||||
\thead{Grain type} & \thead{Homogenize} & \thead{Knead} & \thead{Stretch \& Fold} & \thead{Shape} \\ \midrule
|
||||
Wheat & Yes & Yes & Yes & Yes \\
|
||||
\textgreater{}~70\% Wheat & Yes & Yes & Yes & Yes \\
|
||||
Spelt & Yes & Yes & Yes & Yes \\
|
||||
Rye & Yes & No & No & No \\
|
||||
Emmer & Yes & No & No & No \\
|
||||
Einkorn & Yes & No & No & No \\
|
||||
Rice & Yes & No & No & No \\
|
||||
Corn & Yes & No & No & No \\ \bottomrule
|
||||
\textbf{Grain type} & \textbf{Homogenize} & \textbf{Knead} & \textbf{Stretch \& Fold} & \textbf{Shape} \\ \midrule
|
||||
Spelt, Wheat (\textgreater{}~70\%) & Yes & Yes & Yes & Yes \\
|
||||
Rye, Emmer, Einkorn, Rice, Corn & Yes & No & No & No \\ \bottomrule
|
||||
\end{tabular}
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
% TODO
|
||||
\begin{tabular}{@{}>{\bfseries}p{0.17\textwidth}ccc@{}}
|
||||
\begin{tabular}{@{}llll@{}}
|
||||
\toprule
|
||||
& \thead{Flatbread} & \thead{Loaf pan bread} & \thead{Free standing bread} \\ \midrule
|
||||
Cooking method & Fire, pan, barbecue & Oven & Oven \\
|
||||
Working time (min.) & 3 & 5 & 60 \\
|
||||
& \multicolumn{3}{c}{\textbf{Type of bread}}\\
|
||||
\cmidrule(lll){2-4}
|
||||
& \textbf{Flat} & \textbf{Loaf pan} & \textbf{Free standing} \\ \midrule
|
||||
Cooking method & Pan, fire, barbecue & Oven & Oven \\
|
||||
Working time & 3~min. & 5~min. & 60~min. \\
|
||||
Flour types & All & All & Gluten flours \\
|
||||
Difficulty & Very easy & Easy & Difficult \\
|
||||
Cost & Low & Medium & High \\ \bottomrule
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
\begin{tabular}{@{}rcll@{}}
|
||||
\toprule
|
||||
\thead{W-Value} & \thead{Hydration (\%)} & \thead{Uses} & \thead{Fermentation time} \\ \midrule
|
||||
0--150 & 50 & Cookies & Very short\\
|
||||
150--250 & 50--60 & Cakes, Bread, Pizza & Short-Medium\\
|
||||
\textbf{W-Value} & \textbf{Hydration (\%)} & \textbf{Uses} & \textbf{Fermentation time} \\ \midrule
|
||||
0--150 & 50 & Cookies & Very short \\
|
||||
150--250 & 50--60 & Cakes, Bread, Pizza & Short--Medium \\
|
||||
250--350 & 60--70 & Bread, Pizza & Long \\
|
||||
350+ & 70--90 & Bread, Pizza & Very long \\ \bottomrule
|
||||
\end{tabular}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
\begin{tabular}{@{}lclll@{}}
|
||||
\toprule
|
||||
& & &\multicolumn{2}{c}{\textbf{Activity}}\\
|
||||
\cmidrule(rl){4-5}
|
||||
\thead{Starter type} & \thead{Hydration (\%)} & \thead{Flour type} & \thead{Yeast} & \thead{Bacterial} \\ \midrule
|
||||
\cmidrule(ll){4-5}
|
||||
\textbf{Starter type} & \textbf{Hydration (\%)} & \textbf{Flour type} & \textbf{Yeast} & \textbf{Bacterial} \\ \midrule
|
||||
Regular & 100 & Strong wheat & Balanced & Balanced \\
|
||||
Liquid & 500 & Very strong wheat & Minimal & High \\
|
||||
Stiff & 50--60 & All wheat & High & Low \\
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
\begin{tabular}{@{}crr@{}}
|
||||
\begin{tabular}{@{}c
|
||||
S[table-format=2.0]
|
||||
S[table-format=2.1]@{}}
|
||||
\toprule
|
||||
&\multicolumn{2}{c}{\textbf{Amount (\%) of a starter}}\\
|
||||
&\multicolumn{2}{c}{\textbf{Amount (\%) for a starter}}\\
|
||||
\cmidrule(rl){2-3}
|
||||
\thead{°C / °F} & \thead{Recently fed} & \thead{Starving}\\ \midrule
|
||||
\textbf{°C / °F} & \textbf{Recently fed} & \textbf{Starving}\\ \midrule
|
||||
30 / 86 & 5 & 2.5 \\
|
||||
25 / 77 & 10 & 5 \\
|
||||
20 / 68 & 15 & 10 \\ \bottomrule
|
||||
|
||||
@@ -1,18 +1,19 @@
|
||||
\begin{tabular}{@{}>{\bfseries}p{0.3\textwidth}p{0.3\textwidth}p{0.3\textwidth}@{}}
|
||||
\def\arraystretch{1.6}
|
||||
\begin{tabular}{@{}p{0.23\textwidth}p{0.33\textwidth}p{0.33\textwidth}@{}}
|
||||
\toprule
|
||||
\thead{Method} & \thead{Advantages} & \thead{Disadvantages} \\ \midrule
|
||||
\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 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.\\
|
||||
|
||||
Freezer & Bread stays good for years.
|
||||
& Requires thawing and then toasting. Requires freezer and energy.\\
|
||||
|
||||
\bottomrule
|
||||
\end{tabular}
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
\Preamble{xhtml}
|
||||
\renewcommand\listofflowcharts{%
|
||||
\chapter*{\listoflocname}%
|
||||
\TableOfContents[loc]%
|
||||
}
|
||||
\ConfigureToc{loc}{\HCode{<span class="lofToc">}}{\ }{}{\HCode{</span><br />}}
|
||||
\begin{document}
|
||||
\Configure{DocumentLanguage}{en}
|
||||
\Configure{OpfScheme}{URI}
|
||||
|
||||
@@ -76,7 +76,7 @@ of this bread compared to an open crumb.
|
||||
|
||||
\begin{figure}
|
||||
\includegraphics[width=\textwidth]{fermented-too-long}
|
||||
\caption{A relatively flat dough that has many tiny pockets of air.}%
|
||||
\caption[Overfermented sourdough bread]{A relatively flat dough that has many tiny pockets of air.}%
|
||||
\label{fig:fermented-too-long}
|
||||
\end{figure}
|
||||
|
||||
@@ -98,8 +98,9 @@ appreciated less. However, I~personally really like the hearty strong taste.
|
||||
It is excellent in combination with something
|
||||
sweet or a soup. From a consistency perspective, it is no longer as fluffy as it could be.
|
||||
The crumb might also taste a little bit gummy. That's because it has been broken down a lot
|
||||
by the bacteria. Furthermore, this style of bread has a significantly lower amount of gluten~\cite{raffaella+di+cagno}
|
||||
and is no longer comparable to raw flour, it's a fully fermented product.
|
||||
by the bacteria. Furthermore, this style of bread has a significantly lower amount
|
||||
of gluten~\cite{raffaella+di+cagno} and is no longer comparable to raw flour,
|
||||
it's a fully fermented product.
|
||||
You can compare it with a blue cheese that is almost lactose free.
|
||||
|
||||
When trying to work with the dough, you will notice that suddenly the dough feels
|
||||
@@ -110,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
|
||||
@@ -138,6 +139,17 @@ 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
|
||||
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.
|
||||
|
||||
For instance, a dough that's ideal after 8 hours of retarding might be ready in
|
||||
merely 4~hours if it began at a higher temperature. Thus, it's crucial to
|
||||
experiment and determine the optimal retarding duration for your specific
|
||||
conditions. Conversely, if the dough starts colder, fermentation halts more
|
||||
rapidly in the refrigerator. In such scenarios, allowing the dough to proof at
|
||||
room temperature briefly before refrigerating can be beneficial.
|
||||
|
||||
\subsection{Underfermented}
|
||||
|
||||
@@ -306,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.
|
||||
|
||||
|
Before Width: | Height: | Size: 363 KiB After Width: | Height: | Size: 363 KiB |
@@ -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
|
||||
@@ -189,7 +189,7 @@ the top.
|
||||
|
||||
\begin{figure}[!htb]
|
||||
\begin{center}
|
||||
\includegraphics[width=0.5\textwidth]{hooch}
|
||||
\includegraphics[width=0.5\textwidth]{sourdough-starter-hooch}
|
||||
\caption[Hooch] {Hooch building on top of a sourdough
|
||||
starter~\cite{liquid+on+starter}.}%
|
||||
\label{fig:hooch}
|
||||
@@ -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.
|
||||
|
||||
|
Before Width: | Height: | Size: 298 KiB After Width: | Height: | Size: 115 KiB |
@@ -18,14 +18,14 @@ making this type of bread requires a lot more effort, patience,
|
||||
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 to 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.
|
||||
learn also require a bit more skill. It took me several attempts
|
||||
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
|
||||
valuable puzzle piece. Aggregating all this
|
||||
information was one of my main motivations to start The Bread Code.
|
||||
information was one of my main motivations to start \texttt{The Bread Code}.
|
||||
My key learning was that there is no recipe that
|
||||
you can blindly follow. You will always have to adapt the recipe
|
||||
to your locally available tools and environment.
|
||||
@@ -100,7 +100,7 @@ main dough.
|
||||
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\input{figures/fig-wheat-sourdough-starter-process.tex}
|
||||
\input{figures/fig-starter-readiness.tex}
|
||||
\caption[Process to prepare your starter before baking]{The process to check
|
||||
your sourdough starter when making wheat-based doughs. In practice
|
||||
I~frequently use a stiff sourdough starter. The stiff starter features
|
||||
@@ -209,7 +209,8 @@ Find below an example recipe for 1 loaf including baker's math calculation:
|
||||
\begin{itemize}
|
||||
\item \qty{400}{\gram} of bread flour
|
||||
\item \qty{100}{\gram} of whole-wheat flour
|
||||
\item \textbf{\qty{500}{\gram} of flour in total}
|
||||
% Manual unit so we can use emphasis
|
||||
\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})
|
||||
@@ -221,9 +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 \textbf{\qty{2000}{\gram} of flour, equaling 4 loaves}
|
||||
\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{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})
|
||||
@@ -231,7 +233,7 @@ recipe would look like this:
|
||||
|
||||
This is the beauty of baker's math. Simply recalculate the percentages, and you
|
||||
are good to go. If you are unsure about how this works, please check out the
|
||||
full Chapter~\ref{section:bakers-math} which looks at the topic in detail.
|
||||
full Section~\ref{section:bakers-math} which looks at the topic in detail.
|
||||
|
||||
\section{Hydration}
|
||||
|
||||
@@ -245,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
|
||||
@@ -332,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.
|
||||
@@ -390,8 +392,8 @@ difficulty.
|
||||
\section{How much starter?}
|
||||
|
||||
Most bakers use around \qty{20}{\percent} sourdough starter based on the
|
||||
flour weight. I~recommend going much lower,
|
||||
to around 5 to \qty{10}{\percent}.
|
||||
flour weight. I~recommend going much lower, to around
|
||||
\qtyrange{5}{10}{\percent}.
|
||||
|
||||
By adjusting the amount of pre-ferment you can influence the time your dough
|
||||
requires in the bulk fermentation stage. The more starter you use, the faster
|
||||
@@ -407,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
|
||||
@@ -443,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}
|
||||
@@ -475,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
|
||||
@@ -650,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
|
||||
@@ -787,7 +794,7 @@ this is not an option for an inexperienced baker. As
|
||||
you make more and more dough, you will be able to judge
|
||||
the dough's state by touching it.
|
||||
|
||||
My go-to method for beginners is to use an \textbf{Aliquot jar}.
|
||||
My go-to method for beginners is to use an \emph{Aliquot jar}.
|
||||
The aliquot is a sample that you extract from your dough. The
|
||||
sample is extracted after creating the initial dough strength.
|
||||
You monitor the aliquot's size increase to judge the
|
||||
@@ -859,8 +866,8 @@ up inside your dough. The acidity value (pH) can be
|
||||
measured using such a meter. The more acidity, the lower the pH
|
||||
value of your dough. The pH scale is logarithmic, meaning
|
||||
that each digit change will have a 10x increase in acidity.
|
||||
A sourdough dough might begin fermenting at a pH of 6,
|
||||
then shortly before baking has a pH of around 4. This means
|
||||
A sourdough dough might begin fermenting at \pHvalue{6.0},
|
||||
then shortly before baking has roughly \pHvalue{4.0}. This means
|
||||
that the dough itself is 10x times 10x (= 100x) sourer
|
||||
than at the beginning. By using the meter, you can always
|
||||
judge the state of your dough's acidification and then act
|
||||
@@ -1069,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
|
||||
@@ -1114,7 +1122,7 @@ batch. It is optional if you are making a single loaf.
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\input{figures/fig-dividing-preshaping.tex}
|
||||
\caption[Dividing decision tree]{Dividing is only required when you are
|
||||
\caption[Is dividing your dough required check]{Dividing is only required when you are
|
||||
making multiple loaves in a single dough batch.}%
|
||||
\label{fig:dividing-decision-tree}
|
||||
\end{center}
|
||||
@@ -1148,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:
|
||||
@@ -1229,7 +1237,7 @@ your environment.
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\input{figures/fig-shaping-process.tex}
|
||||
\caption[Shaping process]{A schematic visualization of the shaping process
|
||||
\caption[Sourdough shaping process]{A schematic visualization of the shaping process
|
||||
including checks for an overfermented dough.}%
|
||||
\label{fig:shaping-decision-tree}
|
||||
\end{center}
|
||||
@@ -1444,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
|
||||
@@ -1454,14 +1462,14 @@ of retarding and flavor development.
|
||||
\begin{flowchart}[!htb]
|
||||
\begin{center}
|
||||
\input{figures/fig-proofing-process.tex}
|
||||
\caption[Proofing process]{A schematic overview of the different steps of
|
||||
\caption[Sourdough proofing process]{A schematic overview of the different steps of
|
||||
the sourdough proofing process. The proofing technique to choose depends
|
||||
on your availability and schedule.}%
|
||||
\label{fig:proofing-process}
|
||||
\end{center}
|
||||
\end{flowchart}
|
||||
|
||||
To me, the sole purpose of cold proofing is its ability to allow you
|
||||
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,
|
||||
@@ -1479,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
|
||||
@@ -1525,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
|
||||
@@ -1564,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.
|
||||
|
||||
@@ -1610,8 +1618,8 @@ banneton should now be facing you.
|
||||
\label{fig:artistic-scoring}
|
||||
\end{figure}
|
||||
|
||||
The scoring cut for done at a \qty{45}{\angle} angle relative to the dough's
|
||||
surface slightly off the dough's center. With the \qty{45}{\angle} angle cut
|
||||
The scoring cut for done at a \ang{45}~angle relative to the dough's
|
||||
surface slightly off the dough's center. With the \ang{45}~angle cut
|
||||
the overlaying side will rise more in the oven than the other side.
|
||||
This way you will achieve a so-called \emph{ear} on the final bread.
|
||||
The ear is a thin crisp edge that offers intriguing texture
|
||||
@@ -1621,7 +1629,7 @@ a good loaf into a great loaf.
|
||||
|
||||
\begin{figure}[htb!]
|
||||
\includegraphics[width=\textwidth]{bread-scoring-angle}
|
||||
\caption[Scoring angle]{The \qty{45}{\angle} angle at which you score the
|
||||
\caption[Scoring angle]{The \ang{45}~angle at which you score the
|
||||
dough is relative to the surface of the dough. When scoring more towards
|
||||
the side, you have to adjust the angle to achieve the ear on your
|
||||
bread.}%
|
||||
@@ -1665,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
|
||||
|
||||
51
makefile
@@ -1,45 +1,46 @@
|
||||
.DEFAULT_GOAL := build_pdf
|
||||
|
||||
DOCKER_IMAGE := ghcr.io/hendricius/the-sourdough-framework
|
||||
DOCKER_CMD := docker run --rm -it -v $(PWD):/opt/repo --platform linux/x86_64 $(DOCKER_IMAGE) /bin/bash -c
|
||||
|
||||
.PHONY: build_pdf
|
||||
build_pdf: mrproper
|
||||
docker run -it -v $(PWD):/opt/repo $(DOCKER_IMAGE) /bin/bash -c "cd /opt/repo/book && make"
|
||||
.PHONY: bake build_pdf build_docker_image push_docker_image validate website
|
||||
.PHONY: print_os_version start_shell printvars show_tools_version mrproper
|
||||
|
||||
.PHONY: bake
|
||||
bake: mrproper
|
||||
docker run -it -v $(PWD):/opt/repo $(DOCKER_IMAGE) /bin/bash -c "cd /opt/repo/book && make bake"
|
||||
|
||||
.PHONY: build_docker_image
|
||||
# Dockers targets
|
||||
build_docker_image:
|
||||
docker build -t $(DOCKER_IMAGE) -f Dockerfile --progress=plain .
|
||||
|
||||
.PHONY: push_docker_image
|
||||
push_docker_image:
|
||||
push_docker_image: build_docker_image
|
||||
docker push $(DOCKER_IMAGE):latest
|
||||
|
||||
.PHONY: website
|
||||
website: mrproper
|
||||
docker run -it -v $(PWD):/opt/repo $(DOCKER_IMAGE) /bin/bash -c "cd /opt/repo/book && make website"
|
||||
# Books/website
|
||||
build_serif_pdf:
|
||||
$(DOCKER_CMD) "cd /opt/repo/book && make build_serif_pdf"
|
||||
|
||||
.PHONY: validate
|
||||
validate: mrproper
|
||||
docker run -it -v $(PWD):/opt/repo $(DOCKER_IMAGE) /bin/bash -c "cd /opt/repo/book && make -j build_pdf build_serif_ebook"
|
||||
build_ebook:
|
||||
$(DOCKER_CMD) "cd /opt/repo/book && make build_ebook"
|
||||
|
||||
build_pdf:
|
||||
$(DOCKER_CMD) "cd /opt/repo/book && make"
|
||||
|
||||
bake:
|
||||
$(DOCKER_CMD) "cd /opt/repo/book && make -j bake"
|
||||
|
||||
website:
|
||||
$(DOCKER_CMD) "cd /opt/repo/book && make website"
|
||||
|
||||
.PHONY: mrproper
|
||||
mrproper:
|
||||
docker run -it -v $(PWD):/opt/repo $(DOCKER_IMAGE) /bin/bash -c "cd /opt/repo/book && make mrproper"
|
||||
$(DOCKER_CMD) "cd /opt/repo/book && make mrproper"
|
||||
|
||||
.PHONY: show_tools_version
|
||||
# Debug helpers
|
||||
show_tools_version:
|
||||
docker run -it -v $(PWD):/opt/repo $(DOCKER_IMAGE) /bin/bash -c "cd /opt/repo/book && make show_tools_version"
|
||||
$(DOCKER_CMD) "cd /opt/repo/book && make show_tools_version"
|
||||
|
||||
.PHONY: printvars
|
||||
printvars:
|
||||
docker run -it -v $(PWD):/opt/repo $(DOCKER_IMAGE) /bin/bash -c "cd /opt/repo/book && make printvars"
|
||||
$(DOCKER_CMD) "cd /opt/repo/book && make printvars"
|
||||
|
||||
.PHONY: print_os_version
|
||||
print_os_version:
|
||||
docker run -it -v $(PWD):/opt/repo $(DOCKER_IMAGE) /bin/bash -c "cat /etc/*release"
|
||||
$(DOCKER_CMD) "cat /etc/*release"
|
||||
|
||||
.PHONY: start_shell
|
||||
start_shell:
|
||||
docker run -it -v $(PWD):/opt/repo $(DOCKER_IMAGE) /bin/bash
|
||||
|
||||
@@ -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
|
||||
|
||||
BIN
website/assets/arrow.png
Normal file
|
After Width: | Height: | Size: 298 B |
BIN
website/assets/banner.png
Normal file
|
After Width: | Height: | Size: 170 KiB |
|
Before Width: | Height: | Size: 500 KiB |
BIN
website/assets/og_image_mixins.png
Normal file
|
After Width: | Height: | Size: 319 KiB |
@@ -5,6 +5,8 @@ require 'nokogiri'
|
||||
# several optimisations on the HTML. Nokogiri is used to facilitate the
|
||||
# modifications.
|
||||
|
||||
class InvalidWebsiteFormat < StandardError; end
|
||||
|
||||
class ModifyBuild
|
||||
HOST = "https://www.the-sourdough-framework.com".freeze
|
||||
|
||||
@@ -15,6 +17,8 @@ class ModifyBuild
|
||||
def build
|
||||
build_latex_html
|
||||
create_sitemap
|
||||
rescue InvalidWebsiteFormat => e
|
||||
raise e
|
||||
end
|
||||
|
||||
private
|
||||
@@ -27,7 +31,7 @@ class ModifyBuild
|
||||
html_file_name = fn.split("/")[-1]
|
||||
content += "#{HOST}/#{html_file_name}\n"
|
||||
end
|
||||
File.open("#{build_dir}/sitemap.txt", 'w') { |file| file.write(content) }
|
||||
File.open("#{build_dir}/sitemap.txt", 'w:UTF-8') { |file| file.write(content) }
|
||||
end
|
||||
|
||||
def build_latex_html
|
||||
@@ -41,26 +45,37 @@ class ModifyBuild
|
||||
end
|
||||
|
||||
def modify_file(filename)
|
||||
orig_text = File.read(filename)
|
||||
orig_text = File.read(filename, encoding: "UTF-8")
|
||||
validate_file(orig_text)
|
||||
text = fix_double_slashes(orig_text)
|
||||
text = fix_navigation_bar(text)
|
||||
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") {|file| file.puts text }
|
||||
File.open(filename, "w:UTF-8") {|file| file.puts text }
|
||||
end
|
||||
|
||||
def is_cover_page?(filename)
|
||||
@@ -69,8 +84,12 @@ 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"].any? do |name|
|
||||
["listfigurename.html", "listtablename.html", "listoflocname.html", "bibname.html"].any? do |name|
|
||||
filename.include?(name)
|
||||
end
|
||||
end
|
||||
@@ -100,6 +119,18 @@ class ModifyBuild
|
||||
text.gsub(/\/\//, "/")
|
||||
end
|
||||
|
||||
# Sometimes for whatever reason the make4ht input produces files that are
|
||||
# improperly formatted. This validator will go through the files and do a
|
||||
# couple of basic checks to see if the files are in the format we expect. If
|
||||
# not an exception is caused.
|
||||
def validate_file(text)
|
||||
doc = build_doc(text)
|
||||
stylesheets = doc.css("link[rel='stylesheet']").map{|attr| attr["href"] }
|
||||
has_all_styles = %w(book.css style.css).all? { |required_stylesheet| stylesheets.include?(required_stylesheet) }
|
||||
raise InvalidWebsiteFormat.new("No style tag style.css found in the website") unless has_all_styles
|
||||
true
|
||||
end
|
||||
|
||||
def fix_navigation_bar(text)
|
||||
doc = build_doc(text)
|
||||
elements = [doc.search('.chapterToc'), doc.search('.sectionToc'), doc.search('.subsectionToc')].flatten
|
||||
@@ -128,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{<div class="menu-entry">#{g.to_html}</div>}
|
||||
end
|
||||
end
|
||||
html += %Q{<div class="menu-group">
|
||||
<div class="menu-inner">
|
||||
#{out}
|
||||
</div>
|
||||
<img class="menu-arrow" src="arrow.png" />
|
||||
</div>}
|
||||
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)
|
||||
@@ -213,7 +283,7 @@ class ModifyBuild
|
||||
content = doc.css("body > .main-content")[0]
|
||||
menu = doc.css("body > nav")[0]
|
||||
content = %Q{
|
||||
<main class="titlepage">
|
||||
<main class="titlepage main-content">
|
||||
<a href="Thehistoryofsourdough.html">
|
||||
<img src="cover-page.jpg" />
|
||||
<div class="version"><p>#{version}</p></div>
|
||||
@@ -227,25 +297,48 @@ class ModifyBuild
|
||||
# Users are lost and can't easily access the root page of the book. This
|
||||
# adds a home menu item.
|
||||
def add_home_link_to_menu(text)
|
||||
doc = build_doc(text)
|
||||
# Remove duplicate menu entries first before building clean menu
|
||||
doc = build_doc(remove_duplicate_entries_menu(text))
|
||||
|
||||
menu = doc.css(".menu-items")[0]
|
||||
return text if menu.nil?
|
||||
|
||||
home_html = %Q{<span class="chapterToc home-link"><a href="/">Home</a></span>}
|
||||
home_html = %Q{<span class="chapterToc home-link"><a href="/">🍞 The Sourdough Framework</a></span>}
|
||||
# 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
|
||||
# details
|
||||
appendix_html = %Q{
|
||||
<span class="chapterToc">
|
||||
<span class="chapterToc flowcharts-menu">
|
||||
<a href="listoflocname.html">
|
||||
<span class="link_text">List of Flowcharts</span>
|
||||
</a>
|
||||
</span>
|
||||
<span class="chapterToc listtables-menu">
|
||||
<a href="listtablename.html">
|
||||
<span class="link_text">List of Tables</span>
|
||||
</a>
|
||||
</span>
|
||||
<span class="chapterToc listfigures-menu">
|
||||
<a href="listfigurename.html">
|
||||
<span class="link_text">List of Figures</span>
|
||||
</a>
|
||||
</span>
|
||||
<span class="chapterToc">
|
||||
<a href="https://breadco.de/kofi">
|
||||
<span class="chapter_number">⭐️</span>
|
||||
<span class="link_text">Donate</span>
|
||||
<a href="bibname.html">
|
||||
<span class="link_text">Bibliography</span>
|
||||
</a>
|
||||
</span>
|
||||
<span class="chapterToc">
|
||||
<a href="https://www.the-bread-code.io/book.pdf">
|
||||
<span class="chapter_number">⬇️</span>
|
||||
<span class="link_text">Book .PDF</span>
|
||||
</a>
|
||||
</span>
|
||||
<span class="chapterToc">
|
||||
<a href="https://www.the-bread-code.io/book.epub">
|
||||
<span class="chapter_number">⬇️</span>
|
||||
<span class="link_text">Book .EPUB</span>
|
||||
</a>
|
||||
</span>
|
||||
<span class="chapterToc">
|
||||
@@ -254,11 +347,67 @@ class ModifyBuild
|
||||
<span class="link_text">Hardcover Book</span>
|
||||
</a>
|
||||
</span>
|
||||
<span class="chapterToc">
|
||||
<a href="https://www.github.com/hendricius/the-sourdough-framework">
|
||||
<span class="chapter_number">⚙️</span>
|
||||
<span class="link_text">Source code</span>
|
||||
</a>
|
||||
</span>
|
||||
<span class="chapterToc">
|
||||
<a href="https://breadco.de/kofi">
|
||||
<span class="chapter_number">⭐️</span>
|
||||
<span class="link_text">Support me</span>
|
||||
</a>
|
||||
</span>
|
||||
}
|
||||
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{
|
||||
<div class='wrapper'>
|
||||
#{build_header_html}
|
||||
<div class='book-content'>
|
||||
#{menu.to_html}
|
||||
<main class='main-content'>
|
||||
#{main.inner_html}
|
||||
#{footnotes ? footnotes.to_html : ''}
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
return doc.to_html
|
||||
end
|
||||
|
||||
def build_header_html
|
||||
%Q{
|
||||
<div class="header"><img src="banner.png"></div>
|
||||
}
|
||||
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)
|
||||
doc = build_doc(text)
|
||||
remove = ["List of Tables", "List of Figures"]
|
||||
selected_elements = doc.css(".menu-items .chapterToc > a").select do |el|
|
||||
remove.include?(el.text)
|
||||
end
|
||||
selected_elements.each(&:remove)
|
||||
doc.to_html
|
||||
end
|
||||
|
||||
# Some of the links in the menu have an anchor. This makes clicking through
|
||||
# the menu frustrating as the browser jumps a lot on each request. Only do
|
||||
# this for the top level menu entries though.
|
||||
@@ -364,27 +513,48 @@ 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)
|
||||
|
||||
selected = doc.css(".menu-items .chapterToc > a").find do |el|
|
||||
el["href"] == ""
|
||||
end
|
||||
|
||||
# Special case for index page
|
||||
if ["index.html", "book.html"].include?(filename)
|
||||
doc.css(".menu-items .chapterToc.home-link")[0].add_class("selected")
|
||||
#if ["index.html", "book.html"].include?(filename)
|
||||
# doc.css(".menu-items .chapterToc.home-link")[0].add_class("selected")
|
||||
# return doc.to_html
|
||||
#end
|
||||
|
||||
# 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].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
|
||||
|
||||
return doc.to_html unless selected
|
||||
|
||||
# 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
|
||||
|
||||
@@ -415,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{<a href="#term-#{anchor}" class="permalink">🔗</a>}
|
||||
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{
|
||||
<h2 class="chapterHead home-title">
|
||||
@@ -493,13 +677,9 @@ class ModifyBuild
|
||||
|
||||
<p class="noindent">
|
||||
EPUB: <a href="https://www.the-bread-code.io/book.epub">https://www.the-bread-code.io/book.epub</a><br>
|
||||
EPUB (no serif): <a href="https://www.the-bread-code.io/book-sans-serif.epub">https://www.the-bread-code.io/book-sans-serif.epub</a>
|
||||
EPUB in Black & White, size optimized for screen readers : <a href="https://www.the-bread-code.io/bw-book.epub">https://www.the-bread-code.io/bw-book.epub</a><br>
|
||||
</p>
|
||||
|
||||
<p class="noindent">
|
||||
Kindle: <a href="https://www.the-bread-code.io/book.azw3">https://www.the-bread-code.io/book.azw3</a><br>
|
||||
Kindle (no serif): <a href="https://www.the-bread-code.io/book-sans-serif.azw3">https://www.the-bread-code.io/book-sans-serif.azw3</a>
|
||||
</p>
|
||||
|
||||
<p class="noindent">
|
||||
The full source code of the book can be found here:
|
||||
@@ -533,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
|
||||
|
||||
@@ -559,6 +736,83 @@ class ModifyBuild
|
||||
def build_doc(text)
|
||||
Nokogiri::HTML(text)
|
||||
end
|
||||
|
||||
def add_anchors_to_headers(text)
|
||||
doc = build_doc(text)
|
||||
content = doc.css(".sectionHead, .subsectionHead")
|
||||
content.each do |el|
|
||||
anchor = el.attribute("id").value
|
||||
# No anchor for whatever reason
|
||||
next unless anchor
|
||||
|
||||
copy_link = %Q{<a href="##{anchor}" class="permalink">🔗</a>}
|
||||
el.inner_html = "#{el.inner_html}#{copy_link}"
|
||||
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('<div class="mobile-banner"><img src="banner.png" /></div>')
|
||||
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 ? "<a class='prev' href='#{prev_link.attr('href')}'>Previous page</a>" : ''
|
||||
next_html = next_link ? "<a class='next' href='#{next_link.attr('href')}'>Next page</a>" : ''
|
||||
link_cont.inner_html = %Q{
|
||||
#{prev_html}
|
||||
#{next_html}
|
||||
}
|
||||
doc.to_html
|
||||
end
|
||||
end
|
||||
|
||||
ModifyBuild.build
|
||||
|
||||