% \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.1 (2022/06/10)

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.1 (2022/06/10)

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-2024 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>
    [2024/07/23 v1.10 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}
\usepackage{dtxdescribe}
\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 and Oliver Kopp},
   urlcolor=blue,%
	linktoc=all,%
	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}}
\lstset{
 basicstyle   = \small\ttfamily,
 gobble       = 2,
 keywordstyle = \color{blue}\bfseries,
 language     = [LaTeX]{TeX},
 moretexcs    = {,
   addbibresource,authorrunning,%
   email,lnidoi,affil,
   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}}
% \changes{v1.6}{2019/04/18}{\cs{email} now generates a mailto: hyperlink}
% \changes{v1.6}{2019/04/23}{Global options are passed to article class}
% \changes{v1.6}{2019/09/14}{New macro \cs{booksubtitle}}
% \changes{v1.6}{2019/09/14}{Add option `driver=none` to `geometry` for better
% crop results}
% \changes{v1.6}{2019/09/14}{\cs{booktitle} now uses an optional argument for
% shorttitle}
% \changes{v1.6}{2019/09/14}{New macro \cs{booksubtitle}}
% \changes{v1.6}{2019/09/14}{\pkg{hypcap} is only loaded if \pkg{hyperref}
% has been loaded before.}
% \changes{v1.6}{2019/09/14}{\pkg{hyperref} is loaded without options to make
% it more compatible with other packages like \pkg{authorarchive}}
% \changes{v1.6}{2019/10/14}{Fix for BibTeX style}
% \changes{v1.6}{2019/10/14}{Add support for \pkg{selnolig}}
% \changes{v1.7}{2020/12/03}{Revert redefinition of \cs{year} after
% \cs{maketitle}}
% \changes{v1.7}{2021/03/02}{Fix setting of pdf metadata (#87)}
% \changes{v1.7}{2021/03/02}{Change loading of latest ngerman hyphenation
% patterns (#47)}
% \changes{v1.7}{2021/03/02}{Change \cs{year} to \cs{yearofpublication} to
% avoid problems (#85)}
% \changes{v1.8}{2022/06/10}{Improvements for documentation}
% \changes{v1.8}{2022/06/10}{Fix output error in bst files (#97)}
% \changes{v1.8}{2022/11/25}{Make class compatable with latest publisher requirements (#121)}
% \changes{v1.8}{2022/11/25}{Make usage of `hyperref` mandatory (#131)}
% \changes{v1.9}{2024/07/01}{Support multiple affiliations (#158)}
% \changes{v1.10}{2024/07/01}{Change font for URLs to text font and change footnote numbers to superscript}
% \changes{v1.10}{2024/07/23}{Fix support multiple affiliations (#173)}
%
% \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 incorporate without changing the existing
% mechanisms too much.
%
% There is an additional package
% \href{https://github.com/gi-ev/biblatex-lni}{\pkg{biblatex-lni}} for an easy
% way of getting a correctly formed bibliography. This package can be
% incorporated using the option \opt{biblatex}. See \cref{sec:bibliography} for
% more information.
%
% \section{Installation}
% The \lni{} bundle is currently distributed via
% \href{https://github.com/gi-ev/LNI}{GitHub} 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.
%
% \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.
%
% The \lni{} class can be used with \hologo{pdfLaTeX} as well as with
% \hologo{XeLaTeX} and \hologo{LuaLaTeX}. To achieve same results, the
% Type1-based packages \pkg{newtxtext}, \pkg{newtxmath} and \pkg{newtxtt}
% are used even for the unicode engines.
%
% \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 (deprecated in v1.8)}\DescribeOption{latin1 (deprecated in v1.8)}%
% \DescribeOption{applemac (deprecated in v1.8)}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 (deprecated in v1.8; will become default option in next major release)}%
% 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
% \href{https://github.com/gi-ev/biblatex-lni}{\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 (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 (deprecated in v1.8)}\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 (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 (deprecated in v1.8)}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 (deprecated in v1.8)}By default there are no more
% running headers from your document.
%
% \DescribeOption{runningheads (new in v1.8)}Editors can turn on the running headers
% using option \opt{runningheads}.
%
% \DescribeOption{anonymous (new in v1.8)}To easily anonymize a paper for
% blind review, use this option. Then all author information will be replaced
% with a placeholder. Additionally, there is a new macro \cs{anon\marg{hide in review}}
% which will be replaced with ``ANONYMIZED'' if the option is set.
% Also, \cs{anon\oarg{for review}\marg{for final version}} can be used that outputs ``for review''
% if the option is set, and ``for final version'' otherwise.
%
% \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. A larger German example can be found in \file{lni-paper-example-de.tex}
%
% \subsection{Special meta comments}\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 comments to give some
% information, how to deal with a concrete document.
%
% A typical example looks like:
% \begin{examplecode}
% % !TeX program = pdflatex
% % !BIB program = biber
% % !TeX encoding = UTF-8
% % !TeX spellcheck = en_US
% \documentclass[english]{lni}
% \end{examplecode}
%
% \subsection{Special macros for editors}
% \DescribeMacro{\startpage}\DescribeMacro{\editor}%
% \DescribeMacro{\booktitle\space(changed in v1.6)}%
% \DescribeMacro{\booksubtitle\space(new in v1.6)}%
% \DescribeMacro{\yearofpublication\space(new in v1.7)}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 (optional argument for
%   a short title used in the running headers)
%   \item\cs{booksubtitle} holds an optional subtitle of a conference
%   \item\cs{yearofpublication} can be used to set the year of publication
% \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{subtitle\marg{subtitle}}.
%
% \DescribeMacro{\author}\DescribeMacro{\email}\DescribeMacro{\footnote\space(deprecated in v1.8)}%
% \DescribeMacro{\and\space(deprecated in v1.8)}\DescribeMacro{\affil}%
% The authors of an article are
% given using an extended \cs{author} macro, which holds not only the name, but also
% email adress and ORCID iD. Moreover the affiliation marker (number) is given as an optional
% argument. Affiliations are added with
% \cs{affil\oarg{number}\marg{information}} where you can use
% \texttt{\textbackslash\textbackslash} to split the address.
% \begin{examplecode}[label={lst:author}]
% \author[1,2]{Firstname1 Lastname1}{firstname1.lastname1@affiliation1.org}{0000-0000-0000-0000}
% \author[2]{Firstname2 Lastname2}{firstname2.lastname2@affiliation2.org}{0000-0000-0000-0000}
% \author[3]{Firstname3 Lastname3}{firstname3.lastname3@affiliation1.org}{0000-0000-0000-0000}
% \author[1]{Firstname4 Lastname4}{firstname4.lastname4@affiliation1.org}{0000-0000-0000-0000}%
% \affil[1]{Universit��t 1\\Abteilung\\Stra��e\\Postleitzahl Ort\\Land}
% \affil[2]{University 2 \\Department\\Address\\Country}
% \affil[3]{University 3\\Department\\Address\\Country}
% \end{examplecode}
%
% Leave the third and/or fourth argument empty if there is no email address and/or ORCID iD.
% Finally \cs{maketitle} will output the formatted title page.
%
% \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 (comma plus space) automatically.
% \end{keywords}
% \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{\texorpdfstring{Listings\,/\,Source code}%
%   {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}
% For writing mathematics the package \pkg{amsmath} is already loaded by default.
% In addtion you can load e.g. \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 document option
% \opt{biblatex} (cf.~\cref{sec:options}) you can easily switch to the
% \pkg{biblatex} style \enquote{lni} provided by
% \href{https://github.com/gi-ev/biblatex-lni}{\pkg{biblatex-lni}}.
% 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}
% We have to make sure, that pdf is always written (arXiv's requirements)
%    \begin{macrocode}
\RequirePackage{iftex}\ifluatex\else\pdfoutput=1\fi%
%    \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}
   \ClassNoteNoLine{lni}{The option `latin1` will be removed from the class with the next major release}}
\DeclareOption{utf8}{%
   \PassOptionsToPackage{utf8}{inputenc}
   \ClassNoteNoLine{lni}{The option `utf8` will be removed from the class with the next major release as it is the only valid value}}
\DeclareOption{ansinew}{%
   \PassOptionsToPackage{ansinew}{inputenc}
   \ClassNoteNoLine{lni}{The option `ansinew` will be removed from the class with the next major release}}
\newif\iflnienglish
\lnienglishfalse
\DeclareOption{english}{\lnienglishtrue\@clearglobaloption{english}}
\newif\ifusehyperref
\usehyperreftrue
\DeclareOption{nohyperref}{%
   \ClassWarningNoLine{lni}{The option `nohyperref` has been deactivated and will be removed from the class with the next major release}}
\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
   \ClassNoteNoLine{lni}{The option `nofonts` will be removed from the class with the next major release}}
\newif\ifoldfonts
\oldfontsfalse
\DeclareOption{oldfonts}{%
   \oldfontstrue\autofontsfalse
   \ClassNoteNoLine{lni}{The option `oldfonts` will be removed from the class with the next major release}}
\newif\ifautofonts
\autofontstrue
\newif\ifnorunningheads
\DeclareOption{norunningheads}{%
   \norunningheadstrue
   \ClassNoteNoLine{lni}{The option `norunningheads` will be removed from the class with the next major release}}
\newif\ifrunningheads
\DeclareOption{runningheads}{\norunningheadsfalse}
\newif\ifanonymous
\anonymousfalse
\DeclareOption{anonymous}{\anonymoustrue}
\newcommand{\anon}[2][\iflnienglish ANONYMIZED\else ANONYMISIERT\fi]{%
  \ifanonymous%
    {\color{orange}#1}%
  \else%
    #2%
  \fi}
\ExecuteOptions{utf8,norunningheads}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions\relax
%    \end{macrocode}
% \changes{v1.8}{2023/11/06}{Fix option handling for \opt{fleqn}}
%    \begin{macrocode}
\PassOptionsToPackage{fleqn}{amsmath}
\LoadClass[10pt,twoside,a4paper]{article}
\ifPDFTeX
   \RequirePackage{cmap}
   \RequirePackage{inputenc}
   \RequirePackage[T1]{fontenc}
   \RequirePackage[full]{textcomp}
\fi%
%
\iflnienglish
   \RequirePackage[ngerman,english]{babel}
\else
   \RequirePackage[english,ngerman]{babel}
   \babelprovide[hyphenrules=ngerman-x-latest]{ngerman}
   \ClassInfo{lni}{Using latest German hyphenation patterns}%
\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[defaultsups]{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{texgyretermes-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}%
%    \end{macrocode}
% When using \hologo{LuaLaTeX} we can activate \pkg{selnolig}
%    \begin{macrocode}
   \ifluatex
      \iflnienglish
         \RequirePackage[english]{selnolig}%
      \else
         \RequirePackage[ngerman]{selnolig}%
      \fi%
   \fi%
\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}
% \changes{v1.8}{2023/11/06}{Remove support for ccicons}
%    \begin{macrocode}
% Support for \cs{ifdefempty}
\RequirePackage{etoolbox}
%    \end{macrocode}
%    \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,
     driver=none]
     {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\year/\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
    date=year,
    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{macrocode}
% \end{macro}
%    \begin{macrocode}
\fi%
%    \end{macrocode}
% \changes{v1.8}{2023/11/06}{Load \pkg{amsmath} explicitly by default (was implicitly done before)}
%    \begin{macrocode}
\RequirePackage{amsmath}
\RequirePackage{etoolbox}
\RequirePackage{graphicx}
\RequirePackage{eso-pic}
\RequirePackage{grffile}
\RequirePackage{fancyhdr}
\RequirePackage{listings}
\RequirePackage{enumitem}
\RequirePackage[hang]{footmisc}
\setlength{\footnotemargin}{1em}
\long\def\@makefntext#1{%
   \def\@makefnmark{\rlap{\normalfont\textsuperscript{\@thefnmark}}}%
   \ifFN@hangfoot
      \bgroup
      \setbox\@tempboxa\hbox{%
         \ifdim\footnotemargin>0pt
            \hb@xt@\footnotemargin{\@makefnmark\hss}%
         \else
            \@makefnmark
         \fi
      }%
      \leftmargin\wd\@tempboxa
      \rightmargin\z@
      \linewidth \columnwidth
      \advance \linewidth -\leftmargin
      \parshape \@ne \leftmargin \linewidth
      \@totalleftmargin \leftmargin
      \footnotesize
      \@setpar{{\@@par}}%
      \leavevmode
      \llap{\box\@tempboxa}%
      \parskip\hangfootparskip\relax
      \parindent\hangfootparindent\relax
   \else
      \parindent1em
      \noindent
      \ifdim\footnotemargin>\z@
         \hb@xt@ \footnotemargin{\hss\@makefnmark}%
      \else
         \ifdim\footnotemargin=\z@
            \llap{\@makefnmark}%
         \else
            \llap{\hb@xt@ -\footnotemargin{\@makefnmark\hss}}%
         \fi
      \fi
   \fi
   \footnotelayout#1%
   \ifFN@hangfoot
      \par\egroup
   \fi
}
%    \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}
\RequirePackage{authblk}
\newcommand{\@authlisthead}{}
\newtoks\@temptokenb
\newtoks\@temptokenc
\renewcommand\Authsep{, }
\renewcommand\Authands{\iflanguage{ngerman}{ und }{, and }}
\renewcommand\Authand{\iflanguage{ngerman}{ und }{ and }}
\NewDocumentCommand{\multiaffil}{ >{\SplitList{,}} m m m}{%   
   \gdef\@currEmail{#2}
   \gdef\@currOrcid{#3}
   \ProcessList{#1}{\@multiaffil}
}

\newcommand{\@multiaffil}[1]{%
   \ifcsundef{@emailsandorcids#1}{\csgdef{@emailsandorcids#1}{}}{}%
   \ifcsempty{@emailsandorcids#1}%
   {\protected@csxappto{@emailsandorcids#1}{%
         \if\relax\@currEmail\relax\else\email{\@currEmail}\fi\if\relax\@currOrcid\relax\else,\ \orcid{\@currOrcid}\fi}}%
   {\protected@csxappto{@emailsandorcids#1}{%
         \if\relax\@currEmail\relax\else;\ \email{\@currEmail}\fi\if\relax\@currOrcid\relax\else,\ \orcid{\@currOrcid}\fi}}%
}

\renewcommand\author[4][]{%
   \ifnewaffil\addtocounter{affil}{1}%
      \edef\AB@thenote{\arabic{affil}}%
   \fi%
   \if\relax#1\relax\def\AB@note{\AB@thenote}\else\def\AB@note{#1}%
   \setcounter{Maxaffil}{0}\fi
   \ifnum\value{authors}=0\def\@firstauthor{#2}\fi
   \ifnum\value{authors}>1\relax
   \@namedef{@sep\number\c@authors}{\Authsep}\fi
   \addtocounter{authors}{1}%
   \begingroup
   \let\protect\@unexpandable@protect \let\and\AB@pand
   \def\thanks{\protect\thanks}\def\footnote{\protect\footnote}%
   \@temptokena=\expandafter{\AB@authors}%
   \@temptokenb=\expandafter{\AB@authors}%
   {\def\\{\protect\\[\@affilsep]\protect\Affilfont
         \protect\AB@resetsep}%
      \xdef\AB@author{\AB@blk@and#2}%
      \ifnewaffil\gdef\AB@las{}\gdef\AB@lasx{\protect\Authand}\gdef\AB@as{}%
      \xdef\AB@authors{\the\@temptokena\AB@blk@and}%
      \else
      \xdef\AB@authors{\the\@temptokena\AB@as\AB@au@str}%
      \global\let\AB@las\AB@lasx\gdef\AB@lasx{\protect\Authands}%
      \gdef\AB@as{\Authsep}%
      \fi
      \gdef\AB@au@str{#2}}%
   \@temptokena=\expandafter{\AB@authlist}%
   \@temptokenb=\expandafter{\@authlisthead}%
   \let\\=\authorcr
   \xdef\AB@authlist{\the\@temptokena
      \protect\@nameuse{@sep\number\c@authors}%
      \protect\Authfont#2\if\relax#4\relax\else\,\orcidlink{#4}\fi\AB@authnote{\AB@note}}%
   \xdef\@authlisthead{\the\@temptokenb
      \protect\@nameuse{@sep\number\c@authors}%
      \protect\Authfont#2}%
   \endgroup
   \ifnum\value{authors}>2\relax
   \@namedef{@sep\number\c@authors}{\Authands}\fi
   \ifcsundef{@emailsandorcids\AB@note}{\csgdef{@emailsandorcids\AB@note}{}}{}%
   \sbox\z@{\@tempcnta=0#1\relax}%
   \expandafter\ifdim\wd\z@>\z@\relax
   \multiaffil{#1}{#3}{#4}
   \else
   \ifcsundef{@emailsandorcids\AB@note}{\csgdef{@emailsandorcids\AB@note}{}}{}%
   \ifcsempty{@emailsandorcids\AB@note}%
   {\csgappto{@emailsandorcids\AB@note}{%
         \if\relax#3\relax\else\email{#3}\fi\if\relax#4\relax\else,\ \orcid{#4}\fi}}%
   {\csgappto{@emailsandorcids\AB@note}{%
         \if\relax#3\relax\else;\ \email{#3}\fi\if\relax#4\relax\else,\ \orcid{#4}\fi}}%
   \fi%
   \newaffilfalse
}
\renewcommand\@author{%
   \ifx\AB@affillist\AB@empty\AB@author\else
      \ifnum\value{affil}>\value{Maxaffil}\def\rlap##1{##1}%
         \AB@authlist\AB@affillist
      \else\AB@authors%
      \fi%
   \fi%
}
\renewcommand\affil[2][]{%
   \newaffiltrue\let\AB@blk@and\AB@pand
   \if\relax#1\relax\def\AB@note{\AB@thenote}\else\def\AB@note{#1}%
   \setcounter{Maxaffil}{0}\fi%
   \begingroup
   \let\protect\@unexpandable@protect
   \def\thanks{\protect\thanks}\def\footnotetext{\protect\footnotetext}%
   \@temptokena=\expandafter{\AB@authors}%
   {\def\\{\protect\\\protect\Affilfont}\xdef\AB@temp{#2}}%
   \xdef\AB@authors{\the\@temptokena\AB@las\AB@au@str
      \protect\\[\affilsep]\protect\Affilfont\AB@temp}%
   \gdef\AB@las{}\gdef\AB@au@str{}%
   {\def\\{, \ignorespaces}\xdef\AB@temp{#2}}%
   \@temptokena=\expandafter{\AB@affillist}%
   \xdef\AB@affillist{\the\@temptokena 
      \footnotetext[\AB@note]{%
         \raggedright\AB@temp\ifcsempty{@emailsandorcids\AB@note}{}{, \csuse{@emailsandorcids\AB@note}}}%
   }
   \endgroup
   \setcounter{footnote}{#1}
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\authorrunning}
%    \begin{macrocode}
\newcommand{\authorrunning}[1]{%
   \fancyhead[LE]{\hspace{0.05cm}\oldsmall\thepage\hspace{5pt}\ifanonymous\iflnienglish Anonymized for review\else Anonymisiert f��r Review\fi\else#1\fi}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\email}
%    \begin{macrocode}
\newcommand*{\email}[1]{\href{mailto:#1}{\urlstyle{same}\protect\nolinkurl{#1}}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\orcid}
%    \begin{macrocode}
\newcommand*{\orcid}[1]{%
   \unskip~\orcidlink{#1}\,\href{https://orcid.org/#1}{https://orcid.org/#1}}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\lnidoi}
%    \begin{macrocode}
\newcommand{\@lnidoi}{}
\newcommand{\lnidoi}{%
      \begingroup\catcode`\_12 \lnidoi@i}
\newcommand{\lnidoi@i}[1]{%
      \gdef\@lnidoi{#1}\endgroup}
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
\renewcommand\maketitle{\par%
   \begingroup
    \renewcommand\thefootnote{\@arabic\c@footnote}%
    \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
  \HyXeTeX@CheckUnicode
  \HyPsd@PrerenderUnicode{\@authlisthead}%
  \ifanonymous\else\pdfstringdef\@pdfauthor{\@authlisthead}\fi%
  \HyXeTeX@CheckUnicode
  \HyPsd@PrerenderUnicode{\@title}%
  \pdfstringdef\@pdftitle{\@title}%
  \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\@subtitle\@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 -27pt% Abstand vor dem Titel
  \raggedright% Linksb��ndig
  \let\footnote\thanks
    {\Large\bfseries\@title\par}%
    \ifx\@subtitle\empty\vskip 9pt\else % Abstand nach dem Titel
      \ifx\@subtitle\undefined\vskip 9pt\else
         \vskip 9pt
         {\normalsize\bfseries\@subtitle}%
         \vskip 15pt% Abstand nach dem Titel
      \fi%
    \fi%
    {\normalsize%
      \lineskip .5em%
      \ifanonymous
        \iflnienglish
          Anonymized for review\footnote{placeholder for contact information}
        \else
          Anonymisiert f��r Review\footnote{Platzhalter f��r Kontaktinformationen}
        \fi%
      \else
        \@author
      \fi%
      \par}%
    \vskip 21pt% Abstand vor dem Abstract
  \end{center}%
% output DOI (if it exists)
  \AddToShipoutPictureBG*{\AtPageLowerLeft{%
    \put(\LenToUnit{\the\doihoffset},\LenToUnit{\the\doivoffset}){%
      \ifanonymous
      \else
         \ifdefempty{\@lnidoi}%
            {}%
            {\footnotesize\href{https://doi.org/\@lnidoi}{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}
% \changes{v1.8}{2023/11/06}{Change delimiter to comma}
% \begin{environment}{keywords}
%    \begin{macrocode}
\newif\ifkeywords
\newenvironment{keywords}%
   {\global\keywordstrue\small%
    \def\and{\unskip,\space}%
    \vskip -2pt\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}
%    \begin{macrocode}
\robustify{\footnote}
%    \end{macrocode}
% Set rule width und correct size
%    \begin{macrocode}
\renewcommand\footnoterule{%
  \vfill\kern-3\p@
  \hrule\@width 5cm
  \kern2.6\p@}
%    \end{macrocode}
%    \begin{macrocode}
\setlength{\parindent}{0pt}
\setlength{\parskip}{8pt}
%    \end{macrocode}
% Set symbols and spacings for itemize
%    \begin{macrocode}
\setlist{topsep=0pt,itemsep=7pt,parsep=-2pt}
\setlist[itemize]{labelsep=0.70cm}%Abstand zur Aufz��hlungsnummer
\setlist[itemize,1]{label=$\bullet$}
\setlist[itemize,2]{topsep=9pt}
%    \end{macrocode}
% and numbered lists
%    \begin{macrocode}
\setlist[enumerate]{labelsep=0.60cm}%Einr��ckung des Aufz��hlungszeichens
\setlist[enumerate,2]{label=\alph*),topsep=9pt}
%    \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}
\def\@bookshorttitle{}
\newcommand{\booktitle}{\@dblarg\@@booktitle}
\def\@@booktitle[#1]#2{\gdef\@bookshorttitle{#1}\gdef\@booktitle{#2}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\booksubtitle}
\newcommand{\booksubtitle}[1]{\gdef\@booksubtitle{#1}}
% \end{macro}
% \begin{macro}{\editor}
%    \begin{macrocode}
\newcommand*{\@editor}{}
\newcommand*{\editor}[1]{\renewcommand{\@editor}{#1}}
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
\newcommand*{\@yearofpublication}{\the\year}
\newcommand*{\yearofpublication}[1]{\renewcommand*{\@yearofpublication}{#1}}
%    \end{macrocode}
% set-up for header and footer
%    \begin{macrocode}
\fancypagestyle{plain}{%
   \fancyhead{} % L��scht alle Kopfzeileneinstellungen
   \fancyhead[RO]{%
      \small\@editor~(Hrsg.):\
      \ifdefempty{\@bookshorttitle}%
         {}%
         {\@bookshorttitle,\hspace{1sp}}%
      \null\linebreak%
      Lecture Notes in Informatics (LNI), Gesellschaft f��r Informatik,
      Bonn~\@yearofpublication%
      \hspace{5pt}\thepage\hspace{0.05cm}%
   }%
   \fancyhead[LE]{%
      \small\@editor~(Hrsg.):\
      \ifdefempty{\@bookshorttitle}%
      {}%
      {\@bookshorttitle,\hspace{1sp}}%
      \linebreak\hspace{0.05cm}\thepage\hspace{5pt} Lecture Notes
      in Informatics (LNI), Gesellschaft f��r Informatik,
      Bonn~\@yearofpublication%
   }%
   \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}\ifanonymous\iflnienglish Anonymized for review\else Anonymisiert f��r Review\fi\else\@authlisthead\fi}
   \fancyfoot{}% L��scht alle Fu��zeileneinstellungen
   \renewcommand{\headrulewidth}{0.4pt} %Linie unter Kopfzeile
\fi%
%    \end{macrocode}
%    \begin{macrocode}
\RequirePackage{url}
\urlstyle{same}
%    \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}
\AddToHook{env/document/begin}[lni/loadhyperref]{%
   \RequirePackage[bookmarks=false]{hyperref}
   \hypersetup{%
         pdfdisplaydoctitle,%
         colorlinks=true,%
         allcolors=black,%
         pdfstartview=Fit,%
   }%
   \pdfstringdefDisableCommands{%
      \def\footnote#1{}%
   }
   \RequirePackage{orcidlink}%
%    \end{macrocode}
% enables correct jumping to figures when referencing
%    \begin{macrocode}
   \RequirePackage[all]{hypcap}%
}%
\DeclareHookRule{env/document/begin}{lni/loadhyperref}{before}{biblatex}
%    \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}
%    \begin{macrocode}
\def\and{\texorpdfstring{\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 write$ %"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 write$ %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 write$ %*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 write$ %"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 write$ %"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 write$ %"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 write$ }
  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 write$ %"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 write$ %"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 write$ %"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>
% % !TeX program = pdflatex
% % !BIB program = biber
% % !TeX spellcheck = de-DE
%%% To write an article in English, please use the option ``english'' in order
%%% to get the correct hyphenation patterns and terms.
%%% \documentclass[english]{class}
%%% for anonymizing an article you can use the ``anonymous'' option.
%%%
%%% Um einen Artikel auf deutsch zu schreiben, gen��gt es die Klasse ohne
%%% Parameter zu laden.
%%% Zur Anonymisierung kann die ``anonymous'' Option genutzt werden.
\documentclass[]{lni}
%%
\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[1,2]{Firstname1 Lastname1}{firstname1.lastname1@affiliation1.org}{0000-0000-0000-0000}
 \author[2]{Firstname2 Lastname2}{firstname2.lastname2@affiliation2.org}{0000-0000-0000-0000}
 \author[3]{Firstname3 Lastname3}{firstname3.lastname3@affiliation1.org}{0000-0000-0000-0000}
 \author[1]{Firstname4 Lastname4}{firstname4.lastname4@affiliation1.org}{0000-0000-0000-0000}%
 \affil[1]{Universit��t 1\\Abteilung\\Stra��e\\Postleitzahl Ort\\Land}
 \affil[2]{University 2 \\Department\\Address\\Country}
 \affil[3]{University 3\\Department\\Address\\Country}
\maketitle

\begin{abstract}
Dies ist eine kurze ��bersicht ��ber das Dokument mit einer L��nge von
70 bis 150 W��rtern. Es sollte ein Absatz sein, der die relevantesten
Aspekte enth��lt.
\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 (im Falle der Nutzung von BibTeX)
%% \bibliography{mybibfile}
%% \printbibliography % im Falle der Nutzung von biblatex
\end{document}
%</template>
%<*exampledebib>
% Encoding: UTF-8

@InProceedings{ABC01,
  author   = {Abraham, N. and Bibel, U. and Corleone, P.},
  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    = {Abel, K. and Bibel, U.},
  address   = {Bonn},
}

@Book{Ez10,
  title     = {The Magic Format -- Your Way to Pretty Books},
  publisher = {Noah \& Sons},
  year      = {2010},
  author    = {Ezgarani, O.},
}

@Article{Gl06,
  author  = {Gl��ck, H. I.},
  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    = {Wasser, K. and Feuer, H. and Erde, R. and Licht, H.},
}

@Book{Wa14b,
  title     = {Ganz neue Essenzen der Informatik im selben Jahr},
  publisher = {Format-Verlag},
  year      = {2014},
  author    = {Wasser, K. and Feuer, H. and Erde, R. and Licht, H.},
}

@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    = {Gl��ck, H. I.},
  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>
% % !TeX program = pdflatex
% % !BIB program = biber
% % !TeX spellcheck = de-DE
\documentclass[biblatex]{lni}
\addbibresource{lni-paper-example-de.bib}

%% Sch��ne Tabellen mittels \toprule, \midrule, \bottomrule
\usepackage{booktabs}

%% Zu Demonstrationszwecken
\usepackage[]{blindtext}

\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[1]{Vorname1 Nachname1}{vorname1.name1@affiliation1.de}{0000-0000-0000-0000}
\author[2]{Vorname2 Nachname2}{vorname2.name2@affiliation2.de}{0000-0000-0000-0000}
\author[1]{Vorname3 Nachname3}{vorname3.name3@affiliation1.de}{0000-0000-0000-0000}
\author[1]{Vorname4 Nachname4}{vorname4.name4@affiliation1.de}{0000-0000-0000-0000}%
\affil[1]{Universit��t\\Abteilung\\Stra��e\\Postleitzahl Ort\\Land}
\affil[2]{University\\Department\\Address\\Country}
\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 Autoren-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 />

Anonymisierungen k��nnen mittels anonymous-Option in der documentclass automatisch vorgenommen werden. Daf��r gibt es das \texttt{anon}-Makro, z.\,B. \anon{Geheim f��r Review} und \anon[nur f��r Review]{nur f��r finale Version}.

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{java-hello-world} zeigt uns ein Beispiel, das mit Hilfe der \texttt{lstlisting}-Umgebung realisiert ist. Ein anderes Beispiel ist \cref{python-hello-world}.

\begin{lstlisting}[caption={Ein Java-Programm}, label=java-hello-world, language=Java]
public class Hello {
  public static void main (String[] args) {
    System.out.println("Hello World!");
  }
}
\end{lstlisting}

\begin{lstlisting}[caption={Ein Python-Programm}, label=python-hello-world, language=Python]
# This program prints Hello, world!

print('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{align} gew��hrleistet.

\begin{equation}
  1=4-3
\end{equation}
und
\begin{align}
  2&=7-5\\
  3&=2-1
\end{align}

%% \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