diff --git a/.gitignore b/.gitignore
index c5ca0d0108dc8b94b0cb933cd7b182c546d3a11f..6c7ac37cc92d61fb2346419615b51820b4ec2ed3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,5 @@
 *.out
 *.fdb_latexmk
 *.ps
+scripts/vc.tex
+vc.tex
diff --git a/.latexmkrc b/.latexmkrc
new file mode 100644
index 0000000000000000000000000000000000000000..10bc733fe0e85c90ba9361682f07c373b9201c0c
--- /dev/null
+++ b/.latexmkrc
@@ -0,0 +1,6 @@
+$latex = 'make vc.tex; latex %O %S';
+$pdflatex = 'make vc.tex; pdflatex %O %S';
+$xetex = 'make vc.tex; xetex %O %S';
+$xelatex = 'make vc.tex; xelatex %O %S';
+$luatex = 'make vc.tex; luatex %O %S';
+$lualatex = 'make vc.tex; lualatex %O %S';
diff --git a/Makefile b/Makefile
index 790bd5897f5facf72ab3655c50a0c2deb2dbfef3..6704432ebcc5e5a102275e045d1cad9ebbfa402d 100644
--- a/Makefile
+++ b/Makefile
@@ -35,7 +35,8 @@ clean:
 		$(addsuffix .fls,$(JOBNAMES)) \
 		$(addsuffix .log,$(JOBNAMES)) \
 		$(addsuffix .out,$(JOBNAMES)) \
-		$(addsuffix .toc,$(JOBNAMES))
+		$(addsuffix .toc,$(JOBNAMES)) \
+		vc.tex
 
 mrproper: clean
 	rm -f $(PDFS)
@@ -43,7 +44,10 @@ mrproper: clean
 preview:
 	$(latexmk) -pvc $(LATESTJOB).tex
 
-%.pdf: %.tex
+vc.tex: .git/index .git/HEAD scripts/vc scripts/vc-git.awk
+	cd scripts; sh ./vc -m && mv vc.tex ..
+
+%.pdf: %.tex vc.tex
 	$(latexmk) $(if $(PVC),-pvc,-pvc-) "$<"
 
 # vim: ft=make ts=8 noet
diff --git a/scripts/vc b/scripts/vc
new file mode 100755
index 0000000000000000000000000000000000000000..8e1988edbfec0072835fee0a267a063d9b5f9286
--- /dev/null
+++ b/scripts/vc
@@ -0,0 +1,41 @@
+#!/bin/sh
+# This is file 'vc' from the vc bundle for TeX.
+# The original file can be found at CTAN:support/vc.
+# This file is Public Domain.
+
+# Parse command line options
+full=0
+mod=0
+while [ -n "$(echo $1 | grep '-')" ]; do
+	case $1 in
+		-f ) full=1 ;;
+		-m ) mod=1 ;;
+		*  ) echo 'usage: vc [-f] [-m]'
+			exit 1
+	esac
+	shift
+done
+
+# Query all info from git log
+logformat=""
+logformat="${logformat}Hash: %H%n"
+logformat="${logformat}AbrHash: %h%n"
+logformat="${logformat}ParentHashes: %P%n"
+logformat="${logformat}AbrParentHashes: %p%n"
+logformat="${logformat}AuthorName: %an%n"
+logformat="${logformat}AuthorEmail: %ae%n"
+logformat="${logformat}AuthorDate: %ai%n"
+logformat="${logformat}CommitterName: %cn%n"
+logformat="${logformat}CommitterEmail: %ce%n"
+logformat="${logformat}CommitterDate: %ci%n"
+LC_ALL=C
+git --no-pager log -1 HEAD --pretty=format:"$logformat" \
+	| gawk -v script=log -v full=$full -f vc-git.awk \
+	> vc.tex
+
+# Query modification status of the working copy
+if [ "$mod" = 1 ]; then
+	git status --porcelain=v1 \
+		| gawk -v script=status -f vc-git.awk \
+		>> vc.tex
+fi
diff --git a/scripts/vc-git.awk b/scripts/vc-git.awk
new file mode 100644
index 0000000000000000000000000000000000000000..b80fced7c3ec71c99f8059887d69c16ed4b9ebcf
--- /dev/null
+++ b/scripts/vc-git.awk
@@ -0,0 +1,83 @@
+# This is file 'vc-git.awk' from the vc bundle for TeX.
+# The original file can be found at CTAN:support/vc.
+# This file is Public Domain.
+BEGIN {
+	modified = 0
+}
+
+### Process output of "git log".
+script=="log" && /^Hash:/            { Hash            = substr($0, 2+match($0, ":")) }
+script=="log" && /^AbrHash:/         { AbrHash         = substr($0, 2+match($0, ":")) }
+script=="log" && /^ParentHashes:/    { ParentHashes    = substr($0, 2+match($0, ":")) }
+script=="log" && /^AbrParentHashes:/ { AbrParentHashes = substr($0, 2+match($0, ":")) }
+script=="log" && /^AuthorName:/      { AuthorName      = substr($0, 2+match($0, ":")) }
+script=="log" && /^AuthorEmail:/     { AuthorEmail     = substr($0, 2+match($0, ":")) }
+script=="log" && /^AuthorDate:/      { AuthorDate      = substr($0, 2+match($0, ":")) }
+script=="log" && /^CommitterName:/   { CommitterName   = substr($0, 2+match($0, ":")) }
+script=="log" && /^CommitterEmail:/  { CommitterEmail  = substr($0, 2+match($0, ":")) }
+script=="log" && /^CommitterDate:/   { CommitterDate   = substr($0, 2+match($0, ":")) }
+
+### Process output of "git status".
+### Changed index?
+script=="status" && /^[mMADRCU] / { modified = 1 }
+### Unstaged modifications?
+script=="status" && /^ [mMADRCU]/ { modified = 1 }
+### Unresolved merge conflicts?
+script=="status" && /^[mMADRCU][mMADRCU]/ { modified = 1 }
+
+END {
+	### Process output of "git log".
+	if (script=="log") {
+		### Format dates
+		LongDate = substr(AuthorDate, 1, 25)
+		DateRAW = substr(LongDate, 1, 10)
+		DateISO = DateRAW
+		DateTEX = DateISO
+		gsub("-", "/", DateTEX)
+		Time = substr(LongDate, 12, 14)
+
+		print "%%% This file has been generated by the vc bundle for TeX."
+		print "%%% Do not edit this file!"
+		print "%%%"
+
+		print "%%% Define Git specific macros."
+		print "\\gdef\\GITHash{" Hash "}%"
+		print "\\gdef\\GITAbrHash{" AbrHash "}%"
+		print "\\gdef\\GITParentHashes{" ParentHashes "}%"
+		print "\\gdef\\GITAbrParentHashes{" AbrParentHashes "}%"
+		print "\\gdef\\GITAuthorName{" AuthorName "}%"
+		print "\\gdef\\GITAuthorEmail{" AuthorEmail "}%"
+		print "\\gdef\\GITAuthorDate{" AuthorDate "}%"
+		print "\\gdef\\GITCommitterName{" CommitterName "}%"
+		print "\\gdef\\GITCommitterEmail{" CommitterEmail "}%"
+		print "\\gdef\\GITCommitterDate{" CommitterDate "}%"
+
+		print "%%% Define generic version control macros."
+		print "\\gdef\\VCRevision{\\GITAbrHash}%"
+		print "\\gdef\\VCAuthor{\\GITAuthorName}%"
+		print "\\gdef\\VCDateRAW{" DateRAW "}%"
+		print "\\gdef\\VCDateISO{" DateISO "}%"
+		print "\\gdef\\VCDateTEX{" DateTEX "}%"
+		print "\\gdef\\VCTime{" Time "}%"
+		print "%%% Assume clean working copy."
+		print "\\gdef\\VCModified{0}%"
+		print "\\gdef\\VCRevisionMod{\\VCRevision}%"
+	}
+
+	### Process output of "git status".
+	if (script=="status") {
+		print "%%% Is working copy modified?"
+		print "\\gdef\\VCModified{" modified "}%"
+		if (modified==0) {
+			print "\\gdef\\VCModifiedText{}%"
+			print "\\gdef\\VCRevisionMod{\\VCRevision}%"
+		} else {
+			print "\\gdef\\VCModifiedText{\\textcolor{red}{mit lokalen Änderungen}}%"
+			print "\\gdef\\VCRevisionMod{\\VCRevision~\\VCModifiedText}%"
+		}
+		# footnote without a number:
+		print "\\gdef\\VCfootnote{\\begingroup\\def\\thefootnote{}\\footnote{%"
+		print "Erstellt aus \\url{https://github.com/stratum0/dokumente/blob/\\GITAbrHash/\\jobname.tex} \\VCModifiedText%"
+		print "}\\addtocounter{footnote}{-1}\\endgroup}%"
+	}
+}