R/preamble.R

Defines functions layout.prae

# Praeambel
layout.prae <- function(var.all , fbshort , double.vars, deckblatt, makeCounter, maxLength.Chap, maxLength.Sec,maxLength.Subsec, maxLength.Subsubsec) {
  skript <- c('\\documentclass[paper=a4, hidelinks, twoside=false, numbers=noenddot]{scrbook}',
              '\n',
              '%%%% Pakete laden %%%%',
              '\\usepackage[stable, hang]{footmisc} % Fussnoten gestalten',
              '\\usepackage{scrlayer-scrpage} % u.a. Kopf- und Fusszeile und Seitenstile',
              '\\usepackage[T1]{fontenc} % Festlegung der Sprache',
              '\\usepackage[utf8]{inputenc} % Festlegung der Sprache',
              '\\usepackage[german]{babel} % Festlegung der Sprache',
              '\\usepackage{fixmath} % Befehl \\mathbold fuer boldfont in mathmode',
              '\\usepackage{txfonts} %Schriftart Times New Roman',
              '\\usepackage{mathptmx} % Schriftart und Mathe-Symbole in Times New Roman',
              '\\usepackage[onehalfspacing]{setspace} % Zeilenabstand',
              #"\\usepackage{titlesec} % Aussehen von Kapiteln, Abschnitten etc. getalten",
              '\\usepackage[table]{xcolor} % Zur Farbdefinition',
              '\\usepackage{booktabs} % verschiedene Befehle zur Tabellengetaltung, u.a. \\toprule, \\midrule und \\bottomrule',
              '\\usepackage{tabularx} % Tabellenumgebung tabularx',
              '\\usepackage{multirow} % Zur Verwendung von \\multirow und \\multicolumn in Tabellen',
              '\\usepackage{graphicx} % Zur Einbidnung von Graphiken',
              '\\usepackage[export]{adjustbox} % Paket, mit dem Graphiken positioniert werden koennen (hier fuer IQB-Logo)',
              '\\usepackage[justification=RaggedRight, singlelinecheck=false, labelfont=bf, format=hang, font=doublespacing]{caption} % Paket, um die Tabellen- und Abbildungsbeschrfitungen zu formatieren',
              '\\captionsetup[figure]{position=below} % setzt fuer figure-Umgebungen die Beschriftung unterhalb der Abbildung',
              '\\usepackage{pgf} % Eigentlich ein Paket, das in Verbidung mit tikz Graphiken erzeugen kann. Hier lediglich fuer den Befehl \\pgfmathsetmacro zur Berechnung im Befehl \\getlength verwendet',
              '\\usepackage{tocloft} % Zur Formatierung von Eintraegen im Inhalts-, Tabellen und Abbildungsverzeichnis',
              '\\usepackage{array} % Noetig fuer Tabellenpakete',
              #"\\usepackage{longtable,tabu} % insb. longtabu-Tabellen, Tabellen mit Seitenumbruch",
              '\\usepackage[a-1b]{pdfx} % Anforderung vom edoc-Server: PDF/A-1b-Konformitaet',
              '\\usepackage{hyperref} % Zur Setzung von Referenzeren innerhalb des Dokuments',
              '\\hypersetup{bookmarksnumbered=true} % Anforderung vom edoc-Server: Nummerierte Bookmarks',
              '\\hypersetup{pdfa} % Anforderung vom edoc-Server: PDF/A-1b-Konformitaet',
              '\\usepackage[left=2.5cm,right=2.5cm,top=2.5cm,bottom=2.5cm,includeheadfoot]{geometry}\n',
              '\\usepackage{float} % force tables at specific position',
              '\\usepackage{xltabular} % page breaks within tables',
              '\\usepackage{pdfpages} % insert complete pdf pages (optional cover)',
              '\n',
              '%%%% Seitenlayout %%%%',
              '%% Seiteneinstellungen',
              '\\headsep40pt',
              '\\parindent 0pt',
              '\\setlength{\\parskip}{1ex}',
              '\\clubpenalty100000',
              '\\widowpenalty100000\n',
              '\\renewcommand*{\\footnotemargin}{1em}',
              '\\definecolor{iqbrot}{HTML}{821123} % Aus xcolor',
              '\n',
              '%% Header-Foot',
              '\\renewcommand{\\chaptermark}[1]{\\markleft{\\textsc{\\thechapter \\ #1}}{}}',
              '\\renewcommand{\\sectionmark}[1]{ \\markright{\\textsc{\\thesection\\ #1}}{}}',
              '%\\clearscrheadfoot',
              '\\PreventPackageFromLoading{fancyhdr}',
              '\\DeclarePageStyleAlias{fancy}{scrheadings}\n',
              ' %% Ueberschriften und Eintraege im Inhaltsverzeichnis',
              '\\AtBeginDocument{ \\renewcaptionname{german}\\contentsname{\\bfseries Inhaltsverzeichnis} }',
              '\n',
              '\\makeatletter',
              '\\@addtoreset{section}{chapter}',
              '\\makeatother\n',
              '\\renewcommand{\\thefigure}{\\arabic{figure}}',

              '\\setkomafont{chapter}{\\bfseries\\Large\\rmfamily}',
              '\\setkomafont{section}{\\Large\\bfseries\\rmfamily}',
              '\\setkomafont{subsection}{\\bfseries\\rmfamily}',
              '\\setkomafont{subsubsection}{\\bfseries\\rmfamily}',

              # '\\titleformat{\\chapter}[display]{\\bfseries\\Large}{}{0ex}{} % Aus titlesec',
              # '\\titleformat*{\\section}{\\Large\\bfseries} % Aus titlesec',
              # '\\titleformat*{\\subsection}{\\bfseries} % Aus titlesec',
              # '\\titleformat*{\\subsubsection}{\\bfseries}% Aus titlesec',

              '\\renewcommand{\\cftchapfont}{\\large\\bfseries} % noetig, um den Name der Chapter im Inhaltsverzeichnis in der richtigen Schriftart zu haben',
              '\\renewcommand{\\cftchappagefont}{\\large\\bfseries} % noetig, um die Seitenzahlen der Chapter im Inhaltsverzeichnis in der richtigen Schriftart zu haben',
              '\\renewcommand{\\cftsecfont}{\\large\\bfseries} % noetig, um den Name der Section im Inhaltsverzeichnis in der richtigen Schriftart zu haben',
              '\\renewcommand{\\cftsecpagefont}{\\large\\bfseries} % noetig, um die Seitenzahlen der Section im Inhaltsverzeichnis in der richtigen Schriftart zu haben',
              '\\makeatletter',
              '\\setlength{\\cftbeforetoctitleskip}{3.5ex \\@plus 1ex \\@minus .2ex}',
              '\\setlength{\\cftaftertoctitleskip}{2.3ex \\@plus.2ex}',
              '\\makeatother',
              '\\renewcommand{\\cftchapafterpnum}{\\vskip10pt}',
              '\\renewcommand{\\cfttoctitlefont}{\\Huge\\bfseries} % noetig, um den Name des Inhaltsverzeichnisses in der richtigen Schriftart zu haben',
              '\\setlength{\\cftsecindent}{0pt}',
              paste0('\\settowidth{\\cftsecnumwidth}{',maxLength.Sec,'} % Veraendert die Breite im Inhaltsverzeichnis, die fuer die Gliederungszahlen der Kapiteln vorgesehen ist. Bspw. in \'1 Testdesign\' wird hier die Breite, die fuer die \'1\' (und alle anderen Eingtraege auf dieser Ebene) vorgesehen ist, auf die Breite festgelegt, die fuer den Text 000 benoetigt wird. Bei zu kleinen Werten, wuerde der Text \'Testdesign\' ueber der Zahl geschrieben stehen.'),
              paste0('\\settowidth{\\cftsubsecnumwidth}{',maxLength.Subsec,'} % Veraendert die Breite im Inhaltsverzeichnis, die fuer die Gliederungszahlen der Unterkapitel vorgesehen ist. S. oben fuer Beispielerlkaerung.'),
              paste0('\\settowidth{\\cftsubsubsecnumwidth}{',maxLength.Subsubsec,'} % Veraendert die Breite im Inhaltsverzeichnis, die fuer die Gliederungszahlen der Unterunterkapitel. vorgesehen ist. S. oben fuer Beispielerklaerung'),
              paste0('\\settowidth{\\cftchapnumwidth}{',maxLength.Chap,'} % Veraendert die Breite im Inhaltsverzeichnis, die fuer die Gliederungszahlen der Insturment-ueberschriften (Roemische Zahlen) vorgesehen ist. S. oben fuer Beispielerklaerung'),
              '\\renewcommand{\\thechapter}{\\Roman{chapter}}',
              '\\renewcommand{\\thesection}{\\arabic{section}}',
              '\\renewcommand{\\thesubsection}{\\thesection.\\arabic{subsection}}',
              '\\cftsetindents{chapter}{0pt}{\\the\\cftchapnumwidth}',
              '\\cftsetindents{section}{0pt}{\\the\\cftsecnumwidth}',
              '\\cftsetindents{subsection}{30pt}{\\the\\cftsubsecnumwidth}',
              '\\cftsetindents{subsubsection}{70pt}{\\the\\cftsubsubsecnumwidth}',
              '\n',
              '%%%% Silbentrennung',
              '\\renewcommand{\\slash}{/\\penalty\\exhyphenpenalty\\hspace{0pt}} % mit diesem Befehl wird garantiert, dass nach dem slash noch ein zeilenumbruch stattfinden kann',
              ## specific hyphenations, someday maybe in separate function for manual extensions?
              '\\hyphenation{Sch\u00FC-ler-ge-samt-ge-wicht}',
              '\\hyphenation{Sch\u00FC-ler-in}',
              '\\hyphenation{Sch\u00FC-ler-innen}',
              '\n',
              '%%%% Tabellenbezogene Befehle %%%%\n',
              '\\newcommand{\\fk}[1]{\\textbf{\\textit{#1}}\\arraybackslash} % Fett-und-kursiv-Befehl, der innerhalb Tabellen benutzt wird',
              '\\newlength{\\sizefst} % Laenge fuer Tabelle',
              '\\newlength{\\sizesnd} % Laenge fuer Tabelle',
              '\\newlength{\\sizevn} % Laenge fuer Tabelle - Wird zu Beginn des Dokuments auf die Laenge von Variablenname gesetzt, ist nur fuer tabnormallong',
              '\\newlength{\\sizekat} % Laenge fuer Tabelle - Wird zu Beginn des Dokuments auf die Laenge von Kategorie gesetzt, ist nur fuer tabcoloredlong',
              '\\newlength{\\adj} % Laenge fuer Befehl \\getlengths',
              '\\newlength{\\result} % Ausgabelaenge fuer Befehl \\getlengths',
              '\\newcommand*{\\getlengths}[1]{% Befehl, um Breite zu bestimmen, die in einer Tabelle den rechten Einzug bestimmt, sodass alle Eintraege rechtsbuendig-zentriert erscheinen',
              '\\pgfmathsetmacro#1{(\\the\\hsize-\\the\\adj)/2}%',
              '}\n',
              '\\newcommand*{\\rulefiller}{%',
              '\\arrayrulecolor{white}% change to cell colour',
              '\\specialrule{\\lightrulewidth}{0pt}{-\\lightrulewidth}% invisible rule',
              '\\arrayrulecolor{black}% revert to regular line colour',
              '}\n',
              '\\makeatletter',
              '\\newlength\\oriarrayrulewidth',
              '\\newcount\\orilowpenalty',
              '\\newcommand\\nobreakbottomrule{%',
              '\\noalign{\\global\\oriarrayrulewidth\\arrayrulewidth\\relax',
              '\\global\\orilowpenalty\\@lowpenalty\\relax',
              '\\global\\@lowpenalty=\\numexpr-10000\\relax%',
              '\\global\\arrayrulewidth\\heavyrulewidth\\relax}',
              '\\hline',
              '\\noalign{\\global\\@lowpenalty=\\orilowpenalty\\relax%',
              '\\global\\arrayrulewidth\\oriarrayrulewidth\\relax}}',
              '\\makeatother',
              '%%% Spaltentypen %%%% \n',
              '\\newcolumntype{Q}{>{\\raggedright \\arraybackslash} X }',
              '\\newcolumntype{q}[1]{>{\\raggedright \\arraybackslash}p{#1}}',
              '\\newcolumntype{Y}{@{}>{\\raggedleft\\arraybackslash}X}',
              '\\newcolumntype{y}{>{\\getlengths{\\result}\\raggedleft\\arraybackslash} X <{\\hspace*{\\result pt}}}',
              '\\newcolumntype{v}[1]{>{\\getlengths{\\result}\\raggedleft\\arraybackslash} p{#1} <{\\hspace*{\\result pt}}}',
              '\\newcolumntype{Z}{>{\\centering\\arraybackslash}X}',
              '\\newcolumntype{z}[1]{>{\\centering\\arraybackslash}p{#1}}',
              '\\newcolumntype{t}{@{\\quad}p{15cm}@{\\quad}}',
              '\\newcommand{\\zf}[1]{\\multicolumn{1}{Z}{ $\\mathbf{#1}$}}',
              '\\definecolor{lg}{gray}{0.9} % Aus xcolor',
              '\\definecolor{dg}{gray}{0.8} % Aus xcolor',
              '\\newcommand{\\anmerkung}[2]{ \\hiderowcolors \\multicolumn{#1}{t}{ \\footnotesize \\textit{Anmerkung.} #2} }',
              '\\newcommand{\\anmerkungen}[2]{ \\hiderowcolors \\multicolumn{#1}{t}{ \\footnotesize \\textit{Anmerkungen.} #2} }',
              '\\newcommand{\\headrow}{\\rowcolor{dg}}',
              '\\newcommand{\\z}[1]{\\multicolumn{1}{Z}{#1}}',
              '\\newcommand{\\multic}[1]{\\multicolumn{1}{c}{#1}}',
              '\\newcommand{\\multil}[1]{\\multicolumn{1}{l}{#1}}',
              '\\newcommand*{\\restartrowcolors}[1]{%',
              '\\ifhmode\\unskip\\fi',
              '\\global\\rownum=#1 %',
              '}',
              '\n',
              '%%%% Tabellenumgebungen %%%%\n',
              '\\newenvironment{tabcolored}[2]{%',
              # '\\taburowcolors[3]{white .. lg}',
              '\\captionof*{table}{\\textbf{#2}}',
              '\\tabularx{\\textwidth}{@{\\hspace*{\\tabcolsep}}#1}',
              '\\toprule \\headrow',
              '}{%',
              '\\endtabularx}',
              '\n',
              '\\newenvironment{tabcoloredNoCaption}[1]{%',
              # '\\taburowcolors[2]{white .. lg}',
              '\\tabularx{\\textwidth}{@{\\hspace*{\\tabcolsep}}#1}',
              '\\toprule \\headrow',
              '}{%',
              '\\endtabularx}',
              '\n',
              '\\newenvironment{tabcoloredlong}{%',
              # '\\taburowcolors[3]{white .. lg}',
              '\\captionof*{table}{\\textbf{H{\\"a}ufigkeitsverteilung}}',
              '\\xltabular{\\textwidth}{@{\\hspace*{\\tabcolsep}}q{\\sizekat}q{7.9cm}yy}',
              '\\toprule \\headrow',
              '\\textbf{Kategorie} & \\textbf{Label} & \\multicolumn{2}{c}{\\textbf{Relative H{\\"a}ufigkeiten}} \\\\ \\rulefiller \\cmidrule[\\lightrulewidth](lr){3-4}',
              '\\headrow',
              '& & \\multicolumn{1}{c}{\\small G{\\"u}ltige Werte} & \\multicolumn{1}{c}{\\small Alle Werte}\\\\',
              '\\midrule',
              '\\endhead',
              '\\hline \\multicolumn{4}{@{}c@{}}{\\cellcolor{white} \\textit{Fortsetzung auf der n{\\"a}chsten Seite}}\\\\',
              '\\hline',
              '\\endfoot',
              '\\endlastfoot',
              '}{%',
              '\\endxltabular}\n',
              '\\newenvironment{tabcoloreditem}[3]{%',
              # '\\taburowcolors[5]{white .. lg}',
              '\\captionof*{table}{\\textbf{H{\\"a}ufigkeitsverteilung}}',
              '\\xltabular{\\textwidth}{@{\\hspace*{\\tabcolsep}}#1}',
              '\\toprule',
              '\\headrow',
              '\\textbf{Variablenname} & \\multicolumn{#2}{c}{\\textbf{G{\\"u}ltige Werte}} & \\multicolumn{#3}{c}{\\textbf{Fehlende Werte}} \\\\',
              '}{%',
              '\\xltabular}\n',
              # '\\newenvironment{tabnormal}[2]{%',
              # '\\taburowcolors[1]{white .. white}',
              # '\\settowidth{\\sizefst}{\\textbf{Variablenname}}',
              # '\\addtolength{\\sizefst}{0.5cm}',
              # '\\longtabu{@{\\hspace*{\\tabcolsep}}#1}',
              # '\\caption*{\\cellcolor{white} \\textbf{#2}}\\\\',
              # '}{\\endlongtabu}',
              '\n',
              '\\newenvironment{tabnormallong}[1]{%',
              # '\\taburowcolors[1]{white .. white}',
              '\\captionof*{table}{ \\textbf{#1}}',
              '\\xltabular{\\textwidth}{@{\\hspace*{\\tabcolsep}}lQ}',
              '\\endhead',
              '\\hline \\multicolumn{2}{@{}c@{}}{\\cellcolor{white} \\textit{Fortsetzung auf der n{\\"a}chsten Seite}} \\\\',
              '\\hline',
              '\\endfoot',
              '\\endlastfoot',
              '}{%',
              '\\endtabularx}',
              '\n',
              '%%%% Register %%%%',
              '\\makeatletter',
              '\\newcommand \\Dotfill {\\leavevmode \\cleaders \\hb@xt@ 5pt{\\hss .\\hss }\\hfill \\kern \\z@}	% Neuer Befehl fuer Auffuellung der Zeile mit Punkten (diese haben Abstand von 0.4em zueinander)',
              '\\makeatother',
              '\n',
              '\\newlength{\\ml}',
              '\\makeatletter',
              '\\newcommand{\\regitem}[2]{%',
              '\\settowidth{\\ml}{#2}',
              '\\begingroup',
              '#1 \\nobreak \\Dotfill\\makebox[\\ml][r]{\\textnormal{#2}}  \\par',
              '\\endgroup }',
              '\\makeatother \n',
              '\\newenvironment{register}{%',
              '\\parskip6pt \\parindent0pt',
              '}{\\par\\ignorespaces}',
              '\n',
              '%%%% Literaturverzeichnis %%%%',
              '\n',
              '\\newenvironment{literatur}{%',
              '\\parskip6pt \\parindent0pt }{\\par\\ignorespaces}',
              '\\newcommand{\\lititem}[1]{\\hangindent=0.7cm \\hangafter1 #1 \\par}',
              '\n',
              '\\setcounter{tocdepth}{3}',
              '\\setcounter{secnumdepth}{3}',
              '\n',
              '\\newcounter{lit}',
              paste0('\\newcounter{sec',toupper(fbshort),'}') # Zaehlvariable fuer den Beginn der FB-spezifischen Abschnitte
  )

  # Alle Zaehlervariablen Definieren
  counter.ges <- c( unlist(
    sapply( 1:length(fbshort) ,
            function(d) {
              counter.prae <- sapply( var.all[[d]], function(name) if(makeCounter[d]) c( paste0('\\newcounter{', numtolet(name , tolower(fbshort[d]) , double.vars=double.vars), '}') , paste0('\\newcounter{temp', numtolet(name , tolower(fbshort[d]), double.vars=double.vars), '}') ) else NULL , USE.NAMES=FALSE)

              return(counter.prae)
            }
    ) ) )

  skript <- c(skript, counter.ges ,
              '\\begin{document}',
              '\\thispagestyle{empty}',
              '\\pagenumbering{gobble} % frisst die Seitenzahlen',
              '\\frontmatter % definiert die Deckblattseiten (frontmatter) =/= Hauptteil (mainmatter)',
              '\\setlength{\\aboverulesep}{0pt}',
              '\\setlength{\\belowrulesep}{0pt}',
              '\\setlength{\\extrarowheight}{0ex}',
              # '\\tabulinesep=1.3mm % Abstand zwischen Zeileninhalt und Zeilenbegrenzung',
              '\\settowidth{\\adj}{00.0}',
              '\\settowidth{\\sizesnd}{$\\mathbold{N_{valid}}$}',
              '\\addtolength{\\sizesnd}{0.4cm}',
              '\\settowidth{\\sizevn}{\\textbf{Fehlende Werte}}',
              '%\\addtolength{\\sizevn}{0.5cm}',
              '\\settowidth{\\sizekat}{\\textbf{Kategorie}}',
              deckblatt,
              '\\cleardoublepage',
              '\\clearscrheadfoot',
              '\\ihead[\\textsc{Inhaltsverzeichnis}]{\\textsc{Inhaltsverzeichnis}}',
              '\\cfoot[\\pagemark]{\\pagemark}',
              '\\pagenumbering{roman}',
              '\\setcounter{page}{1}',
              '\\pdfbookmark{\\contentsname}{toc}\\tableofcontents',
              '\\pagebreak',
              '\\clearscrheadfoot',
              '\\pagestyle{headings}',
              '\\ihead[\\leftmark]{\\leftmark \\newline \\rightmark}',
              '\\cfoot[\\pagemark]{\\pagemark}',
              '\\mainmatter % defintion des Hauptteils (mainmatter)',
              '\\pagenumbering{arabic}')

  return(skript)
}
beckerbenj/eatCodebook documentation built on Feb. 24, 2025, 9:36 a.m.