Update of cookbook. Thanks, Tobias!
This commit is contained in:
parent
c46634c57d
commit
f39cfc3e1c
Binary file not shown.
@ -1,3 +1,5 @@
|
|||||||
|
%!TEX ROOT = ./main.tex
|
||||||
|
|
||||||
\section*{Vorwort}
|
\section*{Vorwort}
|
||||||
\addcontentsline{toc}{section}{Vorwort}
|
\addcontentsline{toc}{section}{Vorwort}
|
||||||
|
|
||||||
|
296
kekse.py
296
kekse.py
@ -1,38 +1,41 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
from openpyxl import Workbook
|
|
||||||
from openpyxl import load_workbook
|
|
||||||
import sys
|
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
|
|
||||||
|
from openpyxl import load_workbook, Workbook
|
||||||
|
from openpyxl.worksheet.worksheet import Worksheet
|
||||||
|
|
||||||
|
|
||||||
|
def escape_latex(content):
|
||||||
def escape_latex (content):
|
content = content.replace("⁄", "/")
|
||||||
content=content.replace("⁄","/")
|
# content = content.replace("℔", r"\ lb")
|
||||||
content=content.replace("℔", "\ lb")
|
content = content.replace("½", "$\\frac{1}{2}$")
|
||||||
content=content.replace("½", "$\\frac{1}{2}$")
|
content = content.replace("¼", "$\\frac{1}{4}$")
|
||||||
content=content.replace("¼", "$\\frac{1}{4}$")
|
content = content.replace("¾", "$\\frac{3}{4}$")
|
||||||
content=content.replace("¾", "$\\frac{3}{4}$")
|
content = content.replace("\n", "\n\n")
|
||||||
content=content.replace("\n", "\\\\\n")
|
content = content.replace("°", r"$^\circ$")
|
||||||
content=content.replace("°", "$^\circ$")
|
content = content.replace("&", r"\&")
|
||||||
content = content.replace("&", "\&")
|
|
||||||
content = content.replace("ö", "ö")
|
content = content.replace("ö", "ö")
|
||||||
|
|
||||||
|
content = re.sub(r'(\d) (\d+)/(\d+)', r'$\1\\frac{\2}{\3}$', content)
|
||||||
|
content = re.sub(r'(\d+)/(\d+)', r'$\\frac{\1}{\2}$', content)
|
||||||
|
content = re.sub(r'([\d$]g?) ?- ?([\d$])', '\\1--\\2', content)
|
||||||
|
content = content.replace("$ ", r"$\,")
|
||||||
|
|
||||||
return content
|
return content
|
||||||
|
|
||||||
|
|
||||||
# Define output file
|
# Define output file
|
||||||
f_latex = open("rezepte.tex","w+")
|
f_latex = open("rezepte.tex", "w+")
|
||||||
|
f_latex.write("%!TEX ROOT = ./main.tex\n\n")
|
||||||
|
|
||||||
# Load cookbook
|
# Load cookbook
|
||||||
cb = load_workbook('/home/sebastian/Projekte/Kochbuch/kekse.xlsx', data_only=1)
|
cb: Workbook = load_workbook('kekse.xlsx', data_only=True)
|
||||||
|
|
||||||
sheets = cb.sheetnames
|
sheets = cb.sheetnames
|
||||||
|
|
||||||
ws = None
|
|
||||||
|
|
||||||
|
|
||||||
# Find worksheet with recipes
|
# Find worksheet with recipes
|
||||||
ws = cb.get_sheet_by_name("Rezepte")
|
ws: Worksheet = cb["Rezepte"]
|
||||||
|
|
||||||
# Variables to store information while parsing
|
# Variables to store information while parsing
|
||||||
|
|
||||||
@ -51,8 +54,7 @@ ingredients = {}
|
|||||||
ingredients_unit = {}
|
ingredients_unit = {}
|
||||||
ingredients_comment = {}
|
ingredients_comment = {}
|
||||||
|
|
||||||
ingredients_other_row = 0
|
ingredients_other_row = 0
|
||||||
|
|
||||||
|
|
||||||
# Other fields
|
# Other fields
|
||||||
type_row = 0
|
type_row = 0
|
||||||
@ -75,236 +77,234 @@ for column in ws.columns:
|
|||||||
for cell in column:
|
for cell in column:
|
||||||
|
|
||||||
# Find row of type of recipe
|
# Find row of type of recipe
|
||||||
if(cell.value=="Art"):
|
if cell.value == "Art":
|
||||||
type_row = cell.row
|
type_row = cell.row
|
||||||
legend_row = cell.row
|
legend_row = cell.row
|
||||||
legend_col = cell.column
|
legend_col = cell.column
|
||||||
|
|
||||||
if(cell.column == legend_col):
|
if cell.column == legend_col:
|
||||||
# Find row of recipe name, this is in the row with 'Zutaten'
|
# Find row of recipe name, this is in the row with 'Zutaten'
|
||||||
if(cell.value == "Zutaten"):
|
if cell.value == "Zutaten":
|
||||||
name_row = cell.row
|
name_row = cell.row
|
||||||
ingredients_row_start = cell.row +1
|
ingredients_row_start = cell.row + 1
|
||||||
in_ingredients = True
|
in_ingredients = True
|
||||||
|
|
||||||
|
|
||||||
# Find position of ingredients
|
# Find position of ingredients
|
||||||
if(cell.value == "Hauptaromen"):
|
if cell.value == "Hauptaromen":
|
||||||
aroma_row = cell.row
|
aroma_row = cell.row
|
||||||
|
|
||||||
# Find position of source
|
# Find position of source
|
||||||
if(cell.value == "Quelle"):
|
if cell.value == "Quelle":
|
||||||
source_row = cell.row
|
source_row = cell.row
|
||||||
|
|
||||||
# Instructions
|
# Instructions
|
||||||
if(cell.value== "Anleitung"):
|
if cell.value == "Anleitung":
|
||||||
instructions_row = cell.row
|
instructions_row = cell.row
|
||||||
|
|
||||||
# Check if we are at end of ingredients
|
# Check if we are at end of ingredients
|
||||||
if(cell.value== "Sonstiges (Deko)"):
|
if cell.value == "Sonstiges (Deko)":
|
||||||
ingredients_other_row = cell.row
|
ingredients_other_row = cell.row
|
||||||
in_ingredients = False
|
in_ingredients = False
|
||||||
|
|
||||||
# Make list of all ingredients and their units
|
# Make list of all ingredients and their units
|
||||||
if(cell.row >= ingredients_row_start and in_ingredients):
|
if cell.row >= ingredients_row_start and in_ingredients:
|
||||||
string = cell.value
|
string = cell.value
|
||||||
|
|
||||||
if("(" in string and ")" in string):
|
if "(" in string and ")" in string:
|
||||||
ingredients[cell.row] = (cell.value.split('(')[0].rstrip())
|
m = re.match(r'^([^(\n]*)(?: \((\S+ [^)]+)\))?(?: \(([^)]+)\))?$', cell.value)
|
||||||
ingredients_unit[cell.row] = (cell.value.split('(')[1].split(')')[0].rstrip())
|
assert m
|
||||||
ingredients_comment[cell.row] = (cell.value.split(')')[1].rstrip())
|
ingredients[cell.row] = m.group(1)
|
||||||
|
ingredients_unit[cell.row] = m.group(3)
|
||||||
|
ingredients_comment[cell.row] = m.group(2)
|
||||||
else:
|
else:
|
||||||
ingredients[cell.row] = (string)
|
ingredients[cell.row] = string
|
||||||
ingredients_unit[cell.row] = ("")
|
ingredients_unit[cell.row] = ""
|
||||||
ingredients_comment[cell.row] = ("")
|
ingredients_comment[cell.row] = ""
|
||||||
|
|
||||||
|
|
||||||
# Further instructions
|
# Further instructions
|
||||||
if(cell.value== "Backzeit (Minuten)"):
|
if cell.value == "Backzeit (Minuten)":
|
||||||
baking_time_row = cell.row
|
baking_time_row = cell.row
|
||||||
if(cell.value== "Backtemperatur Umluft (Grad)"):
|
if cell.value == "Backtemperatur Umluft (Grad)":
|
||||||
baking_temperature_row = cell.row
|
baking_temperature_row = cell.row
|
||||||
if(cell.value== "Ruhezeit (Minuten)"):
|
if cell.value == "Ruhezeit (Minuten)":
|
||||||
resting_time_row = cell.row
|
resting_time_row = cell.row
|
||||||
if(cell.value== "Anzahl (ca.)"):
|
if cell.value == "Anzahl (ca.)":
|
||||||
number_row = cell.row
|
number_row = cell.row
|
||||||
if(cell.value== "Besonderheiten"):
|
if cell.value == "Besonderheiten":
|
||||||
specials_row = cell.row
|
specials_row = cell.row
|
||||||
|
|
||||||
# Years
|
# Years
|
||||||
if(cell.value == 2013):
|
if cell.value == 2013:
|
||||||
first_year_row = cell.row
|
first_year_row = cell.row
|
||||||
last_year_row = cell.row
|
last_year_row = cell.row
|
||||||
first_year = 2013
|
first_year = 2013
|
||||||
|
|
||||||
if(first_year_row > 0 and cell.value == "Kommentare zur Bearbeitung."):
|
if first_year_row > 0 and cell.value == "Kommentare zur Bearbeitung.":
|
||||||
# cell.row -2 instead of -1 to ignore current year 2021
|
# cell.row -2 instead of -1 to ignore current year 2021
|
||||||
last_year_row = cell.row-2
|
last_year_row = cell.row - 2
|
||||||
|
|
||||||
# By now, we should have found everything in the legend
|
# By now, we should have found everything in the legend
|
||||||
|
|
||||||
|
|
||||||
#####
|
#####
|
||||||
|
|
||||||
# Parse recipe
|
# Parse recipe
|
||||||
# Go through worksheet vertically, starting with the first column
|
# Go through worksheet vertically, starting with the first column
|
||||||
# If right of legend, then it must be a recipe
|
# If right of legend, then it must be a recipe
|
||||||
if(cell.column > legend_col):
|
if cell.column > legend_col:
|
||||||
|
|
||||||
# Obtain information of recipe in the right order, so that we can directly write it to the tex-file.
|
# Obtain information of recipe in the right order, so that we can directly write it to the tex-file.
|
||||||
|
|
||||||
# Name of recipe
|
# Name of recipe
|
||||||
content = (ws._get_cell(name_row, cell.column).value)
|
content = ws.cell(name_row, cell.column).value
|
||||||
if(content != "None\n" and content != None):
|
if content != "None\n" and content is not None:
|
||||||
f_latex.write(str("\\begin{minipage}{\\textwidth}\n"))
|
f_latex.write("\\newpage\n")
|
||||||
|
|
||||||
#if (content[-5:]=="(Oma)"):
|
# if (content[-5:]=="(Oma)"):
|
||||||
# content="Omas " + content[:-6]
|
# content="Omas " + content[:-6]
|
||||||
f_latex.write(str("\section{%s}\\vspace{0.5cm}\n" % content))
|
f_latex.write("\\section{%s}\\vspace{0.5cm minus 0.5cm}\n" % content)
|
||||||
|
|
||||||
f_latex.write(str("\\begin{tabular}{lll}\n"))
|
f_latex.write("\\begin{tabular}{lll}\n")
|
||||||
|
|
||||||
# Aroma
|
# Aroma
|
||||||
content = (ws._get_cell(aroma_row, cell.column).value)
|
content = ws.cell(aroma_row, cell.column).value
|
||||||
if(content != "None\n" and content != None):
|
if content != "None\n" and content is not None:
|
||||||
f_latex.write(str("\\faHeart & \\textbf{Hauptzutat} & %s" % content))
|
f_latex.write("\\faHeart & \\textbf{Hauptzutat} & %s" % content)
|
||||||
|
|
||||||
f_latex.write(str("\\index{\\textbf{%s}}" % content.replace(", ", "}} \\index{\\textbf{")))
|
f_latex.write("\\index{\\textbf{%s}}" % content.replace(", ", "}} \\index{\\textbf{"))
|
||||||
f_latex.write("\\\\\n")
|
f_latex.write("\\\\\n")
|
||||||
|
|
||||||
# Type
|
# Type
|
||||||
content = (ws._get_cell(type_row, cell.column).value)
|
content = ws.cell(type_row, cell.column).value
|
||||||
if(content != "None\n" and content != None):
|
if content != "None\n" and content is not None:
|
||||||
f_latex.write(str("\\faEye & \\textbf{Form} & %s" % content))
|
f_latex.write("\\faEye & \\textbf{Form} & %s" % content)
|
||||||
f_latex.write(str("\\index[formen]{\\textbf{%s}}" % content.replace(", ", "}} \\index[formen]{\\textbf{")))
|
f_latex.write("\\index[formen]{\\textbf{%s}}" % content.replace(", ", "}} \\index[formen]{\\textbf{"))
|
||||||
f_latex.write("\\\\\n")
|
f_latex.write("\\\\\n")
|
||||||
|
|
||||||
# Source
|
# Source
|
||||||
content = (ws._get_cell(source_row, cell.column).value)
|
content = ws.cell(source_row, cell.column).value
|
||||||
if(content != "None\n" and content != None):
|
if content != "None\n" and content is not None:
|
||||||
f_latex.write(str("\\faBook & \\textbf{Quelle} & %s" % content))
|
f_latex.write("\\faBook & \\textbf{Quelle} & %s" % content)
|
||||||
f_latex.write("\\\\\n")
|
f_latex.write("\\\\\n")
|
||||||
|
|
||||||
# Specials
|
# Specials
|
||||||
content = (ws._get_cell(specials_row, cell.column).value)
|
content = ws.cell(specials_row, cell.column).value
|
||||||
if content == "(vegan)" or content == "(Vegan)":
|
if content == "(vegan)" or content == "(Vegan)":
|
||||||
content="Vegan möglich"
|
content = "Vegan möglich"
|
||||||
if content == "(zuckerfrei)" or content == "(Zuckerfrei)":
|
if content == "(zuckerfrei)" or content == "(Zuckerfrei)":
|
||||||
content="Zuckerfrei möglich"
|
content = "Zuckerfrei möglich"
|
||||||
if(content != "None\n" and content != None):
|
if content != "None\n" and content is not None:
|
||||||
f_latex.write(str("\\faStar & \\textbf{Besonderheiten} & %s" % content))
|
f_latex.write("\\faStar & \\textbf{Besonderheiten} & %s" % content)
|
||||||
f_latex.write(str("\\index[specials]{\\textbf{%s}}" % content.replace(", ", "}} \\index[specials]{\\textbf{")))
|
f_latex.write("\\index[specials]{\\textbf{%s}}" % content.replace(", ", "}} \\index[specials]{\\textbf{"))
|
||||||
f_latex.write("\\\\\n")
|
f_latex.write("\\\\\n")
|
||||||
|
|
||||||
# Baking
|
# Baking
|
||||||
content1 = str(ws._get_cell(baking_time_row, cell.column).value)
|
content1 = str(ws.cell(baking_time_row, cell.column).value)
|
||||||
content2 = str(ws._get_cell(baking_temperature_row, cell.column).value)
|
content2 = str(ws.cell(baking_temperature_row, cell.column).value)
|
||||||
|
|
||||||
if((content1 != "None" and content1 != None and content1 != "0") or (content2 != "None" and content2 != None and content2 != "0")):
|
if (content1 != "None" and content1 is not None and content1 != "0") or (content2 != "None" and content2 is not None and content2 != "0"):
|
||||||
f_latex.write(str("\\Oven & \\textbf{Backzeit} &"))
|
f_latex.write("\\Oven & \\textbf{Backzeit} &")
|
||||||
if(content1 != "None" and content1 != None and content1 != "0"):
|
if content1 != "None" and content1 is not None and content1 != "0":
|
||||||
if(content1[-4:]=="Min."):
|
if content1[-4:] == "Min.":
|
||||||
content1 = content1[:-4]
|
content1 = content1[:-4]
|
||||||
f_latex.write(str("%s Minuten bei " % content1))
|
content1 = re.sub(r'(\d) ?- ?(\d)', '\\1--\\2', content1)
|
||||||
|
f_latex.write("%s Minuten bei " % content1)
|
||||||
else:
|
else:
|
||||||
f_latex.write(str(" bei"))
|
f_latex.write(" bei")
|
||||||
if(content2 != "None" and content2 != None and content2 != "0"):
|
if content2 != "None" and content2 is not None and content2 != "0":
|
||||||
f_latex.write(str(" %s~$^\circ$C" % content2))
|
f_latex.write(" %s~$^\circ$C" % content2)
|
||||||
f_latex.write("\\\\\n")
|
f_latex.write("\\\\\n")
|
||||||
|
|
||||||
# Resting time
|
# Resting time
|
||||||
content = str(ws._get_cell(resting_time_row, cell.column).value)
|
content = str(ws.cell(resting_time_row, cell.column).value)
|
||||||
if(content != "None" and content != None and content != "0"):
|
if content != "None" and content is not None and content != "0":
|
||||||
f_latex.write(str("\\faClockO & \\textbf{Ruhezeit} &"))
|
f_latex.write("\\faClockO & \\textbf{Ruhezeit} &")
|
||||||
if(content[-1:]=="h"):
|
if content[-1:] == "h":
|
||||||
f_latex.write(str(" %s Stunden" % content[:-1]))
|
f_latex.write(" %s Stunden" % content[:-1])
|
||||||
else:
|
else:
|
||||||
f_latex.write(str("%s Minuten" % content))
|
f_latex.write("%s Minuten" % content)
|
||||||
f_latex.write("\\\\\n")
|
f_latex.write("\\\\\n")
|
||||||
|
|
||||||
# Amount
|
# Amount
|
||||||
content = (ws._get_cell(number_row, cell.column).value)
|
content = ws.cell(number_row, cell.column).value
|
||||||
if(content != "None\n" and content != None):
|
if content != "None\n" and content is not None:
|
||||||
f_latex.write(str("\\faHashtag & \\textbf{Anzahl} & %s Stück\\\\\n" % content))
|
f_latex.write("\\faHashtag & \\textbf{Anzahl} & %s Stück\\\\\n" % content)
|
||||||
|
|
||||||
# Years
|
# Years
|
||||||
year = first_year
|
year = first_year
|
||||||
count = 0
|
count = 0
|
||||||
output = "\\faCalendar & \\textbf{Gebacken} &"
|
output = "\\faCalendar & \\textbf{Gebacken} &"
|
||||||
for i in range (first_year_row, last_year_row+1):
|
for i in range(first_year_row, last_year_row + 1):
|
||||||
content = (ws._get_cell(i, cell.column).value)
|
content = ws.cell(i, cell.column).value
|
||||||
if(content != "None\n" and content != None):
|
if content != "None\n" and content is not None:
|
||||||
# Cookie was baked in year
|
# Cookie was baked in year
|
||||||
output = output + " " + str(year) + ","
|
output = output + " " + str(year) + ","
|
||||||
count +=1
|
count += 1
|
||||||
year += 1
|
year += 1
|
||||||
if(count == 0):
|
if count == 0:
|
||||||
output = output + " Noch nie gebacken"
|
output = output + " Noch nie gebacken"
|
||||||
else:
|
else:
|
||||||
output = output[:-1]
|
output = output[:-1]
|
||||||
f_latex.write(str(output+"\\\\\n"))
|
f_latex.write(str(output + "\\\\\n"))
|
||||||
|
|
||||||
if(count > 0):
|
|
||||||
f_latex.write(str("\\faLineChart & \\textbf{Häufigkeit} & " + str(round(100/(year-first_year)*count))+"\\%\\\\\n"))
|
|
||||||
|
|
||||||
f_latex.write(str("\\end{tabular}\n"))
|
|
||||||
|
|
||||||
|
if count > 0:
|
||||||
|
f_latex.write("\\faLineChart & \\textbf{Häufigkeit} & " + str(round(100 / (year - first_year) * count)) + "\\,\\%\\\\\n")
|
||||||
|
|
||||||
|
f_latex.write("\\end{tabular}\n")
|
||||||
|
|
||||||
# List of Ingredients
|
# List of Ingredients
|
||||||
f_latex.write(str("\\subsection*{Zutaten}\n"))
|
f_latex.write("\\subsection*{Zutaten}\n")
|
||||||
|
|
||||||
f_latex.write(str("\\begin{compactitem}\n"))
|
f_latex.write("\\begin{multicols}2\\raggedright\n")
|
||||||
for i in range (ingredients_row_start, ingredients_other_row):
|
f_latex.write("\\begin{compactitem}\n")
|
||||||
content = str(ws._get_cell(i, cell.column).value)
|
for i in range(ingredients_row_start, ingredients_other_row):
|
||||||
if(content != "None\n" and content != None and content != "None"):
|
number = str(ws.cell(i, cell.column).value)
|
||||||
|
if number != "None\n" and number is not None and number != "None":
|
||||||
|
|
||||||
#content = content + ingredients_unit[i-ingredients_row_start] + ingredients[i-ingredients_row_start]
|
# Add unit and whitespaces
|
||||||
|
if not ingredients_unit[i]:
|
||||||
# Add unit and whitespaces if needed
|
unit = ""
|
||||||
if (ingredients_unit[i] !="g"):
|
elif ingredients_unit[i][0].islower():
|
||||||
content = content + " "
|
unit = "\\," + ingredients_unit[i]
|
||||||
if (ingredients_unit[i] != ""):
|
|
||||||
content = content + ingredients_unit[i] + " "
|
|
||||||
|
|
||||||
# Add Ingredient name
|
|
||||||
if (ingredients[i] == "Ei"):
|
|
||||||
if(content == "1 "):
|
|
||||||
content = content + "Ei"
|
|
||||||
else:
|
|
||||||
content = content + "Eier"
|
|
||||||
else:
|
else:
|
||||||
content = content + ingredients[i]
|
unit = "~" + ingredients_unit[i]
|
||||||
|
|
||||||
|
# Add Ingredient name
|
||||||
|
label = ingredients[i]
|
||||||
|
if ingredients[i] == "Ei":
|
||||||
|
unit = ""
|
||||||
|
if number == "1":
|
||||||
|
label = "Ei"
|
||||||
|
else:
|
||||||
|
label = "Eier"
|
||||||
|
|
||||||
# Add comment if available
|
# Add comment if available
|
||||||
if(ingredients_comment[i] != ""):
|
if ingredients_comment[i]:
|
||||||
content = content + "; " + ingredients_unit[i]
|
label += r" \penalty-10(" + ingredients_comment[i] + ")"
|
||||||
|
|
||||||
content=escape_latex(content)
|
label = escape_latex(label)
|
||||||
|
f_latex.write("\\item %s%s %s \n" % (number, unit, label))
|
||||||
|
|
||||||
f_latex.write(str("\\item %s \n") % content)
|
f_latex.write("\\end{compactitem}\n")
|
||||||
|
f_latex.write("\\end{multicols}\n")
|
||||||
f_latex.write(str("\\end{compactitem}\n\\vspace{0.2cm}\n"))
|
f_latex.write("\\vspace{0.2cm minus 0.2cm}\n")
|
||||||
|
|
||||||
# Other ingredients
|
# Other ingredients
|
||||||
content = (ws._get_cell(ingredients_other_row, cell.column).value)
|
content = ws.cell(ingredients_other_row, cell.column).value
|
||||||
|
|
||||||
if(content != "None\n" and content != None and content != "None"):
|
|
||||||
content = escape_latex(content)
|
|
||||||
f_latex.write("\\textit{Außerdem:} %s \n" % content)
|
|
||||||
|
|
||||||
|
if content != "None\n" and content is not None and content != "None":
|
||||||
|
content = escape_latex(content)
|
||||||
|
f_latex.write("\\textit{Außerdem:} %s \n" % content)
|
||||||
|
|
||||||
# Instructions
|
# Instructions
|
||||||
content = (ws._get_cell(instructions_row, cell.column).value)
|
content = ws.cell(instructions_row, cell.column).value
|
||||||
if(content != "None\n" and content != None):
|
if content != "None\n" and content is not None:
|
||||||
content=escape_latex(content)
|
content = escape_latex(content)
|
||||||
|
content = re.sub(r'/([a-z])', r'/\\allowbreak{}\1', content, flags=re.I)
|
||||||
f_latex.write(str("\\subsection*{Anleitung} %s\n" % content))
|
content = re.sub(r'(\d) ([a-z])', r'\1~\2', content, flags=re.I)
|
||||||
|
|
||||||
f_latex.write(str("\\end{minipage}\n\n"))
|
|
||||||
f_latex.write(str("\\vspace{2cm}\n"))
|
|
||||||
|
|
||||||
|
|
||||||
|
f_latex.write("\\subsection*{Anleitung} %s\n" % content)
|
||||||
|
|
||||||
|
f_latex.write("\\vspace{2cm minus 1cm}\n")
|
||||||
|
|
||||||
# That's all, so close files
|
# That's all, so close files
|
||||||
f_latex.close()
|
f_latex.close()
|
||||||
|
23
main.tex
23
main.tex
@ -1,7 +1,12 @@
|
|||||||
\documentclass[a4paper, 12pt, twoside, toc=flat, toc=sectionentrywithdots, BCOR=1cm]{scrartcl}
|
\documentclass[a4paper, 12pt, twoside, toc=flat, toc=sectionentrywithdots, BCOR=1cm]{scrartcl}
|
||||||
|
\usepackage[T1]{fontenc}
|
||||||
\usepackage[utf8]{inputenc}
|
\usepackage[utf8]{inputenc}
|
||||||
\usepackage[german]{babel} % Silbentrennung
|
\usepackage[ngerman]{babel} % Silbentrennung
|
||||||
|
|
||||||
|
% Use A5 (for mobile)
|
||||||
|
% \usepackage[a5paper,margin=1em,bottom=5em]{geometry}
|
||||||
|
|
||||||
|
\usepackage{hyperref}
|
||||||
\usepackage{mdframed}
|
\usepackage{mdframed}
|
||||||
\usepackage{anyfontsize}
|
\usepackage{anyfontsize}
|
||||||
\usepackage{adjustbox}
|
\usepackage{adjustbox}
|
||||||
@ -13,13 +18,14 @@
|
|||||||
\usepackage{fontawesome}
|
\usepackage{fontawesome}
|
||||||
\usepackage{cookingsymbols}
|
\usepackage{cookingsymbols}
|
||||||
|
|
||||||
% Schusterjungen und Hurenkinder unterdrücken
|
\DeclareUnicodeCharacter{2114}{\ensuremath{\mathchar'26\mkern-9mul\mkern-2mu\mathchar'26\mkern-9mub}}
|
||||||
\widowpenalty = 10000
|
|
||||||
\displaywidowpenalty = 10000
|
|
||||||
\clubpenalty = 10000
|
|
||||||
|
|
||||||
\addtokomafont{section}{\normalfont \Huge \bfseries}{\sffamily}
|
% Schusterjungen und Hurenkinder unterdrücken
|
||||||
\addtokomafont{subsection}{\normalfont \Large \bfseries}{\sffamily}
|
\widowpenalty=5000
|
||||||
|
\clubpenalty=5000
|
||||||
|
|
||||||
|
\addtokomafont{section}{\normalfont\Huge\bfseries}{\sffamily}
|
||||||
|
\addtokomafont{subsection}{\normalfont\Large\bfseries}{\sffamily}
|
||||||
|
|
||||||
\let\labelitemi\labelitemii
|
\let\labelitemi\labelitemii
|
||||||
|
|
||||||
@ -34,6 +40,7 @@
|
|||||||
\include{title}
|
\include{title}
|
||||||
|
|
||||||
\setkomafont{sectionentry}{\rmfamily}
|
\setkomafont{sectionentry}{\rmfamily}
|
||||||
|
\DeclareTOCStyleEntry[beforeskip=1em plus 1pt minus 1pt]{default}{section}
|
||||||
\tableofcontents
|
\tableofcontents
|
||||||
|
|
||||||
\include{introduction}
|
\include{introduction}
|
||||||
@ -44,4 +51,4 @@
|
|||||||
\printindex[formen]
|
\printindex[formen]
|
||||||
\printindex[specials]
|
\printindex[specials]
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
|
17
title.tex
17
title.tex
@ -1,3 +1,4 @@
|
|||||||
|
%!TEX ROOT = ./main.tex
|
||||||
|
|
||||||
\titlepage{
|
\titlepage{
|
||||||
|
|
||||||
@ -15,14 +16,16 @@ font={\fontsize{80}{70}\selectfont}
|
|||||||
\pagestyle{empty}
|
\pagestyle{empty}
|
||||||
|
|
||||||
\begin{adjustbox}{minipage=.6\textwidth,center}
|
\begin{adjustbox}{minipage=.6\textwidth,center}
|
||||||
\Large{\em ``Cookies! Me eat!''\par
|
\Large\em ``Cookies! Me eat!''\par
|
||||||
\hfill --- Cookie Monster}
|
\hfill --- Cookie Monster
|
||||||
\end{adjustbox}
|
\end{adjustbox}
|
||||||
|
|
||||||
\vspace{3em}
|
\vfill
|
||||||
|
|
||||||
\begin{flushright}
|
\begin{flushright}
|
||||||
\includegraphics[width=10cm]{figures/coati.pdf}
|
\includegraphics[
|
||||||
|
width=.666\textwidth,height=.4\textheight,keepaspectratio
|
||||||
|
]{figures/coati.pdf}
|
||||||
\end{flushright}
|
\end{flushright}
|
||||||
|
|
||||||
\vspace{-1em}
|
\vspace{-1em}
|
||||||
@ -52,8 +55,8 @@ Sarah Wedrich
|
|||||||
|
|
||||||
\setlength{\parindent}{0pt}
|
\setlength{\parindent}{0pt}
|
||||||
~\\
|
~\\
|
||||||
\vspace{5cm}
|
\vspace*{0cm plus .3fill}
|
||||||
\bigbreak
|
|
||||||
\huge{Plätzchen}\par
|
\huge{Plätzchen}\par
|
||||||
\smallbreak
|
\smallbreak
|
||||||
\textit{\LARGE{Ein Kompendium}}\par
|
\textit{\LARGE{Ein Kompendium}}\par
|
||||||
@ -61,7 +64,7 @@ Sarah Wedrich
|
|||||||
|
|
||||||
\begin{center}{\large{\textit{
|
\begin{center}{\large{\textit{
|
||||||
Sarah Wedrich\\}}}
|
Sarah Wedrich\\}}}
|
||||||
\vspace{9cm}
|
\vspace*{0cm plus .7fill}
|
||||||
\Large{\today}
|
\Large{\today}
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user