Version 1: Dokumentenstruktur in README und preamble-section dokumentiert

This commit is contained in:
Bela 2018-07-23 15:38:25 +02:00
commit 32ed049dc6
13 changed files with 439 additions and 0 deletions

23
.gitignore vendored Normal file
View file

@ -0,0 +1,23 @@
*.css
*.export
*.log
*.specification
*.template
*.xhtml
*.tuc
*.kate-swp
*.aux
*.toc
*.out
*.bbl
*.blg
*.synctex.gz
*.dvi
*.bcf
*.fdb_latexmk
*.fls
*.pdf
*.run.xml
*(busy
# tags is created by vim plugin gutentags with universal-ctags
tags

9
README Normal file
View file

@ -0,0 +1,9 @@
Die Hauptdatei (das ganze Skript) ist üblicherweise in .maindir/tex/main.tex, kann aber auch jede andere tex Datei sein. Es beinhaltet mit einem modifizierten \input-Befehl (\textinput) die verschiedenen Kapitel (chapter) oder Abschnitte (section), in weitere Dateien ausgelagert. Alle Dateien mit LaTeX-Code liegen in /tex. Wie du sie anordnest, ist dir überlassen. Die tikz-Zeichnungen liegen im Ordner .maindir/tikz.
Man kann jede Datei im Ordner /tex einzeln kompilieren. Dafür sind einige Hürden zu nehmen gewesen:
• Pfade von Dateien, die mit \input eingebunden werden, müssen funktionieren, egal, wo die Datei liegt. Das ist dadurch gelöst, dass alle \input-Anweisungen durch \maininput, \textinput, \tikzinput ersetzt wurden. Diese setzen ".maindir/" vor den Pfad. Das ist ein symlink, der in allen Ordnern liegt und jeweils zum Hauptordner referenziert. Diese Links können automatisch erzeugt werden mit dem python-skript .maindir/scripts/maindircreate.py (muss im Hauptordner ausgeführt werden).
• Die Präambel darf nur einmal eingebunden werden. Um dies zu erreichen, fügt keine Datei die Präambel direkt ein (mit input), sondern alle Dateien binden mit \input{.maindir/tex/header/preamble-section} einen Wrapper ein, der die Präambel nur lädt, wenn der Wrapper bisher noch nicht aufgerufen wurde. Dort werden auch die Ersatzbefehle für \begin und \end{document} definiert: docStart und docEnd. Damit docEnd im richtigen Fall das Dokument beendet läuft der counter filedepthScript mit, der anzeigt, in welcher Einfügetiefe wir uns befinden.
• Der Counter filedepthScript wird erstellt in der Präambel (die nur einmal aufgerufen wird), erhöht und verringert beim Aufruf von \maininput (und damit auch bei \textinput und \tikzinput). Im gerade kompilierten "Hauptdokument" ist der Counter auf 0, in allen weiteren auf >0.
• \docStart und \docEnd hätten eigentlich ein environment sein sollen. Dabei gab es aber den Fehler, dass dieses Environment angeblich nicht beendet wurde bevor das Dokument mit \end{document} beendet wurde. Interessanterweise konnte ich den Fehler aber nicht zuverlässig reproduzieren, sondern nur bei Dateien, die keine weiteren eingefügt haben oder irgendeine andere irrelevante Eigenschaft haben.
• Die Datei tex/_TEMPLATE.tex beinhaltet die Dinge, die in jede (Unter-)datei, die auch alleine kompilieren soll, rein muss. Beim erstellen eines neuen Kapitels kopiert man also _TEMPLATE.tex.

1
scripts/.maindir Symbolic link
View file

@ -0,0 +1 @@
..

36
scripts/maindircreate.py Executable file
View file

@ -0,0 +1,36 @@
#!/usr/bin/python3
"""
Erzeuge symlinks zum aktuellen Ordner in allen Unterordnern.
Dabei sind es relative Links, das heißt, dass alle Links mehrere ../../ etc.
sind. Die Links heißen alle .maindir, sodass man Pfade von jedem Ort
immer gleich mit .maindir/Unterordner/Datei bezeichnen kann.
Fehler, wie bspw. fehlende Unterstützung von symlinks durch das Betriebssystem
oder das Dateisystem werden nicht abgefangen.
"""
import os
import os.path
import errno
# os.walk geht alle Ordner durch und folgt standardmäßig keinen symlinks
# (sehr gut!)
# os.walk verändert nicht den aktuellen Ordner
for (path, directories, files) in os.walk(os.curdir):
try:
# relpath gibt den Pfad vom aktuellen Ordner relativ zum Ordner
# in den wir den Link tun möchten
os.symlink(os.path.relpath(os.curdir, path),
# .maindir heißt der Link
os.path.join(path, ".maindir"))
except OSError as e:
if e.errno == errno.EEXIST:
# der Link oder eine Datei mit dem Namen existiert bereits
# zum Beispiel, weil dieses Skript schon einmal aufgerufen
# wurde
# dann entferne den alten Link
os.remove(os.path.join(path, ".maindir"))
os.symlink(os.path.relpath(os.curdir, path),
os.path.join(path, ".maindir"))

1
tex/.maindir Symbolic link
View file

@ -0,0 +1 @@
..

20
tex/_TEMPLATE.tex Normal file
View file

@ -0,0 +1,20 @@
%! TEX program = lualatex
\input{.maindir/tex/header/preamble-section}
% inputs the preamble only if necessary
\newenvironment{dummy}{Tue nix}{Tue auch am Ende nix}
\newenvironment{wrapper}{Tue ganz am Anfang etwas \begin{dummy} Tue auch etwas}{Tue etwas vor dem Ende \end{dummy} Tue noch etwas}
\docStart
\begin{wrapper}
Hier ein Satz
\end{wrapper}
% do not use \input nor \begin{document nor \end{document}
% write the text here
% for including a tikz picture, place it in the directory tikz and
% use \tikzinput{tikzpicture}
% for including another tex (text) file, place it in the directory
% tex and use \textinput{textfile}
% for including some other file use \maininput{file/path/relative/to/main/repodir}
\docEnd

1
tex/header/.maindir Symbolic link
View file

@ -0,0 +1 @@
../..

View file

@ -0,0 +1,45 @@
%! TEX program = lualatex
%==============================================================================
% LaTeX-Magic
%
% This file is to be included in all content files.
%==============================================================================
% filedepthSkript is a counter that tells me how deep I am into the filestructure
% in the compiled document, it's 0 and with every \maininput it is increased by one
% and decreased by one after the input
% if I find \docEnd while filedepthSkript is 0, I know that the document is finished, I need \end{document}
\ifdefined\docStart % then it's not the first time this is inputed
% preamble, docstart and docend and filedepthSkript do not need to be defined
\else
\input{.maindir/tex/header/preamble}
% -----------------------------
% \input should not be used!!!!
% -----------------------------
\newcounter{filedepthSkript} % explanation see preamble-section.tex
% \maininput is an input relative to the main directory of the git repo
\newcommand{\maininput}[1]{
\stepcounter{filedepthSkript}
\input{.maindir/#1}
\addtocounter{filedepthSkript}{-1}
}
% \tikziput is an input relative to the directory for tikz code
\newcommand{\tikzinput}[1]{\maininput{zeichnungen/#1}}
% \textinput is an input relative to the directory for usual tex-Code
% (the code of the actual script text)
\newcommand{\textinput}[1]{\maininput{tex/#1}}
\newcommand{\docStart}{%
\ifnum\value{filedepthSkript}=0 % just increased by one in \maininput
\begin{document}
\fi
}
\newcommand{\docEnd}{%
% Unser Counter hat den Wert \thefiledepthSkript. % Debug-Meldung
\ifnum\value{filedepthSkript}=0
\end{document}
\fi
}
\fi

24
tex/header/preamble.tex Normal file
View file

@ -0,0 +1,24 @@
%! TEX program = lualatex
\documentclass{scrartcl}
% \usepackage[margin=1cm, right=3cm]{geometry}
% \RedeclareSectionCommand % das kommt vom KOMA-Skript
% [beforeskip=-1.5ex plus -.1ex minus -.1ex,
% afterskip=.5ex plus .1ex minus .1ex]{section}
% \RedeclareSectionCommand
% [beforeskip=-1.5ex plus -.1ex minus -.1ex,
% afterskip=.5ex plus .1ex minus .1ex]{subsection}
\usepackage[tikz]{.maindir/tex/header/stdmath} % , scriptLetters
\setmainfont{Latin Modern Roman}
\setsansfont{Latin Modern Sans}
\setmonofont{Latin Modern Mono}
\setmathfont{Latin Modern Math}
\addbibresource{.maindir/tex/bibliography.bib}
% Abkürzunngen
% weitere Befehle
% Typografisches

View file

@ -0,0 +1,45 @@
% -----------------------------------------------
% this package offers support for a lot of unicode symbols
% especially the ones on the neo2 keyboard layout
% it only overwrites where unicode-math and the DejaVu fonts via fontspec are not showing anything or where it makes sense to use something else
% if the fonts are changed, do that after loading this package. Than it isn't guaranteed, that every symbols looks as expected though.
% -----------------------------------------------
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{specialChars}[2017/10/17 specialChars package]
% \RequirePackage{amssymb} % for \checkmark
\RequirePackage{amsmath} % for implication symbols
\RequirePackage{fontspec}
% Standard fonts that work, can be overwritten
\setmainfont{DejaVu Serif}
\setsansfont{DejaVu Sans}
\setmonofont{DejaVu Sans Mono}
% not working: (angeblich die typische LaTeX-Schrift)
% \setmainfont{Computer Modern Roman}
% \setsansfont{Computer Modern Sans Serif}
% \setmonofont{Computer Modern Typewriter}
\RequirePackage{unicode-math}
\RequirePackage{silence} % Package that lets ignore warnings and errors for unicodechar redefining
\WarningFilter{newunicodechar}{Redefining}
\RequirePackage{newunicodechar} % makes this remapping possible
\newcommand{\mathsymbol@neo}[2]{\newunicodechar{#1}{\ifmmode#2\else#1\fi}}
\newunicodechar{•}{\item}
\newunicodechar{}{\ensuremath{\colon}} % for the fonts above it doesn't exist
\mathsymbol@neo{⟨}{\left\langle}
\mathsymbol@neo{⟩}{\right\rangle}
\mathsymbol@neo{∥}{\parallel}
\mathsymbol@neo{⟶}{\to} % ! Differs from usual UTF8 !
\mathsymbol@neo{√}{\sqrt}
\newunicodechar{Σ}{\ensuremath{\sum}} % not capital sigma which is smaller!
\newunicodechar{Π}{\ensuremath{\prod}} % not capital pi which is smaller!
\newunicodechar{⇒}{\ensuremath{\implies}} % die normale Version ist nur hässlich, daher immer in Math mode ändern
\newunicodechar{⇐}{\ensuremath{\impliedby}}
\newunicodechar{⇔}{\ensuremath{\iff}}
\endinput

223
tex/header/stdmath.sty Normal file
View file

@ -0,0 +1,223 @@
% vim: set spelllang=de,en:
% ----------------------------------------------
% this package should provide a standard set of packages
% and commands that are usually useful when writing
% mathematical texts
% options
% -------
% \renewcommand{\bibfile}{<your bibliography file>}
% standard is bibliography.bib
% tikz
% also loads tikz
% graphicx OR pictures
% also loads package graphicx (for picture handling)
% pdflatex
% defines everything necessary to use neo2 possibilities with pdflatex
% german
% makes the names of environments german
% otherwise they are in english
% scriptLetters
% loads the package mathrsfs that enables you to write curly letters as Sigma-Algebras
% this is done via the command \scr
% ----------------------------------------------
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{stdmath}[2017/10/17 stdmath package]
% optional:
\newif\ifopt@german
\opt@germanfalse % Standard
\DeclareOption{german}{\opt@germantrue}
\newif\ifopt@pics
\opt@picsfalse
\DeclareOption{graphicx}{\opt@picstrue}
\DeclareOption{pictures}{\opt@picstrue}
\newif\ifopt@tikz
\opt@tikzfalse
\DeclareOption{tikz}{\opt@tikztrue}
\newif\ifopt@script
\opt@scriptfalse
\DeclareOption{scriptLetters}{\opt@scripttrue}
\ProcessOptions\relax
\ifopt@pics\RequirePackage{graphicx}\fi
\ifopt@tikz\RequirePackage{tikz}\RequirePackage{tikz-cd}\fi
\ifopt@script\RequirePackage{mathrsfs}\newcommand{\scr}[1]{\mathscr{#1}}\fi % for script A (sigma-Algebra-A)
% ---------
% Packages
% ---------
% ---------------------------------------------------
% this is a UTF8-symbol to LaTeX-formula-converting
% ---------------------------------------------------
\RequirePackage{.maindir/tex/header/specialChars}
% maybe that works one day:
% \RequirePackage{polyglossia}
% \ifopt@german{\setdefaultlanguage{german}}\else{\setdefaultlanguage{english}}\fi
\RequirePackage[\ifopt@german ngerman \else english \fi]{babel}
\RequirePackage{amsmath, amsfonts}
\RequirePackage{mathtools} % for := (defined as)
\RequirePackage{amsthm} % for theorems environments
\RequirePackage{enumerate} % for different kind of numbering in enumerations
% bibliography
\newcommand{\bibfile}{bibliography.bib}
\RequirePackage{csquotes}
\RequirePackage[backend=biber,
style=alphabetic,
backref=true,
autocite=inline,
sortlocale=de_DE.UTF-8,
% sortlocale=en_GB,
sorting=nty]{biblatex}
\addbibresource{\bibfile}
\AtEndDocument{\printbibliography}
\RequirePackage
% [
% colorlinks=true,
% linkcolor=black,
% citecolor=black,
% filecolor=black,
% %pagecolor=black,
% urlcolor=black,
% bookmarks=true,
% bookmarksopen=true,
% bookmarksopenlevel=3,
% plainpages=false,
% pdfpagelabels=true]
{hyperref}
%\parindent0.0em % = Einrueckungsweite des ersten Satzes eines Absatzes
% ---------------------------------------------------------------
% Custom commands, rougly grouped
% ---------------------------------------------------------------
% ----------------
% math operators
% ----------------
\DeclareMathOperator{\id}{id} % identity map
\DeclareMathOperator{\Id}{I} % identity operator/ matrix
\DeclareMathOperator{\Lin}{Lin} % Linear span
\DeclareMathOperator{\supp}{supp} % support
\DeclareMathOperator{\GL}{GL} % general linear group
%TODO: bin ir unsicher, ob das nicht kursiv geschriebn werden soll
\DeclareMathOperator{\dom}{D} % domain
\DeclareMathOperator{\grad}{grad} % gradient
\DeclareMathOperator{\Rang}{Rang} % Rang einer Matrix
\DeclareMathOperator{\sign}{sign} % signum (einer Permutation)
% \newcommand{\card}[1]{\abs{#1}} % cardinality
\DeclareMathOperator{\gr}{gr} % graph of a function f:A ⟶ B as a subset of A × B
% -----------
% constants
% -----------
% Zahlmengen
\newcommand{\Z}{\mathbb{Z}} % integers
\newcommand{\N}{\mathbb{N}} % natural numbers
\newcommand{\Q}{\mathbb{Q}} % rationals
\newcommand{\R}{\mathbb{R}} % reals
\newcommand{\C}{\mathbb{C}} % complex numbers
\newcommand{\K}{\mathbb{K}} % a field
\newcommand{\im}{\ensuremath{\mathrm{i}}} % imaginary number sqrt(-1)
\newcommand{\chFct}{χ} % characteristic function of a set
\newcommand{\kro}{\delta} % Kronecker-Symbol
% ---------
% Symbols
% ---------
\newcommand{\definedas}{\coloneqq} % left of this is defined to be the thing on the right
\newcommand{\define}{\eqqcolon} % same other way around
% ---------------------
% analysis & topology
% ---------------------
\newcommand{\abs}[1]{\left\lvert#1\right\rvert} % absolute value
\newcommand{\norm}[1]{\left\lVert#1\right\rVert} % norm
\newcommand{\normiii}[1]{{\left\vert\kern-0.25ex\left\vert\kern-0.25ex\left\vert #1
\right\vert\kern-0.25ex\right\vert\kern-0.25ex\right\vert}}
% from http://tex.stackexchange.com/questions/54385/spacing-between-triple-vertical-lines % norm with 3 lines
\newcommand{\rest}[2]{\left. #1 \right\vert_{#2}} % restriction of a map #1 to the domain #2
\newcommand{\scaProd}[1]{\left\langle #1 \right\rangle} % scalar product
\newcommand{\conj}[1]{#1^{*}} % (complex) conjugation
\newcommand{\D}{\ensuremath{d}} % d in \D x \D z ... at integrals
% \newcommand{\D}{\ensuremath{\mathrm{d}}} %
\newcommand{\cl}[1]{\overline{#1}} % closure
% ------------
% set theory
% ------------
\newcommand{\setDef}[2]{\left\{#1
\,\middle\vert\, #2\right\}} % a typical set definition: #1 is the thing in the set #2 the condition on the variables {#1 | #2}
\newcommand{\Union}{\bigcup} % Summation-like set union
\newcommand{\Disunion}{\bigsqcup} % Summation-like disjoint set union
\newcommand{\Isect}{\bigcap} % Summation-like set intersection
\newcommand{\Dsum}{\bigoplus} % Summation-like direct sum
% ---------
% algebra
% ---------
\newcommand{\Tens}{\bigotimes} % Summation-like tensor product
\newcommand{\normal}{\vartriangleleft} % normal subgroup
% ----------------
% Typografisches
% ----------------
\newcommand{\TODO}[1]{\marginpar{TODO (#1)}} % TODOs
\newcommand{\imp}[1]{\emph{#1}} % important
\newcommand{\newTerm}[1]{\emph{#1}} % newly introduced
% alternative: do nothing or \ul (underline)
% ----------------------------------------------------
% (Theorem) environments
% ----------------------------------------------------
\newtheorem {theorem} {\ifopt@german Satz \else Theorem \fi} [section]
% \newtheorem {theorem} {Satz} [section]
% das "`[theorem] "` bewirkt, dass es eine durchgehende
% Nummerierung dieser environments gibt und nicht jede
% Art seine eigene Nummerierung hat
% Für Lemmas dieses environment:
\newtheorem {lemma} [theorem] {Lemma}
% Für Folgerungen/ Korollare dieses environment
\newtheorem {corollary} [theorem] {\ifopt@german Korollar \else Corollary \fi}
% Definitionen sehen dann anders aus, siehe
% http://tex.stackexchange.com/questions/38260/non-italic-text-in-theorems-definitions-examples
\theoremstyle {definition}
% Für Definitionen dieses environment
\newtheorem {definition} [theorem] {Definition}
% Für Bemerkungen dieses environment
\theoremstyle {remark}
\newtheorem* {note} {\ifopt@german Bemerkung \else Remark \fi}
% Beispiele kriegen eine andere Formatierung %ohne Nummerierung falls mit *:
\newtheorem{example} [theorem] {\ifopt@german Beispiel \else Example \fi}
\endinput

10
tex/main.tex Normal file
View file

@ -0,0 +1,10 @@
%! TEX program = lualatex
\input{.maindir/tex/header/preamble-section}
\docStart
\title{Dokumententitel}
\author{Felix Hilsky}
\maketitle
% use \textinput as described in /header and _TEMPLATE
\appendix
% use \textinput as described in /header and _TEMPLATE
\docEnd

1
zeichnungen/.maindir Symbolic link
View file

@ -0,0 +1 @@
..