Skip to content

Commit

Permalink
Merge pull request #171 from gi-ev/158-authors-with-multiple-affiliat…
Browse files Browse the repository at this point in the history
…ions

Add support for multiple affiliations. Closes #158
  • Loading branch information
sieversMartin authored Jul 1, 2024
2 parents 2f6b0fa + c89bf12 commit e5f206d
Show file tree
Hide file tree
Showing 4 changed files with 124 additions and 79 deletions.
7 changes: 6 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/).

## [Unreleased]

## [1.9] - 2024-07-1
### Added
- Support for multiple affiliations

## [1.8.1] - 2024-01-08

### Changed
Expand Down Expand Up @@ -167,7 +171,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/).

First release of the revised files

[Unreleased]: https://github.com/gi-ev/LNI/compare/v1.8.1...HEAD
[Unreleased]: https://github.com/gi-ev/LNI/compare/v1.9...HEAD
[1.9]: https://github.com/gi-ev/LNI/compare/v1.8.1...v1.9
[1.8.1]: https://github.com/gi-ev/LNI/compare/v1.8...v1.8.1
[1.8]: https://github.com/gi-ev/LNI/compare/v1.7...v1.8
[1.7]: https://github.com/gi-ev/LNI/compare/v1.6...v1.7
Expand Down
13 changes: 7 additions & 6 deletions lni-author-template.tex
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,13 @@
\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]{Firstname1 Lastname1}{[email protected]}{0000-0000-0000-0000}
\author[2]{Firstname2 Lastname2}{[email protected]}{0000-0000-0000-0000}
\author[1]{Firstname3 Lastname3}{[email protected]}{0000-0000-0000-0000}
\author[1]{Firstname4 Lastname4}{[email protected]}{0000-0000-0000-0000}%
\affil[1]{Universität\\Abteilung\\Straße\\Postleitzahl Ort\\Land}
\affil[2]{University\\Department\\Address\\Country}
\author[1,2]{Firstname1 Lastname1}{[email protected]}{0000-0000-0000-0000}
\author[2]{Firstname2 Lastname2}{[email protected]}{0000-0000-0000-0000}
\author[3]{Firstname3 Lastname3}{[email protected]}{0000-0000-0000-0000}
\author[1]{Firstname4 Lastname4}{[email protected]}{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}
Expand Down
80 changes: 49 additions & 31 deletions lni.cls
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
%% --------| -----------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
\ProvidesClass{lni}
[2024/01/08 v1.8.1 Official class for submissions to the ``Lecture Notes
[2024/07/01 v1.9 Official class for submissions to the ``Lecture Notes
in Informatics'']
\RequirePackage{iftex}\ifluatex\else\pdfoutput=1\fi%
\def\@clearglobaloption#1{%
Expand Down Expand Up @@ -371,53 +371,71 @@
\renewcommand\Authsep{, }
\renewcommand\Authands{\iflanguage{ngerman}{ und }{, and }}
\renewcommand\Authand{\iflanguage{ngerman}{ und }{ and }}
\renewcommand{\AB@authnote}[1]{$^{\text{\mbox{\normalfont\footnotesize #1}}}$}
\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}%
{\csgappto{@emailsandorcids#1}{%
\if\relax\@currEmail\relax\else\email{\@currEmail}\fi\if\relax\@currOrcid\relax\else,\ \orcid{\@currOrcid}\fi}}%
{\csgappto{@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}%
\ifcsundef{@emailsandorcids\AB@note}{\csgdef{@emailsandorcids\AB@note}{}}{}%
\setcounter{Maxaffil}{0}\fi
\ifnum\value{authors}=0\def\@firstauthor{#2}\fi
\ifnum\value{authors}>1\relax
\@namedef{@sep\number\c@authors}{\Authsep}\fi
\@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}%
\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}%
}%
\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{%
Expand Down
103 changes: 62 additions & 41 deletions lni.dtx
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ This work consists of the file lni.dtx
%<class>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<class>\ProvidesClass{lni}
%<*class>
[2024/01/08 v1.8.1 Official class for submissions to the ``Lecture Notes
[2024/07/01 v1.9 Official class for submissions to the ``Lecture Notes
in Informatics'']
%</class>
%<*driver>
Expand Down Expand Up @@ -286,6 +286,7 @@ This work consists of the file lni.dtx
% \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)}
%
% \GetFileInfo{\jobname.dtx}
% \DoNotIndex{\newcommand,\newenvironment}
Expand Down Expand Up @@ -489,12 +490,13 @@ This work consists of the file lni.dtx
% \cs{affil\oarg{number}\marg{information}} where you can use
% \texttt{\textbackslash\textbackslash} to split the address.
% \begin{examplecode}[label={lst:author}]
% \author[1]{Firstname1 Lastname1}{[email protected]}{0000-0000-0000-0000}
% \author[1,2]{Firstname1 Lastname1}{[email protected]}{0000-0000-0000-0000}
% \author[2]{Firstname2 Lastname2}{[email protected]}{0000-0000-0000-0000}
% \author[1]{Firstname3 Lastname3}{[email protected]}{0000-0000-0000-0000}
% \author[3]{Firstname3 Lastname3}{[email protected]}{0000-0000-0000-0000}
% \author[1]{Firstname4 Lastname4}{[email protected]}{0000-0000-0000-0000}%
% \affil[1]{Universität\\Abteilung\\Straße\\Postleitzahl Ort\\Land}
% \affil[2]{University\\Department\\Address\\Country}
% \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.
Expand Down Expand Up @@ -1149,53 +1151,71 @@ This work consists of the file lni.dtx
\renewcommand\Authsep{, }
\renewcommand\Authands{\iflanguage{ngerman}{ und }{, and }}
\renewcommand\Authand{\iflanguage{ngerman}{ und }{ and }}
\renewcommand{\AB@authnote}[1]{$^{\text{\mbox{\normalfont\footnotesize #1}}}$}
\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}%
{\csgappto{@emailsandorcids#1}{%
\if\relax\@currEmail\relax\else\email{\@currEmail}\fi\if\relax\@currOrcid\relax\else,\ \orcid{\@currOrcid}\fi}}%
{\csgappto{@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}%
\ifcsundef{@emailsandorcids\AB@note}{\csgdef{@emailsandorcids\AB@note}{}}{}%
\setcounter{Maxaffil}{0}\fi
\ifnum\value{authors}=0\def\@firstauthor{#2}\fi
\ifnum\value{authors}>1\relax
\@namedef{@sep\number\c@authors}{\Authsep}\fi
\@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}%
\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}%
}%
\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{%
Expand Down Expand Up @@ -3071,12 +3091,13 @@ EXECUTE {end.bib}
\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]{Firstname1 Lastname1}{[email protected]}{0000-0000-0000-0000}
\author[2]{Firstname2 Lastname2}{[email protected]}{0000-0000-0000-0000}
\author[1]{Firstname3 Lastname3}{[email protected]}{0000-0000-0000-0000}
\author[1]{Firstname4 Lastname4}{[email protected]}{0000-0000-0000-0000}%
\affil[1]{Universität\\Abteilung\\Straße\\Postleitzahl Ort\\Land}
\affil[2]{University\\Department\\Address\\Country}
\author[1,2]{Firstname1 Lastname1}{[email protected]}{0000-0000-0000-0000}
\author[2]{Firstname2 Lastname2}{[email protected]}{0000-0000-0000-0000}
\author[3]{Firstname3 Lastname3}{[email protected]}{0000-0000-0000-0000}
\author[1]{Firstname4 Lastname4}{[email protected]}{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}
Expand Down

0 comments on commit e5f206d

Please sign in to comment.