summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/lni
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/lni
Initial commit
Diffstat (limited to 'macros/latex/contrib/lni')
-rw-r--r--macros/latex/contrib/lni/CHANGELOG.md89
-rw-r--r--macros/latex/contrib/lni/CONTRIBUTING.md30
-rw-r--r--macros/latex/contrib/lni/README.md37
l---------macros/latex/contrib/lni/lni-instructions.pdf1
-rw-r--r--macros/latex/contrib/lni/lni.dtx3193
-rw-r--r--macros/latex/contrib/lni/lni.ins129
-rw-r--r--macros/latex/contrib/lni/lni.pdfbin0 -> 358862 bytes
7 files changed, 3479 insertions, 0 deletions
diff --git a/macros/latex/contrib/lni/CHANGELOG.md b/macros/latex/contrib/lni/CHANGELOG.md
new file mode 100644
index 0000000000..0a07eb75c5
--- /dev/null
+++ b/macros/latex/contrib/lni/CHANGELOG.md
@@ -0,0 +1,89 @@
+# Changelog
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](http://keepachangelog.com/)
+and this project adheres to [Semantic Versioning](http://semver.org/).
+
+## [Unreleased]
+
+## [1.5.0] -2019-04-04
+
+### Added
+- Load package `textcomp` by default and add option `upquote` to `listings` package ([#69](https://github.com/gi-ev/LNI/issues/69))
+- New option `norunningheads` to remove all running headers from the document
+([#77](https://github.com/gi-ev/LNI/issues/77))
+
+### Changed
+- `\refname` changed to `Bibliography` for English texts
+
+### Fixed
+- German paper example: Correct language `Java` at example listing
+- Packages `hyperef`, `cleveref` and `hypcap` are always at the end of the preamble ([#71](https://github.com/gi-ev/LNI/issues/71))
+- Option `bookmarks` of `hyperref` now set at load-time. Had no effect before.
+- Layout for English texts (subtitle)
+- URL for GI in example file
+
+## [1.4.0] - 2018-01-15
+
+### Added
+- New option `oldfonts` to use the class file on older systems by loading the `mathptmx` font package ([#56](https://github.com/gi-ev/LNI/issues/56))
+- New macros added (taken from `emisa.dtx`) ([#57](https://github.com/gi-ev/LNI/issues/57))
+- Hint to word limit for abstract ([#60](https://github.com/gi-ev/LNI/issues/60))
+- Added full example for an article in German ([#63](https://github.com/gi-ev/LNI/issues/63))
+
+### Changed
+- Package `caption` is loaded in order to make the class more robust ([#59](https://github.com/gi-ev/LNI/issues/59))
+
+### Fixed
+- Basewidth for `lstlistings` ([#62](https://github.com/gi-ev/LNI/issues/62))
+- Adapting captions of `lstlistings`
+- License statement of paper: CC-BY-SA instead of CC-BY-NC ([#67](https://github.com/gi-ev/LNI/issues/67))
+
+## [1.3.0] - 2017-05-15
+
+### Added
+- New option `nofonts` to use the class file on older systems ([#53](https://github.com/gi-ev/LNI/issues/52))
+
+### Changed
+- Use more stable syntax for font loading with `fontspec` ([#54](https://github.com/gi-ev/LNI/issues/54))
+
+
+## [1.2.0] - 2017-05-05
+
+### Added
+- Quick start section for README.md ([#48](https://github.com/gi-ev/LNI/issues/48))
+- New macro `\lnidoi` to add DOI to pages (DOI provided by editor)
+- General (partial) support for `XeTeX` and `LuaTeX` using the `iftex` package ([#51](https://github.com/gi-ev/LNI/issues/51))
+
+### Changed
+- Option `straightquotes` is set manually for package `newtxtt` to gain compatibility with versions prior to v1.05 ([#49](https://github.com/gi-ev/LNI/issues/49))
+
+
+## [1.1.0] - 2017-04-19
+
+### Added
+- New macro `\subtitle` ([#44](https://github.com/gi-ev/LNI/issues/44))
+- New keyword delimiter `\and` ([#43](https://github.com/gi-ev/LNI/issues/43))
+- New files CHANGELOG.md and CONTRIBUTING.md
+- New option `crop` for crop marks
+- Check for latest German hyphenation patterns ([#47](https://github.com/gi-ev/LNI/issues/47))
+
+### Changed
+- CTAN script to include new files
+- Documentation
+
+### Fixed
+- Definition of `\Crefname` to always get "Abb." instead of "ABB." etc. ([#45](https://github.com/gi-ev/LNI/pull/45))
+
+
+## [1.0.0] - 2017-04-07
+First release of the revised files
+
+[Unreleased]: https://github.com/gi-ev/LNI/compare/v1.4...HEAD
+[1.4.0]: https://github.com/gi-ev/LNI/releases/tag/v1.5
+[1.4.0]: https://github.com/gi-ev/LNI/releases/tag/v1.4
+[1.3.0]: https://github.com/gi-ev/LNI/releases/tag/v1.3
+[1.2.0]: https://github.com/gi-ev/LNI/releases/tag/v1.2
+[1.1.0]: https://github.com/gi-ev/LNI/releases/tag/v1.1
+[1.0.0]: https://github.com/gi-ev/LNI/releases/tag/v1.0
+
diff --git a/macros/latex/contrib/lni/CONTRIBUTING.md b/macros/latex/contrib/lni/CONTRIBUTING.md
new file mode 100644
index 0000000000..ff718c5bd6
--- /dev/null
+++ b/macros/latex/contrib/lni/CONTRIBUTING.md
@@ -0,0 +1,30 @@
+# Contributing
+
+You can report bugs and request features using the [issues page](https://github.com/gi-ev/lni/issues).
+
+We love code contributions.
+You can easily work on the code if you have a GitHub account ([get one](https://github.com/join)).
+For that, please [fork the repository](https://help.github.com/articles/fork-a-repo/), work on the code, and submit a [pull request](https://help.github.com/articles/about-pull-requests/).
+
+Take a look at GitHub's excellent overview on the [GitHub flow](https://guides.github.com/introduction/flow/index.html).
+The [Feature Branch Workflow](https://de.atlassian.com/git/tutorials/comparing-workflows#feature-branch-workflow) forms the basis of this kind of development.
+
+In other words:
+
+1. Fork the project
+2. Clone the repo:
+
+ git clone git@github.com:your-username/LNI.git
+
+3. Create a new branch `patch` (or another speaking name)
+
+ git checkout -b patch
+
+3. Make your changes.
+4. Commit your changes.
+ Thereby, try to write a [good commit message](https://github.com/joelparkerhenderson/git_commit_message).
+5. Push your chaneges (to your repository)
+6. [submit a pull request](https://github.com/gi-ev/lni/compare/)
+7. At this point you're waiting on us.
+ We like to at least comment on pull requests as soon as possible.
+ We may suggest some changes or improvements or alternatives.
diff --git a/macros/latex/contrib/lni/README.md b/macros/latex/contrib/lni/README.md
new file mode 100644
index 0000000000..b850e17f65
--- /dev/null
+++ b/macros/latex/contrib/lni/README.md
@@ -0,0 +1,37 @@
+# lni [![Build Status](https://circleci.com/gh/gi-ev/LNI/tree/master.svg?style=shield)](https://circleci.com/gh/gi-ev/LNI/) [![CTAN](https://img.shields.io/badge/CTAN-lni-blue.svg?style=flat-square)](https://ctan.org/pkg/lni)
+
+```
+----------------------------------------------------------------------------
+lni -- A class for submissions to the ``Lecture Notes in Informatics''
+(c) 2016-2019 Gesellschaft für Informatik (GI)
+Version: 1.5
+Maintainer: Martin Sievers
+Email: martin.sievers@schoenerpublizieren.de
+License: Released under the LaTeX Project Public License v1.3c or later
+See: http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------------------
+```
+
+This is the official version of the class “lni” for submissions to the
+“[Lecture Notes in Informatics]” published by the “Gesellschaft für Informatik”
+([GI]).
+
+It is based on previous templates created on behalf of the GI.
+
+Quick start:
+Download [lni-author-template.tex](lni-author-template.tex) and edit it in
+your favorite LaTeX editor.
+You will have to use [BibTeX](https://www.ctan.org/pkg/bibtex) as bibliography tool.
+In case you want to use [biblatex](https://www.ctan.org/pkg/biblatex) and
+[Biber](https://www.ctan.org/pkg/biber), read on in the documentation of this class.
+You should use `pdflatex` as `xelatex` and `lualatex` lack some features of the class file.
+
+Stable versions are always uploaded to CTAN (https://www.ctan.org/pkg/lni).
+In addition you will find the most recent developer version on GitHub at https://github.com/gi-ev/lni.
+The most recent documentation is available at https://github.com/gi-ev/LNI/blob/master/lni.pdf.
+It includes a short description how to use the template and also provides trouble shooting hints.
+
+Please see [CHANGELOG.md](CHANGELOG.md) for a version history
+
+ [GI]: https://www.gi.de/
+ [Lecture Notes in Informatics]: https://www.gi.de/service/publikationen/lni.html
diff --git a/macros/latex/contrib/lni/lni-instructions.pdf b/macros/latex/contrib/lni/lni-instructions.pdf
new file mode 120000
index 0000000000..3a6a63c6cc
--- /dev/null
+++ b/macros/latex/contrib/lni/lni-instructions.pdf
@@ -0,0 +1 @@
+lni.pdf \ No newline at end of file
diff --git a/macros/latex/contrib/lni/lni.dtx b/macros/latex/contrib/lni/lni.dtx
new file mode 100644
index 0000000000..218a603e94
--- /dev/null
+++ b/macros/latex/contrib/lni/lni.dtx
@@ -0,0 +1,3193 @@
+% \iffalse meta-comment
+%<*internal>
+\iffalse
+%</internal>
+%<*internal>
+\fi
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+ \expandafter\begingroup
+\fi
+%</internal>
+%<*install>
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\declarepreamble\bibtexengpre
+lnig.bst
+Lecture Notes in Informatics Style File (english)
+Version 1.0 (2017/04/07)
+
+The Style File is based on alpha.bst
+
+This work may be freely used,
+distributed and modified.
+Modified files should be clearly indicated as such and renamed.
+\endpreamble
+
+\declarepreamble\bibtexgerpre
+lnig.bst
+Lecture Notes in Informatics Style File (german)
+Version 1.0 (2017/04/07)
+
+The Style File is based on alpha.bst
+
+This work may be freely used,
+distributed and modified.
+Modified files should be clearly indicated as such and renamed.
+\endpreamble
+
+\declarepreamble\classpre
+--------| -----------------------------------------------------------------
+ lni:| A class for submissions to the ``Lecture Notes in Informatics''
+ Author:| Martin Sievers
+ Email:| martin.sievers@schoenerpublizieren.de
+License:| Released under the LaTeX Project Public License v1.3c or later
+ See:| http://www.latex-project.org/lppl.txt
+--------| -----------------------------------------------------------------
+\endpreamble
+
+\def\templatepre{%
+\perCent\space !TeX encoding = UTF-8^^J%
+\perCent\space !TeX program = pdflatex^^J%
+\perCent\space !BIB program = bibtex^^J%
+}
+
+\def\templatepreger{%
+\perCent\space !TeX encoding = UTF-8^^J%
+\perCent\space !TeX spellcheck = de_DE^^J%
+}
+
+\postamble
+
+Copyright (C) 2016-2019 by Gesellschaft für Informatik e.V. (GI)
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License (LPPL), either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in the file:
+
+http://www.latex-project.org/lppl.txt
+
+This work is "maintained" (as per LPPL maintenance status) by
+Martin Sievers.
+
+This work consists of the file lni.dtx
+ lni.ins
+ README.md
+ CHANGELOG.md
+ and the derived files lni.pdf
+ lni.cls
+ lni-author-template.tex
+ lni-paper-example-de.bib
+ lni-paper-example-de.tex
+ lni.bst
+ lnig.bst
+\endpostamble
+
+\usedir{tex/latex/lni}
+\AddGenerationDate
+\generate{
+ \usepreamble\classpre
+ \file{\jobname.cls}{\from{\jobname.dtx}{class}}
+}
+\usedir{bibtex/bst/lni}
+\generate{
+ \usepreamble\bibtexengpre
+ \file{\jobname.bst}{\from{\jobname.dtx}{bibtex,eng}}
+ \usepreamble\bibtexgerpre
+ \file{lnig.bst}{\from{\jobname.dtx}{bibtex,ger}}
+}
+%</install>
+%<install>\endbatchfile
+%<*internal>
+\usedir{source/latex/lni}
+\generate{
+ \usepreamble\classpre
+ \file{\jobname.ins}{\from{\jobname.dtx}{install}}
+}
+\nopreamble\nopostamble
+\usedir{doc/latex/lni}
+\generate{
+ \usepreamble\templatepre
+ \file{lni-author-template.tex}{\from{\jobname.dtx}{template}}
+}
+\generate{
+ \file{lni-paper-example-de.bib}{\from{\jobname.dtx}{exampledebib}}
+}
+\generate{
+ \usepreamble\templatepreger
+ \file{lni-paper-example-de.tex}{\from{\jobname.dtx}{exampledetex}}
+}
+\ifx\fmtname\nameofplainTeX
+ \expandafter\endbatchfile
+\else
+ \expandafter\endgroup
+\fi
+%</internal>
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{lni.dtx}
+%</driver>
+%<class>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<class>\ProvidesClass{lni}
+%<*class>
+ [2019/04/04 v1.5 Official class for submissions to the ``Lecture Notes
+ in Informatics'']
+%</class>
+%<*driver>
+\documentclass[a4paper]{ltxdoc}
+\usepackage[ngerman,english]{babel}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{libertine}
+\usepackage[scaled=0.8]{beramono}
+\usepackage[%
+ final,%
+ tracking=smallcaps,%
+ expansion=alltext,%
+ protrusion=alltext-nott]{microtype}%
+\SetTracking{encoding=*,shape=sc}{50}%
+\usepackage{textcomp}
+\usepackage{upquote}
+\usepackage[final]{listings}
+\usepackage{csquotes}
+\usepackage[dvipsnames]{xcolor}
+\usepackage{hologo}
+\newcommand*{\MiKTeX}{\hologo{MiKTeX}}
+\usepackage[%
+ pdftitle={lni: Official LaTeX class for submissions to the ``Lecture Notes in
+ Informatics'', published by the ``Gesellschaft für Informatik e.\,V.'' (GI)},
+ pdfauthor={Martin Sievers},
+ urlcolor=blue,%
+ linktoc=both,%
+ colorlinks=true]{hyperref}
+\usepackage[nameinlink,capitalise]{cleveref}
+
+\DeclareFontFamily{U}{MnSymbolC}{}
+\DeclareSymbolFont{MnSyC}{U}{MnSymbolC}{m}{n}
+\DeclareFontShape{U}{MnSymbolC}{m}{n}{
+ <-6> MnSymbolC5
+ <6-7> MnSymbolC6
+ <7-8> MnSymbolC7
+ <8-9> MnSymbolC8
+ <9-10> MnSymbolC9
+ <10-12> MnSymbolC10
+ <12-> MnSymbolC12%
+}{}
+\DeclareMathSymbol{\powerset}{\mathord}{MnSyC}{180}
+
+\newcommand{\lni}{\texttt{lni}}
+\newcommand{\LNI}{\emph{Lecture Notes in Informatics}}
+\makeatletter
+\newcommand*\DescribeOption{%
+\leavevmode%
+\@bsphack%
+\begingroup%
+ \MakePrivateLetters%
+ \Describe@Option%
+}%
+\newcommand*\Describe@Option[1]{%
+ \endgroup%
+\marginpar{%
+ \raggedleft%
+ \PrintDescribeEnv{#1}%
+}%
+\SpecialOptionIndex{#1}%
+\@esphack%
+\ignorespaces%
+}%
+\newcommand*\SpecialOptionIndex[1]{%
+\@bsphack%
+\index{%
+ #1\actualchar{\protect\ttfamily#1} (option)\encapchar usage%
+}%
+\index{%
+ options:\levelchar#1\actualchar{\protect\ttfamily#1}%
+ \encapchar usage%
+}%
+\@esphack%
+}%
+\makeatother
+\lstset{
+ basicstyle = \small\ttfamily,
+ gobble = 2,
+ keywordstyle = \color{blue}\bfseries,
+ language = [LaTeX]{TeX},
+ moretexcs = {,
+ addbibresource,authorrunning,%
+ email,lnidoi,
+ ExecuteBibliographyOptions,includegraphics,printbibliography,
+ }
+ frame = single,
+ backgroundcolor = \color{yellow!60},
+ framesep = 5pt,
+ literate={Ö}{{\"O}}1 {Ä}{{\"A}}1 {Ü}{{\"U}}1 {ß}{{\ss}}1 {ü}{{\"u}}1 {ä}{{\"a}}1 {ö}{{\"o}}1
+}%
+\lstnewenvironment{examplecode}[1][]
+{\lstset{#1}}
+{}
+\providecommand*\env[1]{\texttt{#1}}
+\providecommand*\file[1]{\texttt{#1}}
+\providecommand*\opt[1]{\texttt{#1}}
+\providecommand*\pkg[1]{\textsf{#1}}
+\OnlyDescription %nur Anleitung (ohne Index und History)
+\CodelineIndex %kein Index wenn auskommentiert
+\EnableCrossrefs %kein Index wenn auskommentiert
+\RecordChanges %keine History wenn auskommentiert
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+% \CheckSum{0}
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \changes{v1.0}{2017/04/07}{Official release of revised version}
+% \changes{v1.1}{2017/04/08}{Added macros \cs{subtitle} and keyword delimiter
+% \cs{add}}
+% \changes{v1.1}{2017/04/08}{Fixed bug with \cs{Crefname}}
+% \changes{v1.1}{2017/04/08}{Updated documentation and bundle structure}
+% \changes{v1.1}{2017/04/12}{Changed spacing for \cs{subtitle}}
+% \changes{v1.1}{2017/04/18}{Added check for ngerman-x-latest patterns}
+% \changes{v1.1}{2017/04/19}{Added option \opt{crop}}
+% \changes{v1.2}{2017/04/26}{Set option \opt{straighquotes} for \pkg{newtxtt}
+% manually to gain compatibility with version prior to v1.05}
+% \changes{v1.2}{2017/04/27}{Added \pkg{iftex} to check for pdflatex}
+% \changes{v1.2}{2017/05/04}{Added (partial) support for XeTeX and LuaTeX}
+% \changes{v1.3}{2017/05/04}{Added option \opt{nofonts} to suppress font
+% loading completely}
+% \changes{v1.3}{2017/05/08}{Changed syntax for \pkg{fontspec}}
+% \changes{v1.4}{2017/05/27}{Added new macros taken from the EMISA class file}
+% \changes{v1.4}{2017/05/27}{Added option \opt{oldfonts} to use a font package
+% available}
+% \changes{v1.4}{2017/07/26}{Added package \pkg{caption} and changed all
+% \cs{fontsize} calls to nativ \LaTeX{} macros}
+% \changes{v1.4}{2017/09/11}{Fixed basewidth for \env{lstlistings}}
+% \changes{v1.4}{2017/09/29}{Fixed font size for \cs{Large}}
+% \changes{v1.4}{2017/11/08}{Added full example for an article in German}
+% \changes{v1.4}{2017/11/08}{Adapting captions of \env{lstlistings}}
+% \changes{v1.4}{2017/11/08}{Fix font size bug regarding the running header
+% and the captions: \cs{small} was redefined, so we need an \cs{oldsmall} here}
+% \changes{v1.5}{2018/09/11}{Postpone loading of \pkg{cleveref}}
+% \changes{v1.5}{2018/09/11}{Load \pkg{textcomp} by default and add option
+% \opt{upquote} to \pkg{listings}}
+% \changes{v1.5}{2019/02/13}{Fix layout for English texts}
+% \changes{v1.5}{2019/02/13}{Changed \cs{refname} for English texts}
+% \changes{v1.5}{2019/02/20}{New option \opt{norunningheads}}
+%
+% \GetFileInfo{\jobname.dtx}
+% \DoNotIndex{\newcommand,\newenvironment}
+%
+% \title{\textsf{lni} -- Official class for submissions to the\\%
+% ``Lecture Notes in Informatics''\thanks{This file describes version
+% \fileversion, last revised \filedate.}}
+% \author{Martin Sievers\setcounter{footnote}{6}\thanks{Email:
+% martin.sievers@schoenerpublizieren.de}}
+% \date{Released \filedate}
+%
+% \maketitle
+%
+% \begin{abstract}
+% \noindent After several years the \lni{} bundle has been updated. The
+% resulting new version fixes some long-standing bugs, solves problems and
+% supports modern packages like \pkg{biblatex} and \pkg{microtype}. It has been
+% put into one DTX file to make maintaining and distributing via CTAN a bit
+% easier.
+% \end{abstract}
+%
+% \section{Introduction}
+% \LaTeX{} templates are often long-lasting. Even if they use meanwhile
+% deprecated packages they are often passed from one generation of authors to
+% the next.
+%
+% The Gesellschaft für Informatik~e.\,V. (GI) thankfully realized, that their
+% bundle should be technologically
+% modernized while the general layout remains the same.
+%
+% Based on the existing class and bib files I set-up a DTX file and started
+% reworking the source code. Editors and authors suggested different additions
+% and changes, which I tried to incoporate without changing the existing
+% mechanisms too much.
+%
+% This is the first public release. I would to thank especially
+% \href{https://github.com/koppor/}{Oliver Kopp} and
+% \href{https://www.fernuni-hagen.de/evis/team/stefan.strecker.shtml}{Stefan
+% Strecker} and his team for their suggestions and tests.
+%
+% \section{Installation}
+% The \lni{} bundle is currently distributed via
+% \href{https://github.com/gi-ev/LNI}{GitHub}, the
+% \href{https://www.gi.de/service/publikationen/lni/autorenrichtlinien.html}
+% {GI website} and (preferably) \href{https://www.ctan.org/pkg/lni}{CTAN}.
+% The later is the basis for all updates of the two main \TeX{} distributions
+% \MiKTeX{} and \TeX{}~Live. Thus the easiest way to get all files needed to
+% typeset an article for the \LNI{} is to use the package manager of your
+% distribution.
+%
+% For a manual installation please call \texttt{pdflatex lni.dtx} at least
+% twice and
+% copy all resulting files (cls, tex, pdf and bst) to your local TEXMF tree.
+% Don't forget to update your file name database.
+% \newpage
+% \section{Usage}
+% To use the predefined layout for a (German) submission to the \LNI{} just
+% load the class file as usual with \cs{documentclass\{lni\}}.
+%
+% The class file loads a bunch of packages which are all part of modern \TeX{}
+% distributions. Therefore, if you are confronted
+% with a missing package, please try to download and install it using your
+% distribution's package manager. Alternatively go to
+% \href{http://www.ctan.org}{CTAN} to download missing packages.
+%
+% Please note, that the support of \hologo{XeLaTeX} and \hologo{LuaLaTeX} is
+% only partial. For example the mono font is not the same. Moreover
+% \hologo{pdfLaTeX} is a \TeX{} engine used by the publishers. Therefore it is
+% strongly recommended to use \hologo{pdfLaTeX}.
+%
+% \subsection{Options}\label{sec:options}
+% Although the class file includes all layout information for a submission to
+% the \LNI{}, there are options to adapt the output one way or another.
+%
+% \DescribeOption{english}A document loading the \lni{} class file uses German
+% language adoptions by default. To switch to English, just load the class with
+% option \opt{english}.
+%
+% The language influences not only the hyphenation patterns and terms used in
+% the text, but also the choice of a corresponding \BibTeX{} file
+% (cf.~\cref{sec:bibliography}).
+%
+% \DescribeOption{utf8}\DescribeOption{latin1}\DescribeOption{applemac}Although
+% nowadays all major plattforms support and widely use UTF-8 encoding for
+% text files, there might be some need to change the input encoding the
+% \LaTeX{} document uses.
+%
+% This can be achieved by giving one of the options \opt{utf8} (which is the
+% default), \opt{latin1} or \opt{applemac} to the document class. Using UTF-8
+% is strongly recommended. Please note, that currently the bib file is supposed
+% to use the same encoding.
+%
+% \DescribeOption{biblatex}Nowadays bibliographies cannot only be produced with
+% \BibTeX{}, but with a much more powerful approach consisting of the package
+% \pkg{biblatex} and the tool \texttt{biber}.
+%
+% There is even a specialized package \pkg{biblatex-lni} which is automatically
+% used when setting the class option \opt{biblatex}. For more information see
+% as well \cref{sec:bibliography}.
+%
+% \DescribeOption{crop\space(new in v1.1)}%
+% Option \opt{crop} gives you some crop marks (using the package \pkg{crop}) to
+% better illustrate the final
+% result of your article.
+%
+% \DescribeOption{nocleveref}When referencing figures, one has to type
+% \texttt{Figure\textasciitilde}\cs{ref\marg{label}}. The package \pkg{cleveref}
+% reduces the effort by offering the command \cs{cref\marg{label}}. This can be
+% used with all floating objects. The package is loaded as default. In case it
+% causes issues, one can disable it using with the \opt{nocleveref} option.
+%
+% \DescribeOption{nohyperref}\pkg{hyperref} is used for colored hyperlinks
+% within the articles. If you consider problems or just do not want that
+% feature, you can disable it by using the option \opt{nohyperref}.
+%
+% \DescribeOption{nofonts\space(new in v1.3, deprecated in v1.4)}On old systems
+% you might not have installed the New TX fonts. If for whatever reason the
+% \opt{oldfonts} option
+% does not work for you, you can activate option \opt{nofonts}. This allows to
+% suppress font loading completely using the engines standard fonts instead.
+% Usually there should be no need to do so. Please note, that your output will
+% differ from the publishers'.
+%
+% \DescribeOption{oldfonts\space(new in v1.4)}On older systems you might not
+% have installed the New TX fonts. Therefore option \opt{oldfonts} allows to
+% to load the package \pkg{mathptmx} instead of the New TX fonts. The output
+% will be in accordance to (or at least near) the publisher's requirements.
+%
+% \DescribeOption{norunningheads\space(new in v1.5)}To easily remove all running
+% headers from your document, you can use the option \opt{norunningheads}.
+% \newpage
+% \section{Setting up a document}
+% You can use the file \file{lni-author-template.tex} as a starting point
+% for setting up a document for submission. The \lni{} class uses the standard
+% ways to build an article.
+%
+% \subsection{Special meta data}\label{sec:metadata}
+% There is not just one \enquote{\TeX} and one \enquote{bibliography tool}, but
+% many different ways to transform a .tex file into a PDF.
+% Some \TeX{} editors like \texttt{TeXstudio}, \texttt{TeXmaker} and
+% \texttt{TeXshop} support a special set of meta data to tell the editor, how
+% to deal with a concrete document.
+%
+% A typical example looks like:
+% \begin{examplecode}
+% % !TeX program = pdflatex
+% % !BIB program = bibtex8
+% % !TeX encoding = UTF-8
+% !TeX spellcheck = de_DE
+% \documentclass[english]{lni}
+% \end{examplecode}
+%
+% \subsection{Special macros for editors}
+% \DescribeMacro{\startpage}\DescribeMacro{\editor}\DescribeMacro{\booktitle}%
+% \DescribeMacro{\year}In addition to the macros stated in
+% \cref{sec:titlepage} for authors, there are special editor macros to
+% influence the layout of the article:
+% \begin{itemize}
+% \item\cs{startpage} determines the starting page of the article. This
+% should always be an odd (right) page.
+% \item\cs{editor} states the name of the editor(s)
+% \item\cs{booktitle} holds the name of a conference
+% \item\cs{year} can be used to set the year
+% \end{itemize}
+%
+% \subsection{Title page}\label{sec:titlepage}
+% \DescribeMacro{\title}%
+% \DescribeMacro{\subtitle\space(new in v1.1)}%
+% The title of your work is given using the \cs{title} macro. In addition to
+% the title itself, you can add a short title to be used
+% in the header of a page:
+% \begin{examplecode}[label={lst:title}]
+% \title[Short title]{Title}
+% \end{examplecode}
+%
+% You can also add a subtitle by \cs{substitle\marg{subtitle}}.
+%
+% \DescribeMacro{\author}\DescribeMacro{\email}\DescribeMacro{\footnote}%
+% \DescribeMacro{\and}%
+% The authors of an article are
+% given using the standard \cs{author} macro. Multiple authors are separated
+% by \cs{and}; affiliations have to be added with
+% \cs{footnote\marg{affiliations}} where you can use
+% \cs{email\marg{email address}} for the email address of an author:
+% \begin{examplecode}[label={lst:author}]
+% \author[Author 1 \and Author 2]{%
+% Author 1\footnote{Affiliations including \email{email@author1}} \and%
+% Author 2\footnote{Affiliations including \email{email@author2}}}
+% \end{examplecode}
+% In case the authors are too long for the page header, see
+% \cref{sec:pageheader} of how to shorten the authors for the page header.
+%
+% \DescribeMacro{\lnidoi\space(new in v1.2)}%
+% LNI provides a DOI for each paper. In case, the DOI is known, it can be
+% specified using the \cs{lnidoi} macro.
+% \begin{examplecode}[label={lst:lnidoi}]
+% \lnidoi{18.18420/se2016_01}
+% \end{examplecode}
+%
+% Finally \cs{maketitle} will output the formatted title page.
+%
+% \subsection{Abstract and keywords}
+% \DescribeEnv{abstract}\DescribeEnv{keywords}%
+% \DescribeMacro{\and\space(new in v1.1)}%
+% Each article should start with a short (70 to 150 words) abstract and some
+% keywords. Please use the environments \env{abstract} and \env{keywords} for
+% that purpose:
+% \begin{examplecode}
+% \begin{abstract}
+% Tell the reader what your article is about
+% \end{abstract}
+% \begin{keywords}
+% Give some keywords to categorize your article. You can use \and between two
+% keywords to get the correct delimiter (semicolon plus space) automatically.
+% \end{keywords}
+% \end{examplecode}
+%
+% \subsection{Page header}\label{sec:pageheader}
+% The template automatically sets the page headers according to the
+% requirements of \LNI. From page~2 onwards, the title and the authors are
+% printed. These information has to stay in one line. In case the title is too
+% long, use the optional argument for \cs{title}:
+% \begin{examplecode}
+% \title[Short title]{Title}
+% \end{examplecode}
+%
+% \DescribeMacro{\authorrunning}%
+% In case there are many authors on a paper, they might not fit into the paper.
+% For that purpose, additionally use \cs{authorrunning}:
+% \begin{examplecode}
+% \author[Firstname1 Lastname1 \and Firstname2 Lastname2%
+% \and Firstname3 Lastname3]{Firstname1 Lastname1\footnote{...}%
+% \and Firstname2 Lastname2\footnote{...}%
+% \and Firstname3 Lastname3\footnote{...}}%
+% \authorrunning{Lastname1 et al.}
+% \end{examplecode}
+%
+% \subsection{Main text}
+% \subsubsection{Headings}
+% \DescribeMacro{\section}\DescribeMacro{\subsection}%
+% \DescribeMacro{\subsubsection}
+% You can use the standard macros \cs{section}, \cs{subsection}, \dots{} for
+% sectioning your text.
+%
+% \subsubsection{Footnotes}
+% \DescribeMacro{\footnote}%
+% For adding a footnote, just use \cs{footnote\marg{footnote text}} where
+% needed. Please note, that the footnote counter is automatically set to the
+% correct value at the beginning of your text, i.\,e. it respects the number
+% of affiliations given on the title page.
+%
+% \subsubsection{Lists}
+% \DescribeEnv{itemize}\DescribeEnv{enumerate}%
+% The \lni{} class redefines the standard lists environments \env{itemize} and
+% \env{enumerate} to meet the requirements of the \LNI{}.
+%
+% Lists can be filled as usual by adding \cs{item} macros.
+%
+% \subsubsection{Floating objects}
+% \DescribeEnv{figure}\DescribeEnv{table}%
+% The environments \env{figure} and \env{table} can be used the standard way to
+% include graphics or tables resp.
+%
+% However, please note, that the default placement parameters are changed to
+% \opt{htbp} by the class \lni{}. If you need some local adjustment, please use
+% the optional argument of both environments (cf.~Listing~\ref{lst:figure}).
+%
+% \DescribeMacro{\caption}\DescribeMacro{\label}
+% A caption should be added by \cs{caption\marg{caption text}}, followed
+% immediately by a \cs{label\marg{unique label}} entry.
+% \begin{examplecode}[label={lst:figure}]
+% \begin{figure}[tb]
+% \includegraphics{...}
+% \caption{...}
+% \label{...}
+% \end{figure}
+% \end{examplecode}
+%
+% If you want to center floats, please \emph{do not} use the \env{center}
+% environment, but the macro \cs{centering}, which does not add extra white
+% space (cf.~Listing~\ref{lst:table}).
+% \begin{examplecode}[label={lst:table}]
+% \begin{table}
+% \centering
+% \begin{tabular}{lll}
+% ...
+% \end{tabular}
+% \caption{...}
+% \label{...}
+% \end{table}
+% \end{examplecode}
+%
+% \subsubsection{Listings\,/\,Source code}
+% The \lni{} bundle loads the \pkg{verbatim} and \pkg{listings} package. While
+% the former is there for compatability, the later is the standard way of
+% integrating source code listings into a \LaTeX{} document.
+%
+% However, there are currently no config files shipped with the \lni{} bundle.
+% Please consult the documentation for help on setting up \pkg{listings} for a
+% specific programming language.
+%
+% \subsubsection{Math}
+% If you need mathematics, you can load packages \pkg{amsmath} and
+% \pkg{mathtools} for
+% additional features. The \lni{} class offers by default the command
+% \cs{powerset} to render the powerset symbol correctly as $\powerset$ and not
+% as Weierstrass p ($\wp$).
+%
+% \subsubsection{Abbreviations and initialisms}
+% \DescribeMacro{\eg}\DescribeMacro{\ie}\DescribeMacro{\cf}%
+% \DescribeMacro{\etal}%
+% To achieve consistent typesetting of common abbreviations, macros are
+% predefined by the class. These macros should \emph{consistently} being used
+% instead of writing the plain version. For example use \verb|\eg| rather than
+% {\verb|e.g.,|}. The macros take care of spacing within and after the
+% abbreviations.
+% \begin{itemize}
+% \item \cs{eg} for e.\,g.
+% \item \cs{ie} for i.\,e.
+% \item \cs{cf} for cf.
+% \item \cs{etal} for et~al.
+% \end{itemize}
+%
+% \DescribeMacro{\OMG}\DescribeMacro{\BPM}\DescribeMacro{\BPMN}\DescribeMacro{\UML}%
+% In addition to common abbreviations, further initialisms are provided by the
+% class for convenience and for a consistent visual appearance. Note that the
+% class uses \textsc{smallcaps} for typesetting initialisms. The list of
+% predefined initialisms comprises:
+%
+% \begin{itemize}
+% \item \cs{OMG} for \textsc{omg} (Object Management Group).
+% \item \cs{BPM} for \textsc{bpm} (Business Process Management).
+% \item \cs{BPMN} for \textsc{bpmn} (Business Process Model and Notation).
+% \item \cs{BPEL} for \textsc{bpel} (Business Process Execution Language).
+% \item \cs{UML} for \textsc{uml} (Unified Modelling Language).
+% \end{itemize}
+%
+% \DescribeMacro{\lniinitialism} You can add your own initialisms by stating
+% \cs{lniinitialism\marg{\textbackslash initialism\_macro}\marg{text}} in the
+% preamble.
+%
+% \subsection{Bibliography}\label{sec:bibliography}
+% \enlargethispage{\baselineskip}The old \lni{} class file only supports
+% \BibTeX{} with bst files for German
+% and English submissions resp. If you want to use this approach for your
+% article you have to add \cs{bibliography\marg{Bib file}} at an appropriate
+% position within your text. The correct bst file is loaded automatically.
+%
+% With option
+% \opt{biblatex} (cf.~\cref{sec:options}) you can easily switch to the modern
+% \pkg{biblatex} package. However, you have to add information on the bib
+% file(s) in your preamble using \cs{addbibresource\marg{Bib file(s)}} and call
+% \cs{printbibliography} where you want the bibliography to appear.
+%
+% Please note, that the \lni{} class sets
+% \texttt{biber} as the default bibliography tool. \texttt{biber} is part of
+% both major \TeX{} distributions and can easily be used within most \TeX{}
+% editors, e.\,g. by using special meta data as described in
+% \cref{sec:metadata}.
+%
+% If you want to pass settings to \pkg{biblatex} you can use a config
+% file \texttt{biblatex.cfg}, for additional options please use the macro
+% \cs{ExecuteBibliographyOptions}. Please consult the
+% \href{http://texdoc.net/pkg/biblatex}{package's documentation} for
+% more information.
+% \begin{examplecode}
+% % !TeX program = pdflatex
+% % !BIB program = biber
+% \documentclass[biblatex]{lni}
+% ...
+% \ExecuteBibliographyOptions{...}
+% \addbibresource{FILENAME.bib}
+% ...
+% \begin{document}
+% ...
+% \printbibliography
+% ...
+% \end{document}
+% \end{examplecode}
+%
+% \section{Trouble shooting}
+% This section lists the most common issues when using this template. For more
+% help, please head to
+% \href{https://github.com/egeerardyn/awesome-LaTeX/blob/master/README.md}%
+% {the awesome \LaTeX{} list}.
+%
+% \begin{itemize}
+% \item If the compiler error is\\
+% \texttt{!pdfTeX error (font expansion): auto
+% expansion is only possible with scalable fonts.},\\%
+% then you have to install the
+% \pkg{cm-super} package. Afterwards, run \texttt{initexmf --mkmaps} on the
+% command line. A longer discussion is available at
+% \url{http://tex.stackexchange.com/a/324972/9075}.
+% \item If the compiler error is\\
+% \texttt{!LaTeX Error: Command \textbackslash
+% openbox already defined.},\\
+% insert\\
+% \cs{let}\cs{openbox}\cs{relax} before \cs{usepackage\{amsthm\}}.
+% \item If the compiler error is\\
+% \texttt{!Undefined control sequence. l.84
+% \textbackslash ulp@afterend},\\
+% just clean up (remove \texttt{paper.aux}) and recompile.
+% \item If the compiler error is\\
+% \texttt{!Package xkeyval Error: 'family\_i'
+% undefined in families blx@opt@name}\\\texttt{part'.},\\
+% it is an indicator that you
+% switched from \BibTeX{} to \pkg{biblatex}. Clean up (remove
+% \texttt{paper.bbl}) and recompile.
+% \item Errors with \BibTeX: The bst files may still report errors, although
+% the output is okay. This will be solved as soon as possible. However, you
+% might consider switching to \pkg{biblatex} (cf.~\cref{sec:bibliography}).
+% \end{itemize}
+%
+% \section{Bugs and feature request}
+% If you find a bug or have a feature request, please open an ``issue'' at the
+% \href{https://github.com/gi-ev/LNI/issues}{GitHub website}.
+%
+% \StopEventually{^^A
+% \PrintChanges
+% \PrintIndex
+% }
+%
+% \section{Implementation}
+%
+% \begin{macrocode}
+%<*class>
+% \end{macrocode}
+% \begin{macrocode}
+\def\@clearglobaloption#1{%
+ \def\@tempa{#1}%
+ \def\@tempb{\@gobble}%
+ \@for\next:=\@classoptionslist\do
+ {\ifx\next\@tempa
+ \message{Cleared option \next\space from global list}%
+ \else
+ \edef\@tempb{\@tempb,\next}%
+ \fi}%
+ \let\@classoptionslist\@tempb
+ \expandafter\ifx\@tempb\@gobble
+ \let\@classoptionslist\@empty
+ \fi}
+%
+\DeclareOption{latin1}{\PassOptionsToPackage{latin1}{inputenc}}
+\DeclareOption{utf8}{\PassOptionsToPackage{utf8}{inputenc}}
+\DeclareOption{ansinew}{\PassOptionsToPackage{ansinew}{inputenc}}
+\newif\iflnienglish
+\lnienglishfalse
+\DeclareOption{english}{\lnienglishtrue\@clearglobaloption{english}}
+\newif\ifusehyperref
+\usehyperreftrue
+\DeclareOption{nohyperref}{\usehyperreffalse}
+\newif\ifusecleveref
+\useclevereftrue
+\DeclareOption{nocleveref}{\useclevereffalse}
+\newif\ifusebiblatex
+\usebiblatexfalse
+\DeclareOption{biblatex}{\usebiblatextrue}
+\newif\ifcrop
+\cropfalse
+\DeclareOption{crop}{\croptrue}
+\newif\ifnofonts
+\nofontsfalse
+\DeclareOption{nofonts}{\nofontstrue\autofontsfalse}
+\newif\ifoldfonts
+\oldfontsfalse
+\DeclareOption{oldfonts}{\oldfontstrue\autofontsfalse}
+\newif\ifautofonts
+\autofontstrue
+\newif\ifnorunningheads
+\DeclareOption{norunningheads}{\norunningheadstrue}
+\ExecuteOptions{utf8}
+\DeclareOption*{\ClassWarning{Option `\CurrentOption` is not supported!}}
+\ProcessOptions\relax
+%
+\RequirePackage{iftex}
+\ifPDFTeX
+ \RequirePackage{hyphsubst}
+ \HyphSubstIfExists{ngerman-x-latest}%
+ {\HyphSubstLet{ngerman}{ngerman-x-latest}%
+ \ClassInfo{lni}{Using latest German hyphenation patterns}}%
+ {\ClassWarning{lni}{Latest German hyphenation patterns could not be found!%
+ \MessageBreak If you write a German article you should check your%
+ installation}}%
+\fi%
+\LoadClass[10pt,twoside,a4paper,fleqn]{article}
+\ifPDFTeX
+ \RequirePackage{cmap}
+ \RequirePackage{inputenc}
+ \RequirePackage[T1]{fontenc}
+ \RequirePackage[full]{textcomp}
+\fi%
+%
+\iflnienglish
+ \RequirePackage[ngerman,english]{babel}
+\else
+ \RequirePackage[english,ngerman]{babel}
+\fi%
+% Hint by http://tex.stackexchange.com/a/321067/9075 -> enable "= as dashes
+\useshorthands*{"}
+\addto\extrasenglish{\languageshorthands{ngerman}}
+% \end{macrocode}
+% Define a modern variant of Times as the main font
+% \begin{macrocode}
+\ifautofonts
+ \ClassInfo{lni}{*******************************************************}
+ \MessageBreak
+ \ClassInfo{lni}{Checking for fonts ...}
+ \ClassInfo{lni}{*******************************************************}
+ \ifPDFTeX
+ \IfFileExists{newtxtext.sty}
+ {%
+ \RequirePackage{newtxtext}
+ \RequirePackage{newtxmath}
+ \RequirePackage[zerostyle=b,scaled=.9]{newtxtt}
+% \end{macrocode}
+% For compatibility with version of \pkg{newtxtt} prior to v1.05 we set the
+% option \opt{straightquotes} manually for recent versions
+% \begin{macrocode}
+ \@ifpackagelater{newtxtt}{2014/11/18}%
+ {\txtt@upqtrue}%
+ {\ClassWarning{lni}{You are using an old version of
+ `newtxtt'.\MessageBreak
+ Option `straightquotes' will not be used!}}%
+% \end{macrocode}
+% \begin{macrocode}
+ }%
+ {\IfFileExists{mathptmx.sty}
+ {\oldfontstrue}%
+ {\nofontstrue}%
+ }%
+% \end{macrocode}
+% for \hologo{XeTeX} or \hologo{LuaTeX} we use \pkg{fontspec}
+% \begin{macrocode}
+ \else%
+ \IfFileExists{newtxmath.sty}
+ {\RequirePackage{newtxmath}}%
+ {}%
+ \RequirePackage[no-math]{fontspec}
+ \IfFontExistsTF{texgyretrmes-regular.otf}
+ {%
+ \setmainfont{texgyretermes}[
+ Extension = .otf,
+ UprightFont = *-regular,
+ BoldFont = *-bold,
+ ItalicFont = *-italic,
+ BoldItalicFont = *-bolditalic,
+ Ligatures=TeX
+ ]
+ }%
+ {\IfFileExists{mathptmx.sty}
+ {\oldfontstrue}%
+ {\nofontstrue}%
+ }%
+ \fi%
+\fi%
+\ifoldfonts
+ \RequirePackage{mathptmx}
+\else%
+ \ifnofonts % nofonts activated
+ \ClassWarning{lni}{Option `nofonts' set! I will use standard fonts
+ \MessageBreak
+ instead of the New TX fonts. Your document will NOT look like the
+ \MessageBreak
+ final result for publication. This should only be used if you have
+ \MessageBreak
+ no possibility to install fonts or upgrade your TeX installation!}%
+ \fi%
+\fi%
+% \begin{macrocode}
+\ifPDFTeX
+ \RequirePackage[%
+ final,%
+ tracking=smallcaps,%
+ expansion=alltext,%
+ protrusion=alltext-nott]{microtype}%
+\else
+ \RequirePackage[%
+ final,%
+ protrusion=alltext-nott]{microtype}%
+\fi%
+\SetTracking{encoding=*,shape=sc}{50}%
+% \end{macrocode}
+% Introduce \cs{powerset} - hint by \url{http://matheplanet.com/matheplanet/nuke/html/viewtopic.php?topic=136492&post_id=997377}
+% \begin{macrocode}
+\DeclareFontFamily{U}{MnSymbolC}{}
+\DeclareSymbolFont{MnSyC}{U}{MnSymbolC}{m}{n}
+\DeclareFontShape{U}{MnSymbolC}{m}{n}{
+ <-6> MnSymbolC5
+ <6-7> MnSymbolC6
+ <7-8> MnSymbolC7
+ <8-9> MnSymbolC8
+ <9-10> MnSymbolC9
+ <10-12> MnSymbolC10
+ <12-> MnSymbolC12%
+}{}
+\DeclareMathSymbol{\powerset}{\mathord}{MnSyC}{180}
+% \end{macrocode}
+% Support for CC icons
+\RequirePackage{ccicons}
+% Support for \cs{ifdefempty}
+\RequirePackage{etoolbox}
+% Satzspiegel
+% \begin{macrocode}
+\newlength{\doihoffset}
+\newlength{\doivoffset}
+\ifcrop
+ \RequirePackage[
+ paperheight=23.5cm,paperwidth=15.5cm,
+ total={12.6cm,19.2cm},
+ includehead,
+ headheight=20.39pt,
+ headsep=.31cm,
+ centering]
+ {geometry}
+ \RequirePackage[a4,center,cam,info]{crop}
+ \renewcommand*\CROP@@info{{%
+ \global\advance\CROP@index\@ne
+ \def\x{\discretionary{}{}{\hbox{\kern.5em---\kern.5em}}}%
+ \advance\paperwidth-20\p@
+ \dimen@4pt
+ \ifx\CROP@pagecolor\@empty
+ \else
+ \advance\dimen@\CROP@overlap
+ \fi
+ \hb@xt@\z@{%
+ \hss
+ \vbox to\z@{%
+ \centering
+ \hsize\paperwidth
+ \vss
+ \normalfont
+ \normalsize
+ \expandafter\csname\CROP@font\endcsname{%
+ ``\jobname''\x
+ \the\@rigyear/\the\month/\the\day\x
+ \CROP@time\x
+ page\kern.5em\thepage\x
+ \#\the\CROP@index
+ \strut
+ }%
+ \vskip\dimen@
+ }%
+ \hss
+ }%
+ }}%
+ \setlength{\doihoffset}{1.45cm}
+ \setlength{\doivoffset}{1.2cm}
+\else
+ \RequirePackage[
+ total={12.6cm,19.2cm},
+ includehead,
+ headheight=20.39pt,
+ headsep=.31cm,
+ centering]
+ {geometry}
+ \setlength{\doihoffset}{4.2cm}
+ \setlength{\doivoffset}{4.3cm}
+\fi%
+% \end{macrocode}
+% We change \cs{small} and \cs{Large} to get the correct baseline skips and add
+% an \cs{oldsmall}
+% \begin{macrocode}
+\let\oldsmall\small%
+\renewcommand\small{%
+ \@setfontsize\small\@ixpt{10}%
+ \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@
+ \abovedisplayshortskip \z@ \@plus2\p@
+ \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@
+ \def\@listi{\leftmargin\leftmargini
+ \topsep 4\p@ \@plus2\p@ \@minus2\p@
+ \parsep 2\p@ \@plus\p@ \@minus\p@
+ \itemsep \parsep}%
+ \belowdisplayskip \abovedisplayskip
+}
+\renewcommand\Large{\@setfontsize\Large{14}{17}}
+% \end{macrocode}
+% \begin{macrocode}
+\RequirePackage[autostyle]{csquotes}
+\ifusebiblatex
+ \RequirePackage[%
+ backend=biber,% UTF-8 support
+ style=LNI, % The GI style - see https://www.ctan.org/pkg/biblatex-lni
+ natbib=true % Required for \Citet
+ ]{biblatex}[2016-09-15]% at least version 3.6 of biblatex is required.
+% \end{macrocode}
+% \begin{macro}{\citeauthor}
+% \begin{macrocode}
+ % Enable hyperlinked authors when using \citeauthor
+ % Source: http://tex.stackexchange.com/a/75916/9075
+ \DeclareCiteCommand{\citeauthor}%
+ {\boolfalse{citetracker}%
+ \boolfalse{pagetracker}%
+ \usebibmacro{prenote}}%
+ {\ifciteindex%
+ {\indexnames{labelname}}%
+ {}%
+ \printtext[bibhyperref]{\printnames{labelname}}}%
+ {\multicitedelim}%
+ {\usebibmacro{postnote}}%
+% \end{macro}
+% \begin{macrocode}
+\fi%
+% \end{macrocode}
+% \begin{macrocode}
+\RequirePackage{graphicx}
+\RequirePackage{eso-pic}
+\RequirePackage{grffile}
+\RequirePackage{fancyhdr}
+\RequirePackage{listings}
+% \end{macrocode}
+% We fix the basewidth for lstlistings:
+% The default setting of listings with ``fixed columns'' has a space 0.6em
+% wide, while the characters in TX Typewriter (as in Computer Modern
+% Typewriter) are 0.5em wide.
+% Source: https://tex.stackexchange.com/a/179072/9075
+% \begin{macrocode}
+\lstset{%
+ basicstyle=\ttfamily,%
+ columns=fixed,%
+ basewidth=.5em,%
+ xleftmargin=0.5cm,%
+ captionpos=b,%
+ upquote}%
+% \end{macrocode}
+% Ragged bottom -- verhindert die Ausdehnung der Seite = Veränderung der
+% Abstände
+% \begin{macrocode}
+\def\thisbottomragged{\def\@textbottom{\vskip\z@ plus.0001fil
+\global\let\@textbottom\relax}}
+% \end{macrocode}
+% Seitenzahlen -- Größe der Box
+% \begin{macrocode}
+\renewcommand\@pnumwidth{3em}
+\renewcommand\@tocrmarg{3.5em}
+\def\@dottedtocline#1#2#3#4#5{%
+ \ifnum #1>\c@tocdepth \else
+ \vskip \z@ \@plus.2\p@
+ {\leftskip #2\relax \rightskip \@tocrmarg \advance\rightskip by 0pt plus 2cm
+ \parfillskip -\rightskip \pretolerance=10000
+ \parindent #2\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima #3\relax
+ \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
+ {#4}\nobreak
+ \leaders\hbox{$\m@th
+ \mkern \@dotsep mu\hbox{.}\mkern \@dotsep
+ mu$}\hfill
+ \nobreak
+ \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}%
+ \par}%
+ \fi}
+% \end{macrocode}
+% \begin{macro}{\title}
+% \begin{macrocode}
+\renewcommand{\title}{\@dblarg\@@title}
+\def\@@title[#1]#2{\gdef\@shorttitle{#1}\gdef\@title{#2}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\subtitle}
+% \begin{macrocode}
+\newcommand{\subtitle}[1]{\gdef\@subtitle{#1}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\author}
+% \begin{macrocode}
+\renewcommand{\author}{\@dblarg\@@author}
+\def\@@author[#1]#2{\gdef\@shortauthor{{\let\footnote\@gobble%
+ \def\and{\unskip,\ }#1}}\gdef\@author{#2}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\authorrunning}
+% \begin{macrocode}
+\newcommand{\authorrunning}[1]{%
+ \fancyhead[LE]{\hspace{0.05cm}\oldsmall\thepage\hspace{5pt}#1}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\email}
+% \begin{macrocode}
+\newcommand*{\email}[1]{{\urlstyle{same}\protect\url{#1}}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\lnidoi}
+% \begin{macrocode}
+\newcommand{\@lnidoi}{}
+\newcommand{\lnidoi}[1]{\gdef\@lnidoi{#1}}
+% \end{macrocode}
+% \end{macro}
+% Title: Kopie aus article.cls mit anderem \thispagestyle
+% \begin{macrocode}
+\renewcommand\maketitle{\par%
+\begingroup
+ \renewcommand\thefootnote{\@arabic\c@footnote}%
+ \def\@makefnmark% keine Einrückung der Fußnoten eingestellt
+ {\@textsuperscript{\normalfont\@thefnmark}}%
+ \long\def\@makefntext##1{%
+ \@setpar{\@@par
+ \@tempdima = \hsize
+ \advance\@tempdima -1em
+ \parshape \@ne 0.15cm \@tempdima}%
+ \par\parindent 0.3cm \noindent
+ \hb@xt@\z@{\hss\@textsuperscript{\normalfont\@thefnmark}\,}##1}
+ \if@twocolumn
+ \ifnum \col@number=\@ne
+ \@maketitle
+ \else
+ \twocolumn[\@maketitle]%
+ \fi%
+ \else
+ \newpage
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@maketitle
+ \fi%
+ \ifnorunningheads
+ \thispagestyle{empty}
+ \else
+ \thispagestyle{plain}
+ \fi%
+ \@thanks
+ \endgroup
+ \global\let\thanks\relax
+ \global\let\maketitle\relax
+ \global\let\@maketitle\relax
+ \global\let\@thanks\@empty
+ \global\let\@author\@empty
+ \global\let\@date\@empty
+ \global\let\@title\@empty
+ \global\let\title\relax
+ \global\let\author\relax
+ \global\let\date\relax
+ \global\let\and\relax
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\@maketitle{%
+ \newpage
+ \null
+ \begin{center}%
+ \vskip -24pt% Abstand vor dem Titel
+ \raggedright% Linksbündig
+ \let\footnote\thanks
+ {\Large\bfseries\@title\par}%
+ \ifx\@subtitle\empty\else
+ \ifx\@subtitle\undefined\else
+ \vskip 16pt
+ {\normalsize\bfseries\@subtitle}%
+ \fi%
+ \fi%
+ \vskip 19pt% Abstand nach dem Titel
+ {\normalsize%
+ \lineskip .5em%
+ \@author
+ \par}%
+ \vskip 28pt% Abstand vor dem Abstract
+ \end{center}%
+% output CC license and DOI (if it exists)
+ \AddToShipoutPictureBG*{\AtPageLowerLeft{%
+ \put(\LenToUnit{\the\doihoffset},\LenToUnit{\the\doivoffset}){%
+ \ifusehyperref
+ \href{https://creativecommons.org/licenses/by-sa/4.0/}{\ccbysa}
+ \else
+ \ccbysa
+ \fi
+ \ifdefempty{\@lnidoi}{}{
+ \footnotesize
+ \ifusehyperref
+ \href{https://doi.org/\@lnidoi}{doi:\@lnidoi}
+ \else
+ doi:\@lnidoi
+ \fi%
+ }
+ }
+ }}
+ \par
+}%
+% \end{macrocode}
+% \begin{environment}{abstract}
+% \begin{macrocode}
+\renewenvironment*{abstract}{%
+ \renewcommand{\abstractname}{Abstract}%
+ \small\noindent\ignorespaces{\bfseries\abstractname:\ }%
+}{\endquotation}
+% \end{macrocode}
+% \end{environment}
+% \begin{environment}{keywords}
+% \begin{macrocode}
+\newif\ifkeywords
+\newenvironment{keywords}%
+ {\global\keywordstrue\small%
+ \def\and{\unskip;\space}%
+ \noindent\ignorespaces{\bfseries Keywords:\ }}%
+ {\global\keywordsfalse}
+\let\@RIGsection\section
+\pretocmd\@startsection{\ifkeywords\ClassError{lni}{keywords is an environment, not a macro}%
+ {Please change \string\keywords\space to an environment}\keywordsfalse\fi}{}{}
+% \end{macrocode}
+% \end{environment}
+% Section headings
+% \begin{macrocode}
+\renewcommand{\section}{\@startsection{section}{1}{\z@}%
+ {-16\p@ \@plus -4\p@ \@minus -4\p@}{5\p@ \@plus 4\p@ \@minus
+ 4\p@}{\large\bfseries}}
+\renewcommand{\subsection}{\@startsection{subsection}{2}{\z@}%
+ {-16\p@ \@plus -4\p@ \@minus -4\p@}{8\p@ \@plus 4\p@ \@minus
+ 4\p@}{\normalsize\bfseries}}
+% \end{macrocode}
+% Bildunterschriften
+% \begin{macrocode}
+\RequirePackage{caption}
+\DeclareCaptionFont{oldsmall}{\oldsmall}
+\captionsetup[figure]{style=base,skip=4pt,font=oldsmall}
+\captionsetup[table]{style=base,skip=6pt,font=oldsmall}
+\captionsetup[lstlisting]{style=base,skip=6pt,font=small}
+\setlength{\intextsep}{6pt}%Abstand nach der Grafik
+% \end{macrocode}
+% Take care of floats
+% \begin{macrocode}
+\def\fps@figure{htbp}
+\def\fnum@figure{\figurename~\thefigure}
+\def\@floatboxreset{%
+ \reset@font
+ \small
+ \@setnobreak
+ \@setminipage
+}%
+\setcounter{topnumber}{10}% maximale Anzahl gleitender Objekte am Seitenanfang
+\setcounter{bottomnumber}{10}% maximale Anzahl gleitender Objekte am Seitenende
+\renewcommand{\topfraction}{1.0}% Anteil den gleitende Objekte am Seitenanfang einnehmen dürfen
+\renewcommand{\bottomfraction}{1.0}% Anteil den gleitende Objekte am Seitenende einnehmen dürfen
+% \end{macrocode}
+% Tables
+% \begin{macrocode}
+\def\fps@table{htbp}
+\def\fnum@table{\tablename~\thetable}
+\renewcommand{\arraystretch}{1.1}
+% \end{macrocode}
+% Indention for equations with fleqn option
+% \begin{macrocode}
+\setlength{\mathindent}{0.5cm}
+% \end{macrocode}
+% Indention for verbatim listings
+% \begin{macrocode}
+\RequirePackage{verbatim}
+\def\verbatim@processline{\hskip0.5cm\the\verbatim@line\par}
+% \end{macrocode}
+% Set rule width und correct size
+% \begin{macrocode}
+\renewcommand\footnoterule{%
+ \kern-3\p@
+ \hrule\@width 5cm
+ \kern2.6\p@}
+\newdimen\fnindent
+\fnindent0.18cm
+\long\def\@makefntext#1{%
+ \parindent \fnindent%
+ \leftskip \fnindent% Einrückung vor der footnotemark
+ \noindent
+ \llap{\hb@xt@0.10cm{\hss\@makefnmark\ }}\ignorespaces#1}
+% \end{macrocode}
+% \begin{macrocode}
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{8pt}
+% \end{macrocode}
+% Set symbols for itemize
+% \begin{macrocode}
+\renewcommand{\labelitemi}{$\bullet$}
+\renewcommand*\itemize{%
+ \ifnum \@itemdepth >\thr@@\@toodeep\else
+ \setlength{\labelsep}{0.70cm}%Abstand zum Aufzählungspunkt
+ \advance\@itemdepth\@ne
+ \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+ \expandafter
+ \list
+ \csname\@itemitem\endcsname
+ {\def\makelabel##1{\hss\llap{##1}}%
+ \setlength{\itemsep}{8pt}%
+ \setlength{\parsep}{-2pt}}%
+ \fi}
+% \end{macrocode}
+% and numbered lists
+% \begin{macrocode}
+ \renewcommand{\labelenumii}{\alph{enumii})}
+ \renewcommand*\enumerate{%
+ \ifnum \@enumdepth >\thr@@
+ \@toodeep
+ \else
+ \setlength{\labelsep}{0.70cm}%Abstand zur Aufzählungsnummer
+ \advance\@enumdepth \@ne
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
+ \fi
+ \@ifnextchar[{\@enumlabel@{\@enumerate@}[}{\@enumerate@}}
+ \def\@enumerate@{%
+ \expandafter\list\csname label\@enumctr\endcsname{%
+ \usecounter{\@enumctr}%
+ \def\makelabel##1{\hss\llap{##1}}
+ \setlength{\labelsep}{0.6cm} %Einrückung des Aufzählungszeichens
+ \setlength{\itemsep}{8pt}%
+ \setlength{\parsep}{-2pt}}
+ }%
+% \end{macrocode}
+% \begin{macro}{\andname}
+% \begin{macrocode}
+\newcommand{\andname}{}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\addto\captionsngerman{%
+ \renewcommand{\andname}{und}%
+ \renewcommand{\figurename}{Abb.}%
+ \renewcommand{\tablename}{Tab.}%
+ \renewcommand{\lstlistingname}{List.}%
+ \renewcommand{\refname}{Literaturverzeichnis}%
+}%
+% \end{macrocode}
+% \begin{macrocode}
+\addto\captionsenglish{%
+ \renewcommand{\andname}{and}%
+ \renewcommand{\figurename}{Fig.}%
+ \renewcommand{\tablename}{Tab.}%
+ \renewcommand{\lstlistingname}{List.}%
+ \renewcommand{\refname}{Bibliography}%
+}%
+% \end{macrocode}
+% \begin{macro}{\startpage}
+% \begin{macrocode}
+\newcommand*{\startpage}[1]{\setcounter{page}{#1}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\booktitle}
+% \begin{macrocode}
+\newcommand*{\@booktitle}{}
+\newcommand*{\booktitle}[1]{\renewcommand{\@booktitle}{#1}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\editor}
+% \begin{macrocode}
+\newcommand*{\@editor}{}
+\newcommand*{\editor}[1]{\renewcommand{\@editor}{#1}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\AtBeginDocument{%
+ \let\@rigyear\year
+ \newcommand*{\@year}{\the\@rigyear}
+ \renewcommand*{\year}[1]{%
+ \renewcommand{\@year}{#1}%
+ }%
+}%
+% \end{macrocode}
+% set-up for header and footer
+% \begin{macrocode}
+\fancypagestyle{plain}{%
+ \fancyhead{} % Löscht alle Kopfzeileneinstellungen
+ \fancyhead[RO]{\small\@editor~(Hrsg.):\ \@booktitle,\hspace{1sp}\null\linebreak%
+ Lecture Notes in Informatics (LNI), Gesellschaft für Informatik, Bonn~\@year%
+ \hspace{5pt}\thepage\hspace{0.05cm}}
+ \fancyhead[LE]{\small\@editor~(Hrsg.):\ \@booktitle,\linebreak\hspace{0.05cm}\thepage\hspace{5pt} Lecture Notes in Informatics (LNI), Gesellschaft für Informatik, Bonn~\@year}
+ \fancyfoot{} % Löscht alle Fußzeileneinstellungen
+ \renewcommand{\headrulewidth}{0.4pt} %Linie unter Kopfzeile
+}%
+\ifnorunningheads
+ \pagestyle{empty}
+\else
+ \pagestyle{fancy}
+ \fancyhead{} % Löscht alle Kopfzeileneinstellungen
+ \fancyhead[RO]{\small\@shorttitle\hspace{5pt}\thepage\hspace{0.05cm}}
+ \fancyhead[LE]{\hspace{0.05cm}\small\thepage\hspace{5pt}\@shortauthor}
+ \fancyfoot{} % Löscht alle Fußzeileneinstellungen
+ \renewcommand{\headrulewidth}{0.4pt} %Linie unter Kopfzeile
+\fi%
+% \end{macrocode}
+% \begin{macrocode}
+\RequirePackage{url}
+% \end{macrocode}
+% improve wrapping of URLs - hint by http://tex.stackexchange.com/a/10419/9075
+% \begin{macrocode}
+\g@addto@macro{\UrlBreaks}{\UrlOrds}
+% \end{macrocode}
+% \begin{macrocode}
+\RequirePackage{xspace}
+% \end{macrocode}
+% \begin{macrocode}
+\ifusehyperref
+ \AtEndPreamble{%
+ \RequirePackage[pdfusetitle,bookmarks=false]{hyperref}
+ \hypersetup{%
+ pdfdisplaydoctitle,%
+ colorlinks=true,%
+ allcolors=black,%
+ pdfstartview=Fit%
+ }%
+ }%
+\fi%
+% \end{macrocode}
+% \begin{macrocode}
+\ifusecleveref%
+ \AtEndPreamble{%
+ \iflnienglish
+ \RequirePackage[capitalise,nameinlink]{cleveref}
+ \crefname{section}{Sect.}{Sect.}
+ \Crefname{section}{Sect.}{Sect.}
+ \else
+ \RequirePackage[ngerman,nameinlink]{cleveref}
+ \fi%
+ \crefname{figure}{\figurename}{\figurename}
+ \Crefname{figure}{\figurename}{\figurename}
+ \crefname{listing}{\lstlistingname}{\lstlistingname}
+ \Crefname{listing}{\lstlistingname}{\lstlistingname}
+ \crefname{table}{\tablename}{\tablename}
+ \Crefname{table}{\tablename}{\tablename}
+ }%
+\fi%
+% \end{macrocode}
+% enables correct jumping to figures when referencing
+% \begin{macrocode}
+\AtEndPreamble{\RequirePackage[all]{hypcap}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\and{\unskip\hspace{-0.42em},\hspace{.6em}}
+% \end{macrocode}
+% \begin{macrocode}
+\ifusebiblatex
+\else
+ \iflnienglish
+ \bibliographystyle{lni}%
+ \else
+ \bibliographystyle{lnig}%
+ \fi%
+\fi%
+\newcommand*{\lni@abbrv}[1]{#1\@\xspace}
+\newcommand*{\lniabbrv}[2]{\gdef#1{\lni@abbrv{#2}}}
+\newcommand*{\lni@initialism}[1]{\textsc{#1}\xspace}
+\newcommand*{\lniinitialism}[2]{\gdef#1{\lni@initialism{#2}}}
+\newcommand*{\ie}{\lni@abbrv{i.\,e.}}
+\newcommand*{\eg}{\lni@abbrv{e.\,g.}}
+\newcommand*{\cf}{\lni@abbrv{cf.}}
+\newcommand*{\etal}{\lni@abbrv{et~al.}}
+\newcommand*{\OMG}{\lni@initialism{omg}}
+\newcommand*{\BPM}{\lni@initialism{bpm}}
+\newcommand*{\BPMN}{\lni@initialism{bpmn}}
+\newcommand*{\BPEL}{\lni@initialism{bpel}}
+\newcommand*{\UML}{\lni@initialism{uml}}
+% \end{macrocode}
+% bibliography
+% \begin{macrocode}
+\renewenvironment{thebibliography}[1]
+{\iflnienglish\selectlanguage{english}\else\selectlanguage{ngerman}\fi
+ \section*{\refname}%
+ \bgroup\small%
+ \list{\@biblabel{\@arabic\c@enumiv}}%
+ {\settowidth\labelwidth{\@biblabel{#1}}%
+ \leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \@openbib@code
+ \usecounter{enumiv}%
+ \let\p@enumiv\@empty
+ \renewcommand\theenumiv{\@arabic\c@enumiv}}%
+ \sloppy
+ \clubpenalty4000
+ \@clubpenalty \clubpenalty
+ \widowpenalty4000%
+ \sfcode`\.\@m}
+{\def\@noitemerr
+ {\@latex@warning{Empty `thebibliography' environment}}%
+ \endlist\egroup}
+% \end{macrocode}
+% \begin{macrocode}
+\frenchspacing
+\tolerance 1414
+\hbadness 1414
+\emergencystretch 1.5em
+\hfuzz 0.3pt
+\widowpenalty=10000
+\displaywidowpenalty=10000
+\clubpenalty=9999
+\interfootnotelinepenalty=9999
+\brokenpenalty=2000
+\vfuzz \hfuzz
+\raggedbottom
+% \end{macrocode}
+% \begin{macrocode}
+%</class>
+% \end{macrocode}
+%\Finale
+%
+%\iffalse
+%
+% \begin{macrocode}
+%<*bibtex>
+%<*eng|ger>
+% \end{macrocode}
+% \begin{macrocode}
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ "\bibitem[" write$
+ label write$
+ "]{" write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\em " swap$ * "}" * }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names} %formats the names of the authors
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't
+% last name, prename(s)
+ :=
+ nameptr #1 >
+ { namesleft #1 >
+ { "; " * t * }
+%
+% (RT) Now here we have discovered a bug. The bibliography of the LaTeX-book shows
+% the fault: If there are three or more authors, then the final ``and'' before
+% the last author's name is preceeded by a comma. This looks ugly and is
+% wrong.
+% The original and faulty line in format.names reads
+% { numnames #2 >
+% Actually the generation of the comma is dependent on the number of names
+% left. Therefore:
+%
+ { namesleft #2 >
+ { ";" * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+% ``and'' changed to ``;''
+ { "; " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+ ": " * %add a : after the authors
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+% use abbreviations
+%</eng|ger>
+%<*eng>
+ { ", eds" * }
+ { ", ed." * }
+%</eng>
+%<*ger>
+ { ", Hrsg." * }
+ { ", Hrsg." * }
+%</ger>
+%<*eng|ger>
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+% (RT) the title as typed in the database here
+% { title "t" change.case$ }
+ 'title
+ if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title % no emphasize
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+%</eng|ger>
+%<*eng>
+ { "volume" volume tie.or.space.connect
+%</eng>
+%<*ger>
+ { "Jgg." volume tie.or.space.connect
+%</ger>
+%<*eng|ger>
+ series empty$
+ 'skip$
+%</eng|ger>
+%<*eng>
+ { " of " * series % no emphasize
+%</eng>
+%<*ger>
+ { " in " * series % no emphasize
+%</ger>
+%<*eng|ger>
+ * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "" } %No word before number
+ { "" }
+ if$
+ series empty$
+ { "" }
+ { series * }
+ if$
+ number tie.or.space.connect % series and then the number, eg LNI 001
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+%</eng|ger>
+%<*eng>
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+%</eng>
+%<*ger>
+ { edition "l" change.case$ ".~Auflage" * }
+ { edition "t" change.case$ ".~Auflage" * }
+%</ger>
+%<*eng|ger>
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+%</eng|ger>
+%<*eng>
+ % -> Use abbreviation: pp. for pages, p. for page
+ { "pp." pages n.dashify tie.or.space.connect }
+ { "p." pages tie.or.space.connect }
+%</eng>
+%<*ger>
+ % -> Nutze Abk.: S.
+ { "S." pages n.dashify tie.or.space.connect }
+ { "S." pages tie.or.space.connect }
+%</ger>
+%<*eng|ger>
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+%</eng|ger>
+%<*eng>
+ { "chapter" }
+%</eng>
+%<*ger>
+ { "Kapitel" }
+%</ger>
+%<*eng|ger>
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+% no emphasize
+% { "In: " booktitle emphasize * }
+% { "In: " format.editors * ", " * booktitle emphasize * }
+ { "In: " booktitle * }
+ { "In (" format.editors * "): " * booktitle * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+%</eng|ger>
+%<*eng>
+ { "Technical Report" }
+%</eng>
+%<*ger>
+ { "Bericht" }
+%</ger>
+%<*eng|ger>
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "In {\em " journal * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ % change order of names
+ { editor #2 "{vv~}{ll}{, jj}{, f.}" format.name$ "others" =
+ { " et~al." * }
+ % ; between two editors and change order of names
+ { "; " * editor #2 "{vv~}{ll}{, jj}{, f.}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+%</eng|ger>
+%<*eng>
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+%</eng>
+%<*ger>
+ { "Jgg." volume tie.or.space.connect
+ " in " *
+ }
+%</ger>
+%<*eng|ger>
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "{\em " * series * "\/}" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ % Add : after In
+ { "In: {\em " booktitle * "\/}" * }
+ if$
+ }
+ % Add : after In
+ { "In: " key * }
+ if$
+ }
+ % Add : after In and editiors in ()
+ { "In: (" format.crossref.editor * ")" * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors %"author" output.check %% No dot after authors
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal % no emphasize
+ "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors %output.nonnull %%no dot after authors:
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors %*output.nonnull %%no dot after authors:
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ new.block
+ crossref missing$ %changed whole order of next lines
+ {
+ format.in.ed.booktitle "booktitle" output.check %added: mention title of the related book and editors
+ format.bvolume output
+ new.block
+ format.number.series output
+ % new.sentence %% no dot after the number
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.chapter.pages "chapter and pages" output.check
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors %"author" output.check %%no dot after authors:
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors %"author" output.check %%no dot after authors:
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ new.block
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ }
+ { organization output
+ publisher output
+ address output.nonnull
+ }
+ if$
+ format.pages output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors %"author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+%</eng|ger>
+%<*eng>
+ "Master's thesis" format.thesis.type output.nonnull
+%</eng>
+%<*ger>
+ "Masterarbeit" format.thesis.type output.nonnull
+%</ger>
+%<*eng|ger>
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ author empty$
+ { "" }
+ { format.authors output.nonnull }
+ if$
+ %title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {online}
+{ output.bibitem
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors %"author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+%</eng|ger>
+%<*eng>
+ "PhD thesis" format.thesis.type output.nonnull
+%</eng>
+%<*ger>
+ "Dissertation" format.thesis.type output.nonnull
+%</ger>
+%<*eng|ger>
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors %"author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors %"author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+%</eng|ger>
+%<*eng>
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+%</eng>
+%<*ger>
+MACRO {jan} {"Januar"}
+
+MACRO {feb} {"Februar"}
+
+MACRO {mar} {"März"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"Mai"}
+
+MACRO {jun} {"Juni"}
+
+MACRO {jul} {"Juli"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"Oktober"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"Dezember"}
+%</ger>
+%<*eng|ger>
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+INTEGERS { et.al.char.used }
+
+FUNCTION {initialize.et.al.char.used}
+{ #0 'et.al.char.used :=
+}
+
+EXECUTE {initialize.et.al.char.used}
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 >
+ { numnames #3 > %create short entry for 3 authors max
+ { #1 'namesleft := } %if more than 3 authors take only first one
+ { numnames 'namesleft := }
+ if$
+ #1 'nameptr :=
+ ""
+ { namesleft #0 > }
+ { nameptr numnames =
+ { s nameptr "{ff }{vv }{ll}{ jj}" format.name$
+ "others" =
+ { pop$ s #1 "{ll}" format.name$ #2 text.prefix$ %% second sign of first author if there are others
+ }
+ { s nameptr "{v{}}{l{}}" format.name$ * } %%formats last author
+ if$
+ }
+ { s nameptr "{v{}}{l{}}" format.name$ * } %%formats first, and if three, also the second author
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ numnames #3 >
+ { pop$ s #1 "{ll}" format.name$ #2 text.prefix$ } % if more than 3 authors take second letter of first name
+ 'skip$
+ if$
+ }
+ { s #1 "{v{}}{l{}}" format.name$
+ duplicate$ text.length$ #2 <
+ { pop$ s #1 "{ll}" format.name$ #2 text.prefix$} %get rid of the rest of the name (only first two letters are needed for one author)
+ 'skip$
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label} %% sets the author abbreviation in []
+{ author empty$
+ { key empty$
+ { title #1 #2 substring$ } % Use First two letters of title if there is no author
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { title #1 #2 substring$ }% Use First two letters of title if there is no editor
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+ year field.or.null purify$ #-1 #2 substring$
+ *
+ 'label :=
+ year field.or.null purify$ #-1 #4 substring$
+ *
+ sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al" * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+{ et.al.char.used
+% to make it compatible with singlepass, we use \def
+% { "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ }
+ { "\gdef\etalchar#1{$^{#1}$}" write$ newline$ }
+ 'skip$
+ if$
+ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{" longest.label * "}" * write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
+%</eng|ger>
+%</bibtex>
+%<*template>
+%%% Um einen Artikel auf deutsch zu schreiben, genügt es die Klasse ohne
+%%% Parameter zu laden.
+\documentclass[]{lni}
+%%% To write an article in English, please use the option ``english'' in order
+%%% to get the correct hyphenation patterns and terms.
+%%% \documentclass[english]{class}
+%%
+\begin{document}
+%%% Mehrere Autoren werden durch \and voneinander getrennt.
+%%% Die Fußnote enthält die Adresse sowie eine E-Mail-Adresse.
+%%% Das optionale Argument (sofern angegeben) wird für die Kopfzeile verwendet.
+\title[Ein Kurztitel]{Ein sehr langer Titel über mehrere Zeilen mit sehr vielen
+Worten und noch mehr Buchstaben}
+%%%\subtitle{Untertitel / Subtitle} % if needed
+\author[Vorname1 Nachname1 \and Firstname2 Lastname2]
+{Vorname1 Nachname1\footnote{Universität, Abteilung, Straße, Postleitzahl Ort,
+Land \email{emailaddress@author1}} \and
+Firstname2 Lastname2\footnote{University, Department, Address, Country
+\email{emailaddress@author2}}}
+\startpage{11} % Beginn der Seitenzählung für diesen Beitrag / Start page
+%numbering at this number
+\editor{Herausgeber et al.} % Names of Editors
+\booktitle{Name-der-Konferenz} % Name of book title
+\year{2017}
+%%%\lnidoi{18.18420/provided-by-editor-02} % if known
+\maketitle
+
+\begin{abstract}
+This is a brief overview of the paper, which should be 70 to 150 words long and
+include the most relevant points. This has to be a single paragraph.
+\end{abstract}
+\begin{keywords}
+Schlagwort1 \and Schlagwort2 %Keyword1 \and Keyword2
+\end{keywords}
+%%% Beginn des Artikeltexts
+\section{Überschrift/Heading}
+
+%%% Angabe der .bib-Datei (ohne Endung) / State .bib file (for BibTeX usage)
+\bibliography{mybibfile} %\printbibliography if you use biblatex/Biber
+\end{document}
+%</template>
+%<*exampledebib>
+% Encoding: UTF-8
+
+@InProceedings{ABC01,
+ author = {N. Abraham and U. Bibel and P. Corleone},
+ title = {Formatting Contributions for Proceedings},
+ pages = {46-53},
+ crossref = {Gl01},
+}
+
+@InBook{Az09,
+ pages = {135-162},
+ title = {Die Fußnote in LNI-Bänden},
+ author = {Azubi, L. and others},
+ crossref = {Gl09},
+}
+
+@Book{AB00,
+ title = {Formatierungsrichtlinien für Tagungsbände},
+ publisher = {Format-Verlag},
+ year = {2000},
+ author = {K. Abel and U. Bibel},
+ address = {Bonn},
+}
+
+@Book{Ez10,
+ title = {The Magic Format -- Your Way to Pretty Books},
+ publisher = {Noah \& Sons},
+ year = {2010},
+ author = {O. Ezgarani},
+}
+
+@Article{Gl06,
+ author = {H. I. Glück},
+ title = {Formatierung leicht gemacht},
+ journal = {Formatierungsjournal},
+ volume = {11},
+ number = {09},
+ year = {2009},
+ pages = {23-27},
+}
+
+@Book{Wa14,
+ title = {Essenzen der Informatik},
+ publisher = {Verlag Formvoll},
+ year = {2014},
+ author = {K. Wasser and H. Feuer and R. Erde and H. Licht},
+}
+
+@Book{Wa14b,
+ title = {Ganz neue Essenzen der Informatik im selben Jahr},
+ publisher = {Format-Verlag},
+ year = {2014},
+ author = {K. Wasser and H. Feuer and R. Erde and H. Licht},
+}
+
+@Proceedings{Gl01,
+ title = {Proc. 7th Int. Conf. on Formatting of Workshop-Proceedings},
+ year = {2001},
+ editor = {Glück, H. I.},
+ address = {San Francisco},
+ publisher = {Noah \& Sons},
+ booktitle = {Proc. 7th Int. Conf. on Formatting of Workshop-Proceedings},
+}
+
+@Book{Gl09,
+ title = {Formatierung 2009},
+ publisher = {Format-Verlag},
+ year = {2009},
+ editor = {H. I. Glück},
+ number = {999},
+ series = {LNI},
+ address = {Bonn},
+ booktitle = {Formatierung 2009},
+}
+
+@Misc{XX14,
+ title = {Anteil an Frauen in der Informatik},
+ label = {An},
+ howpublished = {Statistics Worldwide},
+ year = {2014},
+}
+
+@Online{GI19,
+ author = {{Gesellschaft für Informatik e.\,V.}},
+ label = {GI},
+ year = {2019},
+ url = {http://www.gi.de},
+ urldate = {2019-03-21}
+}
+
+@Comment{jabref-meta: databaseType:biblatex;}
+%</exampledebib>
+%<*exampledetex>
+%% Dies gibt Warnungen aus, sollten veraltete LaTeX-Befehle verwendet werden
+\RequirePackage[l2tabu, orthodox]{nag}
+
+\documentclass[utf8,biblatex]{lni}
+\bibliography{lni-paper-example-de}
+
+%% Schöne Tabellen mittels \toprule, \midrule, \bottomrule
+\usepackage{booktabs}
+
+%% Zu Demonstrationszwecken
+\usepackage[math]{blindtext}
+\usepackage{mwe}
+
+%% BibLaTeX-Sonderkonfiguration,
+%% falls man schnell eine existierende Bibliographie wiederverwenden will, aber nicht die .bib-Datei händisch anpassen möchte.
+%% Bitte \iffalse und \fi entfernen, dann ist diese Konfiguration aktiviert.
+
+\iffalse
+\AtEveryBibitem{%
+ \ifentrytype{article}{%
+ }{%
+ \clearfield{doi}%
+ \clearfield{issn}%
+ \clearfield{url}%
+ \clearfield{urldate}%
+ }%
+ \ifentrytype{inproceedings}{%
+ }{%
+ \clearfield{doi}%
+ \clearfield{issn}%
+ \clearfield{url}%
+ \clearfield{urldate}%
+ }%
+}
+\fi
+
+\begin{document}
+%%% Mehrere Autoren werden durch \and voneinander getrennt.
+%%% Die Fußnote enthält die Adresse sowie eine E-Mail-Adresse.
+%%% Das optionale Argument (sofern angegeben) wird für die Kopfzeile verwendet.
+\title[Ein Kurztitel]{Ein sehr langer Titel über mehrere Zeilen mit sehr vielen Worten und noch mehr Buchstaben}
+%%%\subtitle{Untertitel / Subtitle} % falls benötigt
+\author[Vorname1 Nachname1 \and Vorname2 Nachname2]
+{Vorname1 Nachname1\footnote{Universität, Abteilung, Straße, Postleitzahl Ort, Land \email{emailaddress@author1}} \and
+ Vorname2 Nachname2\footnote{University, Department, Address, Country \email{emailaddress@author2}}}
+\startpage{11} % Beginn der Seitenzählung für diesen Beitrag
+\editor{Herausgeber et al.} % Namen der Herausgeber
+\booktitle{Name-der-Konferenz} % Name des Tagungsband
+\year{2017}
+%%%\lnidoi{18.18420/provided-by-editor-02} % Falls bekannt
+\maketitle
+
+\begin{abstract}
+Die \LaTeX-Klasse \texttt{lni} setzt die Layout-Vorgaben für Beiträge in LNI Konferenzbänden um.
+Dieses Dokument beschreibt ihre Verwendung und ist ein Beispiel für die entsprechende Darstellung.
+Der Abstract ist ein kurzer Überblick über die Arbeit der zwischen 70 und 150 Wörtern lang sein und das Wichtigste enthalten sollte.
+Die Formatierung erfolgt automatisch innerhalb des abstract-Bereichs.
+\end{abstract}
+
+\begin{keywords}
+LNI Guidelines \and \LaTeX Vorlage
+\end{keywords}
+
+\section{Verwendung}
+Die GI gibt unter \url{http://www.gi-ev.de/LNI} Vorgaben für die Formatierung von Dokumenten in der LNI Reihe.
+Für \LaTeX-Dokumente werden diese durch die Dokumentenklasse \texttt{lni} realisiert.
+
+Dieses Dokument basiert auf der offiziellen Dokumentation, simplifiziert und setzt grundlegendes LaTeX-Wissen voraus.
+Es werden generische Platzhalter an die entsprechenden Stellen (wie beispielsweise die Authoren-Angaben) gesetzt und nicht weiter an anderer Stelle dokumentiert.
+
+Dieses Template ist wie folgt gegliedert:
+\Cref{sec:demos} zeigt Demonstrationen der LNI-Verlage.
+\Cref{sec:lniconformance} zeigt die Einhaltung der Richtlinien durch einfachen Text.
+
+\section{Demonstrationen}
+\label{sec:demos}
+Das Symbol für Potenzmengen ($\powerset$) wird korrekt angezeigt.
+Es ist kein Weierstraß-p ($\wp$) mehr.
+
+Spitze Klammen können direkt eingegeben werden: <test />
+
+Hier eine kleine Demonstration von \href{https://www.ctan.org/pkg/microtype}{microtype}:
+\blindtext
+
+\section{Demonstration der Einhaltung der Richtlinien}
+\label{sec:lniconformance}
+
+\subsection{Literaturverzeichnis}
+Der letzte Abschnitt zeigt ein beispielhaftes Literaturverzeichnis für Bücher mit einem Autor \cite{Ez10} und zwei AutorInnen \cite{AB00}, einem Beitrag in Proceedings mit drei AutorInnen \cite{ABC01}, einem Beitrag in einem LNI Band mit mehr als drei AutorInnen \cite{Az09}, zwei Bücher mit den jeweils selben vier AutorInnen im selben Erscheinungsjahr \cite{Wa14} und \cite{Wa14b}, ein Journal \cite{Gl06}, eine Website \cite{GI19} bzw.\ anderweitige Literatur ohne konkrete AutorInnenschaft \cite{XX14}.
+Es wird biblatex verwendet, da es UTF8 sauber unterstützt und \href{https://github.com/gi-ev/LNI/issues/5}{im Gegensatz zu lni.bst} keine Fehler beim bibtexen auftreten.
+
+Referenzen sollten nicht direkt als Subjekt eingebunden werden, sondern immer nur durch Authorenanganben:
+Beispiel: \Citet{AB00} geben ein Beispiel, aber auch \citet{Az09}.
+Hinweis: Großes C bei \texttt{Citet}, wenn es am Satzanfang steht. Dies ist analog zu \texttt{Cref}.
+
+Formatierung und Abkürzungen werden für die Referenzen \texttt{book}, \texttt{inbook}, \texttt{proceedings}, \texttt{inproceedings}, \texttt{article}, \texttt{online} und \texttt{misc} automatisch vorgenommen.
+Mögliche Felder für Referenzen können der Beispieldatei \texttt{lni-paper-example-de.bib} entnommen werden.
+Andere Referenzen sowie Felder müssen allenfalls nachträglich angepasst werden.
+
+\subsection{Abbildungen}
+\Cref{fig:demo} zeigt eine Abbildung.
+
+\begin{figure}
+ \centering
+ \includegraphics[width=.8\textwidth]{example-image}
+ \caption{Demographik}
+ \label{fig:demo}
+\end{figure}
+
+\subsection{Tabellen}
+\Cref{tab:demo} zeigt eine Tabelle.
+
+\begin{table}
+\centering
+\begin{tabular}{lll}
+\toprule
+Überschriftsebenen & Beispiel & Schriftgröße und -art \\
+\midrule
+Titel (linksbündig) & Der Titel \ldots & 14 pt, Fett\\
+Überschrift 1 & 1 Einleitung & 12 pt, Fett\\
+Überschrift 2 & 2.1 Titel & 10 pt, Fett\\
+\bottomrule
+\end{tabular}
+\caption{Die Überschriftsarten}
+\label{tab:demo}
+\end{table}
+
+\subsection{Programmcode}
+Die LNI-Formatvorlage verlangt die Einrückung von Listings vom linken Rand.
+In der \texttt{lni}-Dokumentenklasse ist dies für die \texttt{verbatim}-Umgebung realisiert.
+
+\begin{verbatim}
+public class Hello {
+ public static void main (String[] args) {
+ System.out.println("Hello World!");
+ }
+}
+\end{verbatim}
+
+Alternativ kann auch die \texttt{lstlisting}-Umgebung verwendet werden.
+
+\Cref{L1} zeigt uns ein Beispiel, das mit Hilfe der \texttt{lstlisting}-Umgebung realisiert ist.
+
+\begin{lstlisting}[caption={Beschreibung}, label=L1, language=Java]
+public class Hello {
+ public static void main (String[] args) {
+ System.out.println("Hello World!");
+ }
+}
+\end{lstlisting}
+
+\subsection{Formeln und Gleichungen}
+
+Die korrekte Einrückung und Nummerierung für Formeln ist bei den Umgebungen \texttt{equation} und \texttt{eqnarray} gewährleistet.
+
+\begin{equation}
+ 1=4-3
+\end{equation}
+und
+\begin{eqnarray}
+ 2=7-5\\
+ 3=2-1
+\end{eqnarray}
+
+%% \bibliography{lni-paper-example-de.tex} ist hier nicht erlaubt: biblatex erwartet dies bei der Preambel
+%% Starten Sie "biber paper", um eine Biliographie zu erzeugen.
+\printbibliography
+
+\end{document}
+%</exampledetex>
+% \end{macrocode}
+%\fi
diff --git a/macros/latex/contrib/lni/lni.ins b/macros/latex/contrib/lni/lni.ins
new file mode 100644
index 0000000000..fc495f759d
--- /dev/null
+++ b/macros/latex/contrib/lni/lni.ins
@@ -0,0 +1,129 @@
+%%
+%% This is file `lni.ins',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% lni.dtx (with options: `install')
+%% --------| -----------------------------------------------------------------
+%% lni:| A class for submissions to the ``Lecture Notes in Informatics''
+%% Author:| Martin Sievers
+%% Email:| martin.sievers@schoenerpublizieren.de
+%% License:| Released under the LaTeX Project Public License v1.3c or later
+%% See:| http://www.latex-project.org/lppl.txt
+%% --------| -----------------------------------------------------------------
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\declarepreamble\bibtexengpre
+lnig.bst
+Lecture Notes in Informatics Style File (english)
+Version 1.0 (2017/04/07)
+
+The Style File is based on alpha.bst
+
+This work may be freely used,
+distributed and modified.
+Modified files should be clearly indicated as such and renamed.
+\endpreamble
+
+\declarepreamble\bibtexgerpre
+lnig.bst
+Lecture Notes in Informatics Style File (german)
+Version 1.0 (2017/04/07)
+
+The Style File is based on alpha.bst
+
+This work may be freely used,
+distributed and modified.
+Modified files should be clearly indicated as such and renamed.
+\endpreamble
+
+\declarepreamble\classpre
+--------| -----------------------------------------------------------------
+ lni:| A class for submissions to the ``Lecture Notes in Informatics''
+ Author:| Martin Sievers
+ Email:| martin.sievers@schoenerpublizieren.de
+License:| Released under the LaTeX Project Public License v1.3c or later
+ See:| http://www.latex-project.org/lppl.txt
+--------| -----------------------------------------------------------------
+\endpreamble
+
+\def\templatepre{%
+\perCent\space !TeX encoding = UTF-8^^J%
+\perCent\space !TeX program = pdflatex^^J%
+\perCent\space !BIB program = bibtex^^J%
+}
+
+\def\templatepreger{%
+\perCent\space !TeX encoding = UTF-8^^J%
+\perCent\space !TeX spellcheck = de_DE^^J%
+}
+
+\postamble
+
+Copyright (C) 2016-2019 by Gesellschaft für Informatik e.V. (GI)
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License (LPPL), either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in the file:
+
+http://www.latex-project.org/lppl.txt
+
+This work is "maintained" (as per LPPL maintenance status) by
+Martin Sievers.
+
+This work consists of the file lni.dtx
+ lni.ins
+ README.md
+ CHANGELOG.md
+ and the derived files lni.pdf
+ lni.cls
+ lni-author-template.tex
+ lni-paper-example-de.bib
+ lni-paper-example-de.tex
+ lni.bst
+ lnig.bst
+\endpostamble
+
+\usedir{tex/latex/lni}
+\AddGenerationDate
+\generate{
+ \usepreamble\classpre
+ \file{\jobname.cls}{\from{\jobname.dtx}{class}}
+}
+\usedir{bibtex/bst/lni}
+\generate{
+ \usepreamble\bibtexengpre
+ \file{\jobname.bst}{\from{\jobname.dtx}{bibtex,eng}}
+ \usepreamble\bibtexgerpre
+ \file{lnig.bst}{\from{\jobname.dtx}{bibtex,ger}}
+}
+\endbatchfile
+%%
+%% Copyright (C) 2016-2019 by Gesellschaft für Informatik e.V. (GI)
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License (LPPL), either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Martin Sievers.
+%%
+%% This work consists of the file lni.dtx
+%% lni.ins
+%% README.md
+%% CHANGELOG.md
+%% and the derived files lni.pdf
+%% lni.cls
+%% lni-author-template.tex
+%% lni-paper-example-de.bib
+%% lni-paper-example-de.tex
+%% lni.bst
+%% lnig.bst
+%%
+%% End of file `lni.ins'.
diff --git a/macros/latex/contrib/lni/lni.pdf b/macros/latex/contrib/lni/lni.pdf
new file mode 100644
index 0000000000..e4be74932c
--- /dev/null
+++ b/macros/latex/contrib/lni/lni.pdf
Binary files differ