blob: b8dfc224747748e8d231167b9a4af54d05933e56 [file] [log] [blame]
%% ceurart.cls
%% Copyright 2019--2020 CEUR Workshop Proceedings (CEUR-WS.org)
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
% The latest version of this license is in
% http://www.latex-project.org/lppl.txt
% and version 1.3 or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% This work has the LPPL maintenance status `maintained'.
%
% The Current Maintainer of this work is Dmitry S. Kulyabov.
% The code was originally based on 'CAS Bundle' code.
%
\def\RCSfile{ceurart}%
\def\RCSversion{0.4.0}%
\def\RCSdate{2021/03/18}%
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{\RCSfile}[\RCSdate, \RCSversion: Typesetting articles for CEUR Workshop Proceedings (CEUR-WS.org)]
\RequirePackage{expl3,xparse}
\@ifundefined{regex_match:nnTF}{\RequirePackage{l3regex}}{}
\ExplSyntaxOn
%%
%% switches
%%
\newif\iflongmktitle \longmktitlefalse
%% twocolumn
\newif\ifdc \global\dcfalse
\newif\ifsc \global\sctrue
\newif\ifcasreviewlayout \global\casreviewlayoutfalse
\newif\ifcasfinallayout \global\casfinallayoutfalse
%% enable header and footer
\bool_new:N \g_ceur_hf_bool
\bool_gset_false:N \g_ceur_hf_bool
% \ifhf
% \bool_gset_true:N \g_ceur_hf_bool
% \fi
%% header and footer
% \newif\ifhf
% \global\hffalse
\newcounter{blind}
\setcounter{blind}{0}
% \def\blstr#1{\gdef\@blstr{#1}}
% \def\@blstr{1}
% \newdimen\@bls
% \@bls=\baselineskip
%\newif\if@twocolumn
\DeclareOption{twocolumn}{\global\dctrue \global\scfalse}
\DeclareOption{hf}{\bool_gset_true:N \g_ceur_hf_bool}
% \DeclareOption{hf}{\global\hftrue}
\DeclareOption{singleblind}{\setcounter{blind}{1}}
\DeclareOption{doubleblind}{\setcounter{blind}{2}}
\DeclareOption{longmktitle}{\global\longmktitletrue}
\DeclareOption{final}{\global\casfinallayouttrue}
\DeclareOption{review}{\global\casreviewlayouttrue}
% \ExecuteOptions{a4paper,10pt,oneside,review}
% \ExecuteOptions{a4paper,oneside,10pt,DIV=calc}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{scrartcl}}
\PassOptionsToClass{a4paper,twoside=false}{scrartcl}
\ProcessOptions\relax
\LoadClass{scrartcl}
\KOMAoptions{DIV=10}
\ifdc
\KOMAoptions{fontsize=9pt}
\else
\KOMAoptions{fontsize=11pt}
\fi
\RequirePackage{graphicx}
\RequirePackage{amsmath,amsfonts,amssymb}
\allowdisplaybreaks
\RequirePackage{etoolbox,balance}
\RequirePackage{booktabs,makecell,multirow,array,colortbl,dcolumn,stfloats}
\RequirePackage{xspace,xstring}
\RequirePackage{footmisc}
\RequirePackage[svgnames,dvipsnames]{xcolor}
\RequirePackage{iftex}
\RequirePackage{microtype}
%% PDF/A support
\ifpdftex
\RequirePackage{cmap}
\fi
\bool_new:N \g_ceur_pdfx_bool
\bool_gset_false:N \g_ceur_pdfx_bool
\file_if_exist:nTF { pdfx.sty } {%
\RequirePackage[useBOM,pdf17,a-3u]{pdfx}
\bool_gset_true:N \g_ceur_pdfx_bool
}{%
\RequirePackage[unicode]{hyperref}
}
\hypersetup{%
colorlinks,
bookmarksnumbered,
pdfencoding=unicode,
allcolors=DarkSlateGrey
}
\pdfstringdefDisableCommands{%
\def\addtocounter#1#2{}%
\def\unskip{}%
\def\textbullet{- }%
\def\textrightarrow{ -> }%
\def\footnotemark{}%
}
\urlstyle{rm}
\colorlet{scolor}{black}
\colorlet{hscolor}{DarkSlateGrey}
% \AtEndDocument{\hypersetup
% {pdftitle={\csuse{__short_title:}},
% pdfauthor={\csuse{__short_authors:}}}}
\let\comma\@empty
\let\tnotesep\@empty
\let\@title\@empty
%
% Load Common items
%
%%
%%
%%
%%
%% Bools
%%
%%
%% Bells and Whistles
%%
\bool_new:N \g_ceur_nologo_bool
\bool_gset_false:N \g_ceur_nologo_bool
\file_if_exist:nTF { fontawesome5.sty } {%
\RequirePackage{fontawesome5}
% We need orcid icon
\@ifpackagelater{fontawesome5}{2020/01/17}{%
\bool_gset_false:N \g_ceur_nologo_bool
}{%
\bool_gset_true:N \g_ceur_nologo_bool
}
}{%
\bool_gset_true:N \g_ceur_nologo_bool
}
%%
%% PDF/A
%%
%% allocate a write stream
\iow_new:N \g_xmpdata_output_iow
\iow_open:Nn \g_xmpdata_output_iow { \c_sys_jobname_str .xmpdata }
%% User interface
\NewDocumentCommand{\xmpdatawrite}{ m m } {
\xmpdata_write:n { \iow_char:N \\ #1 \iow_char:N \{ #2 \iow_char:N \} }
}
%% Inner function
\cs_new_protected:Npn \xmpdata_write:n #1
{
\iow_now:Nx \g_xmpdata_output_iow { #1 }
}
%%
%% Utils
%%
%% Workaround for unwanted '.pdf' to path (provided by hyperref)
%% https://tex.stackexchange.com/questions/154335/href-adds-unwanted-pdf-to-path-provided
\providecommand*{\hrefurl}{\hyper@normalise\hrefurl@}
\providecommand*{\hrefurl@}[2]{\hyper@linkurl{#2}{#1}}
%%
%%
%%
% \newcommand\ceurConference[4][]{%
% \gdef\ceurConference@shortname{#1}%
% \gdef\ceurConference@name{#2}%
% \gdef\ceurConference@date{#3}%
% \gdef\ceurConference@venue{#4}%
% \ifx\ceurConference@shortname\@empty
% \gdef\ceurConference@shortname{#2}%
% \fi
% }
\DeclareRobustCommand\conference[1]{%
\gdef\ceurConference@name{#1}%
}
%
% Specific to Single Column
%
\RenewDocumentCommand \maketitle {} {
\nonumnote{\itshape \ceurConference@name}
\logonote{\@copyrightLine}
\logonote{\@ceurLogoLine}
% \ifbool { usecasgrabsbox }
% {
% \setcounter{page}{0}
% \thispagestyle{empty}
% \unvbox\casgrabsbox
% } { }
% \pagebreak
% \ifbool { usecashlsbox }
% {
% \setcounter{page}{0}
% \thispagestyle{empty}
% \unvbox\casauhlbox
% } { }
% \pagebreak
\thispagestyle{plain}
\xdef\firstpage{\thepage}
% \thispagestyle{first}
% \pagestyle{standard}
\ifbool{longmktitle}
{
\LongMaketitleBox
\ProcessLongTitleBox
}
{
\ifbool{dc}
{ \twocolumn[\MaketitleBox] }
{ \MaketitleBox }
\printFirstPageNotes
}
\normalcolor \normalfont
\setcounter{footnote}{\int_use:N \g_ceur_fnote_int}
\renewcommand\thefootnote{\arabic{footnote}}
\gdef\@pdfauthor{\infoauthors}
% \gdef\@pdfsubject{Complex ~CEUR ~Content}
%% PDF/A
% List of supported metadata fields
% General information:
% \Author - the document's human author. Separate multiple authors with \sep.
% \Title - the document's title.
% \Keywords - list of keywords, separated with \sep.
% \Subject - the abstract.
% \Org - publishers.
% Copyright information:
% \Copyright - a copyright statement.
% \CopyrightURL - location of a web page describing the owner and/or rights statement for this document.
% \Copyrighted - 'True' if the document is copyrighted, and
% 'False' if it isn't. This is automatically set to 'True' if either
% \Copyright or \CopyrightURL is specified, but can be overridden.
% Publication information:
% \PublicationType - The type of publication. If defined, must be
% one of book, catalog, feed, journal, magazine,
% manual, newsletter, pamphlet. This is
% automatically set to "journal" if \Journaltitle
% is specified, but can be overridden.
% \Journaltitle - The title of the journal in which the document
% was published.
% \Journalnumber - The ISSN for the publication in which the
% document was published.
% \Volume - Journal volume.
% \Issue - Journal issue/number.
% \Firstpage - First page number of the published version of
% the document.
% \Lastpage - Last page number of the published version of
% the document.
% \Doi - Digital Object Identifier (DOI) for the
% document, without the leading "doi:".
% \CoverDisplayDate - Date on the cover of the journal issue, as a
% human-readable text string.
% \CoverDate - Date on the cover of the journal issue, in a
% format suitable for storing in a database field
% with a 'date' data type.
\bool_if:NTF \g_ceur_pdfx_bool
{
\xmpdatawrite{Title}{\casprelimstitle}
\xmpdatawrite{Author}{\pdfxauthors}
\xmpdatawrite{Subject}{CEUR~Workshop~Proceedings~(CEUR-WS.org)}
\ifx\@copyrightclause\@empty\else
\xmpdatawrite{Copyright}{\iow_char:N \\ copyright\ \@copyrightyear\ \@copyrightclause}
\xmpdatawrite{CopyrightURL}{https://creativecommons.org/licenses/by/4.0}
\fi
\xmpdatawrite{Journaltitle}{CEUR~Workshop~Proceedings}
\xmpdatawrite{Journalnumber}{1613-0073}
\bool_if:NTF \g_ceur_hf_bool {
\xmpdatawrite{Firstpage}{\firstpage}
\xmpdatawrite{Lastpage}{\lastpage}
}{ }
}{
\hypersetup{%
pdfcreator={ceurart.cls},
% pdfproducer={pdfTeX;},
% pdftitle={\csuse{__short_title:}},
% pdfauthor={\csuse{__short_authors:}},
% pdfauthor={\csuse{__authors:}},
% pdftitle={\@title},
pdfsubject={CEUR~Workshop~Proceedings~(CEUR-WS.org)},
% pdfkeywords={\@keywords},
linkcolor={hscolor},
urlcolor={hscolor},
citecolor={hscolor},
filecolor={hscolor},
menucolor={hscolor},
}
}
}
% pdfcreator={ceurart.cls},
% % pdfproducer={pdfTeX;},
% % pdftitle={\csuse{__short_title:}},
% % pdfauthor={\csuse{__short_authors:}},
% % pdfauthor={\csuse{__authors:}},
% % pdftitle={\@title},
% pdfsubject={CEUR Workshop Proceedings (CEUR-WS.org)},
%
% Front matter macros
%
% The front matter macros are derived/adopted from stm-prelims.sty
% written by CV Radhakrishnan <cvr@cvr.cc> and copyrighted by him.
% Usage of those macros and methods are gratefully acknowledged.
%
\keys_define:nn { ceur / title } {
mode .choice: ,
mode / title .meta:n = {
type = title ,
size = \LARGE ,
% size = \huge ,
% shape = \upshape ,
shape = \sffamily ,
% weight = \mdseries ,
weight = \bfseries ,
color = black ,
before = 0pt ,
after = 0pt ,
align = \raggedright ,
} ,
mode / alt .meta:n = {
type = alt ,
size = \large ,
shape = \upshape ,
weight = \mdseries ,
color = black ,
before = 6pt ,
after = 0pt ,
align = \raggedright ,
} ,
mode / sub .meta:n = {
type = sub ,
size = \large ,
shape = \upshape ,
weight = \mdseries ,
color = black!80 ,
before = 6pt ,
after = 0pt ,
align = \raggedright ,
} ,
mode / trans .meta:n = {
type = trans ,
size = \normalsize ,
shape = \upshape ,
weight = \mdseries ,
color = black!60 ,
before = 6pt ,
after = 0pt ,
align = \raggedright ,
} ,
mode / transsub .meta:n = {
type = transsub ,
size = \small ,
shape = \upshape ,
weight = \mdseries ,
color = black!50 ,
before = 6pt ,
after = 0pt ,
align = \raggedright ,
} ,
mode / ascii .meta:n = {
type = ascii ,
size = \small\ttfamily ,
shape = \upshape ,
weight = \mdseries ,
color = black ,
before = 12pt ,
after = 0pt ,
align = \raggedright ,
} ,
type .tl_set:N = \l_ceur_title_type_tl ,
size .tl_set:N = \l_ceur_title_size_tl ,
shape .tl_set:N = \l_ceur_title_shape_tl ,
weight .tl_set:N = \l_ceur_title_weight_tl ,
before .dim_set:N = \l_ceur_title_before_dim ,
after .dim_set:N = \l_ceur_title_after_dim ,
align .tl_set:N = \l_ceur_title_align_tl ,
color .tl_set:N = \l_ceur_title_color_tl ,
}
\NewDocumentCommand \processTmarks { } {
\cs_if_free:cTF { mark@title }
{ \ignorespaces }
{ \tl_set:Nx \l_tmpa_tl { \cs:w mark@title\cs_end: }
\clist_map_inline:cn { mark@title }
{
\str_case:nn { ##1 }
{
{ 1 } { $^\star$ }
{ 2 } { $^{,\star\star}$ }
{ 3 } { $^{,\star\star\star}$ }
}
}
}
}
\RenewDocumentCommand \title { O{mode = title} m } {
\pdfstringdef \@pdftitle { #2 }
\csgdef { casprelimstitle } { #2 }
\keys_set:nn { ceur / title } { #1 }
\tl_if_empty:NTF \__short_title: {
\cs_gset:Nn \__short_title: { #2 }
}{ }
\seq_gput_right:Nn \g_ceur_title_seq {
\keys_set:nn { ceur / title } { #1 }
% \iow_term:n { MODE:~\l_ceur_title_mode_tl ~ ~ [#1]}
\par \vskip \l_ceur_title_before_dim
\l_ceur_title_align_tl
\l_ceur_title_size_tl
\l_ceur_title_shape_tl
\l_ceur_title_weight_tl
\color { \l_ceur_title_color_tl }
#2
\tl_set:Nn \l_tmpa_tl { title }
\tl_if_eq:NNTF \l_ceur_title_type_tl \l_tmpa_tl
{ \processTmarks } { }
\par \vskip \l_ceur_title_after_dim
\normalcolor \normalsize \normalfont
}
}
% \gappto\usestmtitle{#1}%
\renewcommand \@title { \seq_use:Nn \g_ceur_title_seq { } }
\NewDocumentCommand \wrAun { m } % unexpanded write to aux
{ \iow_now:Nn \@auxout { #1 } }
\NewDocumentCommand \wrAux { m } % expanded write to aux
{ \iow_now:Nx \@auxout { #1 } }
\NewDocumentCommand \wrShipAux { m } % expanded write at shipout
{ \iow_shipout:Nx \@auxout { #1 } }
\NewDocumentCommand \wrShipAun { m } % unexpanded write at shipout
{ \iow_shipout:Nn \@auxout { #1 } }
\NewDocumentCommand \ceurLabel { m } {
\@bsphack \wrAux
{ \token_to_str:N \NewLabel { #1 }
{ \@currentlabel }
} \@esphack
}
\NewDocumentCommand \NewLabel { m m } {
\cs_if_free:cTF { X@#1: }
{ \cs_new:cx { X@#1: } { #2 } }
{ \cs_set:cx { X@#1: } { #2 } }
}
\NewDocumentCommand \ceurRef { m } {
\cs_if_free:cTF { X@#1: }
{ 0 } {\use:c {X@#1:} }
}
\seq_clear_new:N \l_fnmk_seq
\NewDocumentCommand \processFnRef { m } {
\seq_clear:N \l_fnmk_seq
\clist_map_inline:nn { #1 }
{ \seq_put_right:Nx \l_fnmk_seq
{\cs_if_free:cTF { X@##1: } {0} { \use:c {X@##1:} }}
}
}
\NewDocumentCommand \fnmark { O{} } {
\writemarks { fnau\theau@ } { #1 }
}
\NewDocumentCommand \fnref { m } {
\processFnRef { #1 }
\wrAux { \token_to_str:N \csxdef {mark@fnau\theau@}
{ \seq_use:Nn \l_fnmk_seq { , } } }
}
\NewDocumentCommand \corref { m } {
\str_set:Nx \l_tmpa_str { \ceurRef { #1 } }
\wrAux { \token_to_str:N \csxdef { mark@corau\theau@ }
{
\cs_if_free:cTF { X@#1: } {0} { \use:c {X@#1:} }
}
}
}
\NewDocumentCommand \cormark { O{} } {
\@cormarktrue
\writemarks {corau\theau@} { #1 }
}
\seq_new:N \l_ceur_au_seq
\seq_new:N \l_ceur_au_sn_seq
\seq_new:N \l_ceur_au_fn_seq
\seq_new:N \l_ceur_au_ead_seq
\seq_new:N \l_ceur_au_orcid_seq
\seq_new:N \l_ceur_au_email_seq
\seq_new:N \l_ceur_au_url_seq
\seq_new:N \l_ceur_au_contrib_role_seq
\NewDocumentCommand \parsename { m } {
\seq_set_split:Nnn \l_ceur_au_seq { ~ } { #1 }
\seq_pop_right:NN \l_ceur_au_seq \l_ceur_au_sn_seq
\seq_map_inline:Nn \l_ceur_au_seq
{ \seq_put_right:Nx \l_ceur_au_ead_seq
{ \tl_head:n { #1 }. }
}
}
\NewDocumentCommand \invparsename { m } {
\seq_set_split:Nnn \l_ceur_au_seq { ~ } { #1 }
\seq_pop_left:NN \l_ceur_au_seq \l_ceur_au_sn_seq
\seq_map_inline:Nn \l_ceur_au_seq
{ \seq_put_right:Nx \l_ceur_au_ead_seq
{ \tl_head:n { #1 }. }
}
}
\NewDocumentCommand \surname {} {
\l_ceur_au_sn_seq
}
\NewDocumentCommand \firstname {} {
\seq_use:Nn \l_ceur_au_seq { \no_break_space: }
}
\NewDocumentCommand \eadauthor {} {
\seq_map_inline:Nn \l_ceur_au_seq
{
\regex_match:nnTF { \. } { ##1 }
{ ##1 \, }
{ \tl_head:n {##1}. \, }
} {\,} \l_ceur_au_sn_seq
}
\cs_set_eq:NN \shortauthor \eadauthor
\seq_clear_new:N \l_affmk_seq
\NewDocumentCommand \processAffRef { m }
{
\seq_clear:N \l_affmk_seq
\clist_map_inline:nn { #1 }
{
\seq_put_right:Nx \l_affmk_seq
{\ceurRef{##1}}
}
}
\NewDocumentCommand \processAffNum { m }
{
\seq_clear:N \l_affmk_seq
\clist_map_inline:nn { #1 }
{
\seq_put_right:Nn \l_affmk_seq
{ \int_to_arabic:n {##1} }
}
}
\NewDocumentCommand \listAff { }
{
\tl_if_blank:nTF { \l_affmk_seq }
{ \tl_gset:Nn \g_ceur_comma_tl { 0 } }
{
\seq_use:Nn \l_affmk_seq { , }
\tex_def:D \sep{\unskip,}
}
}
\NewDocumentCommand \ead { O{} m }
{
\tl_if_empty:nTF { #1 } { \@ead {#2} } { \@uad[#1]{#2} }
}
\NewDocumentCommand \eadsep { } { }
\int_new:N \g_ead_int
\seq_new:N \g_ceur_ead_seq
\int_new:N \g_uad_int
\int_new:N \g_orcid_int
\seq_new:N \g_ceur_uad_seq
\seq_new:N \g_ceur_orcid_seq
\seq_new:N \g_ceur_contrib_role_seq
\newcommand\theead { \int_use:N \g_ead_int }
\NewDocumentCommand \@uad { O{} m }
{
\group_begin:
\wrAux { \token_to_str:N \urlauthor
{ \exp_not:n {#2}}{\the\@eadauthor}}%
\group_end:
}
\NewDocumentCommand \urlauthor { m m } {
\int_gincr:N \g_uad_int
\seq_gput_right:Nn \g_ceur_uad_seq
{
{ %\ttfamily \tl_to_str:n
\url{ #1 } }
\parsename { #2 }
\space(\eadauthor)
}
}
\NewDocumentCommand \@stmuads { }
{ \seq_use:Nn \g_ceur_uad_seq { ;~ } }
\NewDocumentCommand \@ead { m }
{
\group_begin:
\wrAux { \token_to_str:N \emailauthor
{ \exp_not:n { #1 }}{ \the\@eadauthor }}
\group_end:
}
\newtoks \@eadauthor
\newbool{@cormark}
\NewDocumentCommand \emailauthor { m m }
{
\int_gincr:N \g_ead_int
\seq_gput_right:Nn \g_ceur_ead_seq
{
% { \ttfamily \tl_to_str:n { #1 } }
{ \href {mailto: #1 } { #1 } }
\parsename { #2 }
\space(\eadauthor)%
}
}
\NewDocumentCommand \@elseads { }
{
\seq_use:Nn \g_ceur_ead_seq { ;~ }
}
\NewDocumentCommand \printemails { } {
\group_begin:
\int_compare:nNnTF { \int_use:N \g_ead_int } > { 0 } {
\tex_let:D \thefootnote \relax \footnotetext {
\raggedright
\hspace*{-\parindent}
% \hspace*{-\labelsep}
\hspace*{-\footnotemargin}
\bool_if:NTF \g_ceur_nologo_bool {
\int_compare:nTF { \g_ead_int = 1 }
{ \textsc{email:\c_space_token} }
{ \textsc{email:\c_space_token} }
}
{ \faIcon[regular]{envelope-open}\c_space_token }
\seq_use:Nn \g_ceur_ead_seq { ;~ }
}
} { }
\group_end:
}
\NewDocumentCommand \printurls { } {
\group_begin:
\int_compare:nTF { \g_uad_int > 0 } {
\tex_let:D \thefootnote \relax \footnotetext {
\raggedright
\hspace*{-\parindent}
% \hspace*{-\labelsep}
\hspace*{-\footnotemargin}
\bool_if:NTF \g_ceur_nologo_bool
{ \textsc{url:\c_space_token} }
{ \faIcon{globe}\c_space_token }
\seq_use:Nn \g_ceur_uad_seq { ;~ }
}
} { }
\group_end:
}
%%
%% orcid
%%
\NewDocumentCommand \orcidauthor { m m } {
\int_gincr:N \g_orcid_int
\seq_gput_right:Nn \g_ceur_orcid_seq {
% { \ttfamily \tl_to_str:n { #1 } }
{ \hrefurl { https://orcid.org/ #1 } { #1 } }
\parsename{#2}
\space(\eadauthor)
}
}
\NewDocumentCommand \printorcid { } {
\group_begin:
\int_compare:nTF { \g_orcid_int > 0 } {
\tex_let:D \thefootnote \relax \footnotetext {
\raggedright
\hspace*{-\parindent}
% \hspace*{-\labelsep}
\hspace*{-\footnotemargin}
\bool_if:NTF \g_ceur_nologo_bool
{ \textsc{orcid:\c_space_token} }
{ \faIcon{orcid}\c_space_token }
\seq_use:Nn \g_ceur_orcid_seq { ;~ }
}
} { }
\group_end:
}
%
% Contrib Role
%
\seq_gclear_new:N \g_ceur_credits_seq
\NewDocumentCommand \ContribRole { m }
{
\wrAux { \token_to_str:N \creditauthor
{ #1 } { \the\@eadauthor } }
}
\NewDocumentCommand \creditauthor { m m }
{
\seq_gput_right:Nx \g_ceur_credits_seq
{ { \exp_not:N\bfseries #2 :}\space #1 }
}
\cs_set_eq:NN \credit \ContribRole
\NewDocumentCommand \printcredits { }
{
\seq_if_empty:NF \g_ceur_credits_seq
{
\section*{CRediT ~authorship ~contribution ~statement}
\seq_use:Nn \g_ceur_credits_seq { .~ }.
}
}
\NewDocumentCommand \writemarks { m m }
{ \wrAux { \token_to_str:N \csgdef{mark@#1}{#2} } }
\seq_new:N \g_ceur_title_seq
\NewDocumentCommand \tnotemark { O{} }
{ \writemarks { title } { #1 } }
\NewDocumentCommand \@tnoteref { m }
{ \int_set:Nn \l_tmpa_int { 0 }
\clist_map_inline:nn { #1 }
{
% \msg_term:n { ##1 .. [\cs:w X@##1:\cs_end:] }
\cs_if_free:cTF { X@##1: }
{ \csdef{X@##1:}{0} }
{
\tl_set:Nx \l_tmpa_tl { \cs:w X@##1:\cs_end: }
\int_case:nn { \l_tmpa_tl }
{
{ 1 } { $^\star$ }
{ 2 } { $^{,\star\star}$ }
{ 3 } { $^{,\star\star\star}$ }
}
}
}
}
\seq_new:N \g_ceur_tnote_seq
\int_new:N \g_ceur_tnote_int
\NewDocumentCommand \tnotetext { O{} m }
{
\tl_if_head_eq_catcode:nNTF { #1 } a
{
\msg_term:n { [TNOTE:~alpha] }%
\seq_gput_right:Nn \g_ceur_tnote_seq
{ \int_incr:N \g_ceur_tnote_int
\str_set:Nx \@currentlabel { \int_use:N \g_ceur_tnote_int }
\ceurLabel { #1 }
\renewcommand\thefootnote
{ \int_case:nn { \g_ceur_tnote_int }
{
{ 1 } { $^\star$ }
{ 2 } { $^{\star\star}$ }
{ 3 } { $^{\star\star\star}$ }
}
}
\footnotetext { #2 }
}
}
{
\msg_term:n { [TNOTE:~Number] }
\seq_gput_right:Nn \g_ceur_tnote_seq
{
\int_set:Nn \l_tmpa_int { #1 }
\renewcommand\thefootnote
{ \int_case:nn { \l_tmpa_int }
{
{ 1 } { $^\star$ }
{ 2 } { $^{\star\star}$ }
{ 3 } { $^{\star\star\star}$ }
}
}
\footnotetext { #2 }
}
}
}
\newcommand \printtnotes { \seq_use:Nn \g_ceur_tnote_seq { \par } }
\seq_new:N \g_ceur_nonumnote_seq
\NewDocumentCommand \nonumnote { m }
{
\group_begin:
\seq_gput_right:Nn \g_ceur_nonumnote_seq
{
\tex_def:D \thefootnote { }
\footnotetext{%
\raggedright
\hspace*{-\parindent}
% \hspace*{-\labelsep}
\hspace*{-\footnotemargin}
#1}
}
\group_end:
}
\newcommand \printnonumnotes { \seq_use:Nn \g_ceur_nonumnote_seq { \par } }
\seq_new:N \g_ceur_fnote_seq
\int_new:N \g_ceur_fnote_int
\NewDocumentCommand \fntext { O{} m }
{
\tl_if_head_eq_catcode:nNTF { #1 } a
{
\msg_term:n { [FN:~alpha] }%
\seq_gput_right:Nn \g_ceur_fnote_seq
{ \int_incr:N \g_ceur_fnote_int
\str_set:Nx \@currentlabel { \int_use:N \g_ceur_fnote_int }
\ceurLabel { #1 }
\tex_def:D \thefootnote { \int_use:N \g_ceur_fnote_int }
\footnotetext { #2 }
}
}
{
\msg_term:n { [FN:~Number] }
\seq_gput_right:Nn \g_ceur_fnote_seq
{
\int_set:Nn \l_tmpa_int { #1 }
\tex_def:D \thefootnote { \int_use:N \l_tmpa_int }
\footnotetext { #2 }
}
}
}
\newcommand \printfnotes { \seq_use:Nn \g_ceur_fnote_seq { \par } }
\seq_new:N \g_ceur_cor_seq
\int_new:N \g_ceur_cor_int
\NewDocumentCommand \cortext { O{} m }
{
\tl_if_head_eq_catcode:nNTF { #1 } a
{
\msg_term:n { [COR:~alpha] }%
\seq_gput_right:Nn \g_ceur_cor_seq
{ \int_incr:N \g_ceur_cor_int
\str_set:Nx \@currentlabel { \int_use:N \g_ceur_cor_int }
\ceurLabel { #1 }
\tex_def:D \thefootnote
{ \int_case:nn { \g_ceur_cor_int }
{
{ 1 } { $\ast$ }
{ 2 } { $\ast\!\ast$ }
{ 3 } { $\ast\!\ast\!\ast$ }
}
}
\footnotetext { #2 }
}
}
{
\msg_term:n { [COR:~Number] }
\seq_gput_right:Nn \g_ceur_cor_seq
{
\int_set:Nn \l_tmpa_int { #1 }
\tex_def:D \thefootnote
{ \int_case:nn { \l_tmpa_int }
{
{ 1 } { $\ast$ }
{ 2 } { $\ast\!\ast$ }
{ 3 } { $\ast\!\ast\!\ast$ }
}
}
\footnotetext { #2 }
}
}
}
\newcommand \printcornotes { \seq_use:Nn \g_ceur_cor_seq { \par } }
\NewDocumentCommand \process@marks { }
{
\cs_if_free:cTF { mark@corau\theauthor }
{ \ignorespaces }
{ \str_set:Nx \l_tmpa_str { \use:c{ mark@corau\theauthor } }
\int_case:nn { \l_tmpa_str }
{
{ 1 } { \sep$\ast$ }
{ 2 } { \sep$\ast\ast$ }
{ 3 } { \sep$\ast\!\ast\!\ast$ }
}
\tex_def:D \sep{\unskip,}
}
\cs_if_free:cTF { mark@fnau\theauthor }
{ \ignorespaces }
{ \sep\use:c { mark@fnau\theauthor }
\tex_def:D \sep{\unskip,}
}
}
%%
%% Author macros
%%
\seq_new:c { g_ceur_au0_seq }
\seq_new:c { g_ceur_clau0_seq }
\int_new:N \g_ceur_au_int
\int_new:N \g_ceur_aau_int
\NewDocumentCommand \ResetMarks { } {
\keys_set:nn { ceur / author } {
auid = {} ,
bioid = {} ,
alt = {} ,
style = { normal } ,
prefix = {} ,
suffix = {} ,
degree = {} ,
role = {} ,
orcid = {} ,
collab = { false } ,
type = { author } ,
anon = { false } ,
deceased = { false } ,
twitter = {} ,
facebook = {} ,
linkedin = {} ,
plus = {} ,
gplus = {} ,
email = {} ,
url = {} ,
}
\tex_gdef:D \sep{}
\tex_gdef:D \ceur@corref{}
\tex_gdef:D \@fnmark {}
}
\int_new:N \l_autype_int
\keys_define:nn { ceur / author } {
auid .tl_set:N = \l_ceur_au_id_tl ,
bioid .tl_set:N = \l_ceur_au_bioid_tl ,
alt .tl_set:N = \l_ceur_au_alt_tl ,
style .tl_set:N = \l_ceur_au_style_tl ,
prefix .tl_set:N = \l_ceur_au_prefix_tl ,
suffix .tl_set:N = \l_ceur_au_suffix_tl ,
degree .tl_set:N = \l_ceur_au_degree_tl ,
role .tl_set:N = \l_ceur_au_role_tl ,
orcid .tl_set:N = \l_ceur_au_orcid_tl ,
collab .bool_set:N = \l_ceur_au_collab_bool ,
type .multichoice: ,
type/author .code:n = { \int_set:Nn \l_autype_int { 0 } },
type/editor .code:n = { \int_set:Nn \l_autype_int { 1 } },
type/collab .code:n = { \int_set:Nn \l_autype_int { 2 } },
type/anon .code:n = { \int_set:Nn \l_autype_int { 3 } },
% type/collab .bool_set:N = \l_ceur_au_collab_bool ,
% type/anon .bool_set:N = \l_ceur_au_anon_bool ,
anon .bool_set:N = \l_ceur_au_anon_bool ,
deceased .bool_set:N = \l_ceur_au_deceased_bool ,
twitter .tl_set:N = \l_ceur_au_twitter_tl ,
facebook .tl_set:N = \l_ceur_au_facebook_tl ,
linkedin .tl_set:N = \l_ceur_au_linkedin_tl ,
plus .tl_set:N = \l_ceur_au_gplus_tl ,
gplus .tl_set:N = \l_ceur_au_gplus_tl ,
email .tl_set:N = \l_ceur_au_email_tl ,
%% prevent URL expansion (due ~ sign)
url .code:n = { \tl_set:Nn \l_ceur_au_url_tl { \exp_not:n { #1 } } },
}
\keys_set:nn { ceur / author } {
auid = {} ,
bioid = {} ,
alt = {} ,
style = { normal } ,
prefix = {} ,
suffix = {} ,
degree = {} ,
role = {} ,
orcid = {} ,
collab = { false } ,
type = { author } ,
anon = { false } ,
deceased = { false } ,
twitter = {} ,
facebook = {} ,
linkedin = {} ,
plus = {} ,
gplus = {} ,
email = {} ,
url = {} ,
}
\keys_define:nn { ceur / ausetup } {
type .choice: ,
type / authors .meta:n = {
size = \large ,
shape = \upshape ,
weight = \mdseries ,
before = \bigskipamount ,
after = 0pt ,
align = \raggedright ,
color = black ,
lskip = 0pt ,
rskip = 0pt ,
} ,
type / collaboration .meta:n = {
size = \Large ,
shape = \upshape ,
weight = \mdseries ,
before = \bigskipamount ,
after = 0pt ,
align = \raggedright ,
color = black ,
lskip = 0pt ,
rskip = 0pt ,
} ,
size .tl_set:N = \l_ceur_augroup_size_tl ,
shape .tl_set:N = \l_ceur_augroup_shape_tl ,
weight .tl_set:N = \l_ceur_augroup_weight_tl ,
before .dim_set:N = \l_ceur_augroup_before_dim ,
after .dim_set:N = \l_ceur_augroup_after_dim ,
align .tl_set:N = \l_ceur_augroup_align_tl ,
color .tl_set:N = \l_ceur_augroup_color_tl ,
lskip .dim_set:N = \l_ceur_augroup_lskip_tl ,
rskip .dim_set:N = \l_ceur_augroup_rskip_tl ,
}
\DeclareDocumentCommand \ceurAuthorSetup { m } {
\keys_set:nn { ceur / ausetup } { #1 }
}
\DeclareDocumentCommand \ceurausetup { m } {
\tl_set:Nn \l_ceur_au_setup_tl {
\keys_set:nn { ceur / ausetup } { #1 } }
}
\DeclareDocumentCommand \ceurclbsetup { m } {
\tl_set:Nn \l_ceur_clb_setup_tl {
\keys_set:nn { ceur / ausetup } { #1 } }
}
\ceurausetup { }
\ceurclbsetup { }
\seq_new:N \g_ceur_maltese_seq
\seq_new:N \g_ceur_facebook_seq
\seq_new:N \g_ceur_twitter_seq
\seq_new:N \g_ceur_gplus_seq
\seq_new:N \g_ceur_linkedin_seq
\NewDocumentCommand \twitterauthor { m m } {
\seq_gput_right:Nn \g_ceur_twitter_seq {
\parsename { #2 }
\url{https://twitter.com/\tl_to_str:n{#1}}\space(\eadauthor)
}
}
\NewDocumentCommand \facebookauthor { m m }
{
\seq_gput_right:Nn \g_ceur_facebook_seq
{
\parsename { #2 }
\url{https://www.facebook.com/\tl_to_str:n{#1}}\space(\eadauthor) %
}
}
\NewDocumentCommand \gplusauthor { m m }
{
\seq_gput_right:Nn \g_ceur_gplus_seq
{
\parsename { #2 }
\url{https://plus.google.com/\tl_to_str:n{#1}}\space(\eadauthor)%
}
}
\NewDocumentCommand \linkedinauthor { m m }
{
\seq_gput_right:Nn \g_ceur_linkedin_seq
{
\parsename { #2 }
\url{https://www.linkedin.com/profile/view?id=\tl_to_str:n{#1}}%
\space(\eadauthor)
}
}
\NewDocumentCommand \printmaltese { }
{
\seq_use:Nn { \g_ceur_maltese_seq } { }
}
\NewDocumentCommand \printfacebook { }
{
\seq_if_empty:NTF \g_ceur_facebook_seq { }
{
\tex_def:D \thefootnote{}
\footnotetext
{
\bool_if:NTF \g_ceur_nologo_bool
{ Facebook:\c_space_token }
{ \faIcon{facebook-f}\c_space_token }
\seq_use:Nn \g_ceur_facebook_seq {,\c_space_token }
}
}
}
\NewDocumentCommand \printtwitter { }
{
\seq_if_empty:NTF \g_ceur_twitter_seq { }
{
\tex_def:D \thefootnote{}
\footnotetext
{
\bool_if:NTF \g_ceur_nologo_bool
{ Twitter:\c_space_token }
{ \faIcon{twitter}\c_space_token }
\seq_use:Nn \g_ceur_twitter_seq {,\c_space_token }
}
}
}
\NewDocumentCommand \printgplus { }
{
\seq_if_empty:NTF \g_ceur_gplus_seq { }
{
\tex_def:D \thefootnote{}
\footnotetext
{
\bool_if:NTF \g_ceur_nologo_bool
{ Google+:\c_space_token }
{ \faIcon{google-plus-g}\c_space_token }
\seq_use:Nn \g_ceur_gplus_seq {,\c_space_token }
}
}
}
\NewDocumentCommand \printlinkedin { }
{
\seq_if_empty:NTF \g_ceur_linkedin_seq { }
{
\tex_def:D \thefootnote{}
\footnotetext
{
\bool_if:NTF \g_ceur_nologo_bool
{ LinkedIn:\c_space_token }
{ \faIcon{linkedin-in}\c_space_token }
\seq_use:Nn \g_ceur_linkedin_seq {,\c_space_token }
}
}
}
\seq_new:N \g_ceur_prelimsau_seq
\csxdef { infoauthors } { }
\csgdef { pdfxauthors } { }
\csgdef { __short_authors_tmp } { }
% Number of person in short authors list
\int_new:N \g_num_short_authors
\g_num_short_authors = 1
\cs_new:Nn \no_break_space: { \nobreak{~} \penalty 10000 }
\RenewDocumentCommand \author { O{} m O{} } {
\ResetMarks
\tl_if_blank:nTF { #3 } { }
{ \keys_set:nn { ceur / author } { #3 } }
%
\int_gincr:N \g_ceur_au_int
\tex_gdef:D \theau@ { \int_use:N \g_ceur_au_int }
%
\seq_gput_right:Nn \g_ceur_prelimsau_seq { #2 }
\bool_if:NTF \l_ceur_au_collab_bool
{ \seq_gput_right:cn { g_ceur_clau\int_use:N \g_ceur_augr_int _seq } }
{ \seq_gput_right:cn { g_ceur_au\int_use:N \g_ceur_augr_int _seq } }
{
\int_gincr:N \g_ceur_aau_int
\tex_gdef:D \theauthor {\int_use:N \g_ceur_aau_int }
\keys_set:nn { ceur / author } { #3 }
\tl_if_head_eq_catcode:nNTF { #1 } a
{ \processAffRef { #1 } }
{ \processAffNum { #1 } }
\tl_if_empty:NF \l_ceur_au_prefix
{ \l_ceur_au_prefix_tl \c_space_token }
\str_if_eq:VnTF \l_ceur_au_style_tl { chinese } {
% \msg_term:n {STYLE~T=\l_ceur_au_style_tl........}
\invparsename { #2 }
\textcolor{\l_ceur_augroup_color_tl}{\surname}
\no_break_space:
\textcolor{\l_ceur_augroup_color_tl !50}{\firstname}
}{
% \msg_term:n {STYLE~F=\l_ceur_au_style_tl........}
\parsename { #2 }
\textcolor{\l_ceur_augroup_color_tl !50}{\firstname}
\no_break_space:
\textcolor{\l_ceur_augroup_color_tl}{\surname}
}
\tl_if_empty:NF \l_ceur_au_suffix_tl
{ \c_space_token \l_ceur_au_suffix_tl }
\unskip
\textsuperscript
{
\tl_if_blank:nTF { #1 }
{ \tex_def:D \sep{} }
{ {\itshape\listAff} \tex_def:D \sep{\unskip,} }
\process@marks
\bool_if:NT \l_ceur_au_deceased_bool
{ \sep \maltese
\tex_def:D \sep { \unksip, }
}
}
\tl_if_empty:NF \l_ceur_au_degree_tl
{ ,\c_space_token \l_ceur_au_degree_tl }
\tl_if_empty:NF \l_ceur_au_role_tl
{ \c_space_token (\l_ceur_au_role_tl) }
%
\ResetMarks
}
%
\bool_if:NT \l_ceur_au_deceased_bool
{
\seq_gput_right:Nn \g_ceur_maltese_seq
{
\tex_def:D \thefootnote { \maltese }
\footnotetext{Deceased~author.}
}
}
\tl_if_empty:NF \l_ceur_au_email_tl {
\wrAux { \token_to_str:N \emailauthor
{ \l_ceur_au_email_tl } { \exp_not:n {#2} } }
}
\tl_set:Nx \l_ceur_au_url_tl_tmp { \l_ceur_au_url_tl }
\tl_if_empty:NF \l_ceur_au_url_tl_tmp {
\wrAux { \token_to_str:N \urlauthor
{ \l_ceur_au_url_tl } { \exp_not:n {#2} } }
}
% various social media
\tl_if_empty:NTF \l_ceur_au_facebook_tl { }
{
\wrAux { \token_to_str:N \facebookauthor
{ \l_ceur_au_facebook_tl } { \exp_not:n {#2} } }
}
\tl_if_empty:NF \l_ceur_au_twitter_tl
{
\wrAux { \token_to_str:N \twitterauthor
{ \l_ceur_au_twitter_tl } { \exp_not:n {#2} } }
}
\tl_if_empty:NF \l_ceur_au_gplus_tl
{
\wrAux { \token_to_str:N \gplusauthor
{ \l_ceur_au_gplus_tl } { \exp_not:n {#2} } }
}
\tl_if_empty:NF \l_ceur_au_linkedin_tl
{
\wrAux { \token_to_str:N \linkedinauthor
{ \l_ceur_au_linkedin_tl } { \exp_not:n {#2} } }
}
\tl_if_empty:NF \l_ceur_au_orcid_tl
{
\wrAux { \token_to_str:N \orcidauthor
{ \l_ceur_au_orcid_tl } { \exp_not:n {#2} } }
}
% Short authors list
\csgdef { __short_authors_tmp } { #2 }
\int_compare:nNnTF { \theau@ } = { 1 } {
\xappto \__short_authors: { \__short_authors_tmp }
}{
\int_compare:nNnTF { \theau@ } < { \g_num_short_authors + 1 } {
\xappto \__short_authors: { , ~ \__short_authors_tmp }
}{
\int_compare:nNnTF { \theau@ } = { \g_num_short_authors + 1 } {
\xappto \__short_authors: { ~et~al. }
}{ }
}
}
%
\@eadauthor={#2}
\pdfstringdef\__info_au: { #2 }
\int_compare:nNnTF { \theau@ } < { 4 }
{ \xappto \infoauthors { \__info_au: , ~ } }
{
\int_compare:nNnTF { \theau@ } = { 4 }
{ \xappto \infoauthors { et~al. } }
{ }
}
% Authors list for PDF/A
\csgdef { __pdfxauthor } { #2 }
\int_compare:nNnTF { \theau@ } = { 1 }
{ \xappto \pdfxauthors { \__pdfxauthor } }
{ \xappto \pdfxauthors { \iow_char:N \\ sep ~ \__pdfxauthor } }
}
\NewDocumentCommand \ceurauthors { } {
\group_begin:
\ceurAuthorSetup { type = authors }
\l_ceur_au_setup_tl
\par \vskip\l_ceur_augroup_before_dim
\l_ceur_augroup_align_tl
\l_ceur_augroup_size_tl
\l_ceur_augroup_shape_tl
\l_ceur_augroup_weight_tl
\color{ \l_ceur_augroup_color_tl }
\bool_if:NTF \g_ceur_augr_bool
{ \seq_use:Nn \g_ceur_augr_seq { \par } }
{
\seq_use:cnnn { g_ceur_au\int_use:N\g_ceur_augr_int _seq }
{ ,~ } { ,~ } { ~and~ }
}
\par\vskip\l_ceur_augroup_after_dim
\group_end:
}
\seq_new:c { g_ceur_collab0_seq }
\bool_new:N \g_ceur_in_clau_bool
\NewDocumentCommand \ceurcollab { } {
\bool_if:NTF \g_ceur_augr_bool
{ }
{
\group_begin:
\ceurAuthorSetup { type = collaboration }
\l_ceur_clb_setup_tl
\par \vskip \l_ceur_augroup_before_dim
\l_ceur_augroup_align_tl
\l_ceur_augroup_size_tl
\l_ceur_augroup_shape_tl
\l_ceur_augroup_weight_tl
\color{ \l_ceur_augroup_color_tl }
\seq_use:cn {g_ceur_collab\int_use:N \g_ceur_aaugr_int _seq} { }
\seq_use:cnnn {g_ceur_clau\int_use:N \g_ceur_aaugr_int _seq}
{ ~and~ } { ,~ } { ~and~ }
\par \vskip \l_ceur_augroup_after_dim
\group_end:
}
}
\newenvironment{collaboration}[1][] {
\seq_gput_right:cn {g_ceur_collab\int_use:N \g_ceur_augr_int _seq}
{ \textit{Collaboration:~} #1 \par \smallskip }
}{
}
\NewDocumentCommand \dept { m } { #1 }
\NewDocumentCommand \divn { m } { #1 }
\NewDocumentCommand \aline { m } { #1 }
\NewDocumentCommand \city { m } { #1 }
\NewDocumentCommand \cnty { m } { #1 }
\NewDocumentCommand \phone { m } { #1 }
\NewDocumentCommand \fax { m } { #1 }
\NewDocumentCommand \aurl { m } { #1 }
\seq_new:c { g_ceur_aff0_seq }
\int_new:N \g_ceur_aff_int
\tl_new:N \l_addrtype_tl
\keys_define:nn { ceur / address }
{
foot .bool_gset:N = \g_ceur_addr_foot_bool ,
name .tl_set:N = \l_ceur_addr_name_tl ,
type .multichoice: ,
type/alt .code:n = { \tl_set:Nn \l_ceur_addr_type_tl
{ Alternate~address } } ,
type/addl .code:n = { \tl_set:Nn \l_ceur_addr_type_tl
{ Additional~address } } ,
type/regular .code:n = { \tl_set:Nn \l_ceur_addr_type_tl
{ } } ,
type/custom .code:n = { \tl_set:Nn \l_ceur_addr_type_tl
{ \l_ceur_addr_name_tl } } ,
}
\DeclareDocumentCommand \ceurAddrSetup { m }
{ \keys_set:nn { ceur / address } { #1 } }
\keys_set:nn { ceur / address }
{
foot = { false } ,
type = { regular } ,
name = { Alternate~address } ,
}
\cs_new:Nn \__reset_addr:
{
\bool_gset_false:N \g_ceur_addr_foot_bool
\tl_set:Nn \l_ceur_addr_type_tl { }
\tl_set:Nn \l_ceur_addr_name_tl { Alternate~address }
}
\seq_new:N \g_ceur_aff_foot_seq
\NewDocumentCommand \printaddrinfoot { }
{
{ \seq_use:Nn \g_ceur_aff_foot_seq { \par } }
}
\NewDocumentCommand \address { O{} m O{} }
{
\__reset_addr:
\keys_set:nn { ceur / address } { #3 }
\bool_if:NTF \g_ceur_addr_foot_bool
{ \__foot_address:nnn [#1]{#2}[#3] }
{
\seq_gput_right:cn { g_ceur_aff\int_use:N \g_ceur_augr_int _seq }
{ \tl_if_blank:nTF { #1 }
{
\tex_xdef:D \thefootnote{}
{ #2 }
}
{
\tl_if_head_eq_catcode:nNTF { #1 } a
{
\int_gincr:N \g_ceur_aff_int
\tex_xdef:D \@currentlabel
%% label format:
%% \int_to_arabic:n
%% \int_to_alph:n
%% \int_to_symbols:nnn
%% \int_to_roman:n
{ \int_to_arabic:n { \int_use:N \g_ceur_aff_int } }
\ceurLabel {#1}
\textsuperscript{\itshape\@currentlabel} #2
}
{
\int_gset:Nn \g_ceur_aff_int { #1 }
\tex_xdef:D \@currentlabel
{ \int_to_arabic:n { \int_use:N \g_ceur_aff_int } }
\textsuperscript{\itshape\@currentlabel} #2
}
}
}
}
}
\cs_new:Npn \__foot_address:nnn [#1]#2[#3]
{
\keys_set:nn { ceur / address } { #3 }
\seq_gput_right:cn { g_ceur_aff_foot_seq }
{
\tl_if_empty:nTF { #1 }
{
\tl_if_empty:NTF \l_ceur_addr_type_tl
{ \footnotetext{#2} }
{
\footnotetext{\textit{\l_ceur_addr_type_tl}:
\c_space_token #2 }
}
}
{
\tl_if_head_eq_catcode:nNTF { #1 } a
%
{
\tex_def:D \thefootnote{\itshape\@currentlabel}
\tl_if_empty:NTF \l_ceur_addr_type_tl
{ \footnotetext{#2} }
{ \footnotetext{\textit{\l_ceur_addr_type_tl}: \c_space_token #2} }
}
{
\tex_def:D \thefootnote { \itshape\int_to_arabic:n { #1 } }
\tl_if_empty:NTF \l_ceur_addr_type_tl
{ \footnotetext{#2} }
{ \footnotetext{\textit{\l_ceur_addr_type_tl}:
\c_space_token #2 } }
}
}
}
}
\keys_define:nn { ceur / affsetup }
{
type .choice: ,
type / normal .code:n =
{ \tl_set:Nn \l_ceur_aff_type_tl { 0 } } ,
type / nonum .code:n =
{ \tl_set:Nn \l_ceur_aff_type_tl { 1 } } ,
size .tl_set:N = \l_ceur_aff_size_tl ,
shape .tl_set:N = \l_ceur_aff_shape_tl ,
weight .tl_set:N = \l_ceur_aff_weight_tl ,
before .dim_set:N = \l_ceur_aff_before_dim ,
after .dim_set:N = \l_ceur_aff_after_dim ,
align .tl_set:N = \l_ceur_aff_align_tl ,
color .tl_set:N = \l_ceur_aff_color_tl ,
lskip .dim_set:N = \l_ceur_aff_lskip_dim ,
rskip .dim_set:N = \l_ceur_aff_rskip_dim ,
}
\DeclareDocumentCommand \ceurAffSetup { m }
{ \keys_set:nn { ceur / affsetup } { #1 } }
\DeclareDocumentCommand \ceuraffsetup { m }
{ \tl_set:Nn \l_ceur_aff_setup_tl
{ \keys_set:nn { ceur / affsetup } { #1 } }
}
\ceuraffsetup {
size = \footnotesize,
shape = \itshape,
color = black,
before = 0pt,
weight = \mdseries,
align = \raggedright,
}
\NewDocumentCommand \ceuraddress { }
{
\bool_if:NTF \g_ceur_augr_bool
{ }
{
\group_begin:
\ceurAffSetup { type = normal }
\l_ceur_aff_setup_tl
\par \vskip\l_ceur_aff_before_dim
\l_ceur_aff_align_tl
\l_ceur_aff_size_tl
\l_ceur_aff_shape_tl
\l_ceur_aff_weight_tl
\color{ \l_ceur_aff_color_tl }
\seq_use:cn { g_ceur_aff\int_use:N \g_ceur_aaugr_int _seq }
{ \par\vskip2pt }
\par\vskip\l_ceur_aff_after_dim
\group_end:
}
}
\int_new:N \g_ceur_augr_int
\seq_new:N \g_ceur_augr_seq
\int_new:N \g_ceur_aaugr_int
\bool_new:N \g_ceur_augr_bool
\NewDocumentEnvironment { augroup } { }
{
\bool_gset_true:N \g_ceur_augr_bool
\int_gincr:N \g_ceur_augr_int
\seq_new:c {g_ceur_au\int_use:N \g_ceur_augr_int _seq}
\seq_new:c {g_ceur_aff\int_use:N \g_ceur_augr_int _seq}
\seq_new:c {g_ceur_collab\int_use:N \g_ceur_augr_int _seq}
\seq_new:c {g_ceur_clau\int_use:N \g_ceur_augr_int _seq}
\msg_term:n { AUGR:~\int_use:N \g_ceur_augr_int ... }
}
{
\seq_gput_right:Nn \g_ceur_augr_seq
{
\int_gincr:N \g_ceur_aaugr_int
\group_begin:
\ceurAuthorSetup { type = collaboration }
\l_ceur_clb_setup_tl
\par \vskip \l_ceur_augroup_before_dim
\l_ceur_augroup_align_tl
\l_ceur_augroup_size_tl
\l_ceur_augroup_shape_tl
\l_ceur_augroup_weight_tl
\color{ \l_ceur_augroup_color_tl }
\seq_use:cnnn { g_ceur_au\int_use:N \g_ceur_aaugr_int _seq }
{ ~and~ } { ,~ } { ~and~ }
\par \vskip \l_ceur_augroup_after_dim
\group_end:
%
\group_begin:
\ceurAffSetup { type = normal }
\l_ceur_aff_setup_tl
\par \vskip\l_ceur_aff_before_dim
\l_ceur_aff_align_tl
\l_ceur_aff_size_tl
\l_ceur_aff_shape_tl
\l_ceur_aff_weight_tl
\color{ \l_ceur_aff_color_tl }
\seq_use:cn { g_ceur_aff\int_use:N \g_ceur_aaugr_int _seq }
{ \par \smallskip }
\par\vskip\l_ceur_aff_after_dim
\msg_term:n { AAUGR:~\int_use:N \g_ceur_aaugr_int ... }
\group_end:
%
\group_begin:
\ceurAuthorSetup { type = collaboration }
\l_ceur_clb_setup_tl
\par \vskip \l_ceur_augroup_before_dim
\l_ceur_augroup_align_tl
\l_ceur_augroup_size_tl
\l_ceur_augroup_shape_tl
\l_ceur_augroup_weight_tl
\color{ \l_ceur_augroup_color_tl }
\seq_use:cn {g_ceur_collab\int_use:N \g_ceur_aaugr_int _seq} { }
\seq_use:cnnn {g_ceur_clau\int_use:N \g_ceur_aaugr_int _seq}
{ ~and~ } { ,~ } { ~and~ }
\par\vskip \l_ceur_augroup_after_dim
\group_end:
}
}
%%
%% Abstract
%%
\RequirePackage{moreverb}
\tl_new:N \l_ceur_abs_title_tl
\box_new:N \g_ceur_abs_box
\tex_gdef:D \abstractname { \textbf{\sffamily Abstract} }
\NewDocumentEnvironment { Abstract } { o } {
% \global\setbox \g_ceur_abs_box = \vtop \bgroup
% \hsize = .65 \textwidth \parindent \z@
\group_begin:
% Check if abstract exist
\file_if_exist:nT { \jobname.abs } {
\IfNoValueTF { #1 } {
} { \tex_gdef:D \abstractname { #1 } }
\parindent \z@
\leftskip = .1 \textwidth
% \box_if_empty:NTF \g_ceur_key_box
% { \leftskip = .1 \textwidth }
% {
% \dim_gset:Nn \l_tmpa_dim { \box_ht:N \g_ceur_key_box }
% \dim_gadd:Nn \l_tmpa_dim { \box_dp:N \g_ceur_key_box }
% \leftskip .1\textwidth
% \hspace*{-.1 \textwidth }
% \noindent\hbox_to_wd:nn { \z@ } { \box \g_ceur_key_box }
% \skip_vertical:n { - \l_tmpa_dim }
% }
\skip_vertical:n { \baselineskip }
\noindent \abstractname \par
% \skip_vertical:n { -4pt}
% \noindent \rule{.65\textwidth}{.2pt}\par
\footnotesize
\ignorespaces \everypar { \parindent=1.5em }
} { }
} {
\par
\noindent\hbox_to_wd:nn { \z@ } { \box \g_ceur_key_box }
\par \group_end:
}
\NewDocumentEnvironment { PrelimsAbstract } { O{} } {
\parindent=0pt
{ \fontsize{14pt}{16pt}\selectfont #1 }\par
\vskip12pt
{ \fontsize{12pt}{14pt}\bfseries\selectfont\casprelimstitle } \par
\vskip6pt
\seq_use:Nn \g_ceur_prelimsau_seq { , }
\vskip12pt
\par
} { }
\RenewDocumentEnvironment { abstract } { o } {
\IfNoValueTF { #1 } {
} { \tex_gdef:D \abstracttitle { #1 } }
\verbatimwrite{\jobname.abs}
} { \endverbatimwrite }
\newbox\casgrabsbox
\newbox\casauhlbox
\newbool { usecasgrabsbox }
\newbool { usecashlsbox }
\DeclareDocumentEnvironment { graphicalabstract } { O{Graphical~Abstract} } {
\global \booltrue { usecasgrabsbox }
\global\setbox\casgrabsbox=\vbox\bgroup
\begin{PrelimsAbstract}[#1]
\noindent \ignorespaces
} {
\end{PrelimsAbstract}
\egroup
}
\DeclareDocumentEnvironment { highlights } { O{Highlights} } {
\global \booltrue { usecashlsbox }
\global\setbox\casauhlbox=\vbox\bgroup
\begin{PrelimsAbstract}[#1]
\noindent \ignorespaces
\begin{itemize}
} {
\end{itemize}
\end{PrelimsAbstract}
\egroup
}
\NewDocumentCommand \dashrule { O{.4pt} m m }
{
% \color{black!50}
\skip_vertical:n { #2 }
% \noindent \rule { \linewidth } { #1}
\normalcolor \skip_vertical:n { #3 }
}
\NewDocumentCommand \keywordtitle { } { Keywords }
\NewDocumentCommand \keywordtitlesep { } {:\c_space_token }
\box_new:N \g_ceur_key_box
\NewDocumentCommand \MSC { O{} m }
{
\par\noindent \textit { #1\c_space_token MSC:\c_space_token } #2
}
\NewDocumentCommand \JEL { m }
{
\par\noindent \textit { JEL:\c_space_token } #1
}
\NewDocumentCommand \PACS { m }
{
\par\noindent \textit { PACS:\c_space_token } #1
}
\NewDocumentEnvironment { keywords } { O{ Keywords } } {
\tex_global:D \tex_setbox:D \g_ceur_key_box = \vtop \bgroup
\hsize=.9 \textwidth
\vspace*{0pt}
\cs_new:Nn \sep: {\unskip,~}
\cs_set_eq:NN \sep \sep:
\parindent \z@
% A\,R\,T\,I\,C\,L\,E\ \ I\,N\,F\,O \par \skip_vertical:n { -3pt }
% \rule{.25 \textwidth}{.2pt}\par
\noindent \textbf {\sffamily #1 } \par
\footnotesize
}{
\skip_vertical:n { \baselineskip }
\egroup
}
%% Acknowledgments
\NewDocumentEnvironment { acknowledgments } { }
{
\group_begin:
\section*{Acknowledgments}
}
{ \group_end: }
%% Copyright
\def\copyrightyear#1{\def\@copyrightyear{#1}}
\copyrightyear{\the\year}
\DeclareRobustCommand\copyrightclause[1]{%
\def\@copyrightclause{#1}%
}
\let\@copyrightclause\@empty
% \copyrightclause{\textcolor{red}{Author: Please provide a copyright holder}}
%% CC-BY logo width
\newdimen\ccLogoWidth
\def\@copyrightLine{%
\setbox\@tempboxa\hbox{\includegraphics[height=\baselineskip,clip]{cc-by}}%
\ccLogoWidth=\dimexpr\wd\@tempboxa
\@rightskip\@flushglue \rightskip\@rightskip
% \hangindent\dimexpr\wd\@tempboxa+0.5em\relax
\begin{minipage}[c]{\ccLogoWidth}
\href{https://creativecommons.org/licenses/by/4.0}%
{\lower\baselineskip\hbox{\unhcopy\@tempboxa}}\enskip
\end{minipage}
\enskip
\begin{minipage}[c]{\linewidth - \ccLogoWidth - 2\footnotemargin}
\tiny
\textcopyright\ \@copyrightyear\ %
\ifx\@copyrightclause\@empty%
\textcolor{red}{Author: Please fill in the \string\copyrightclause\space macro}%
\else\@copyrightclause%
\fi
\end{minipage}
}
\RequirePackage{calc}
\def\@ceurLogoLine{%
% set width of ceur-ws logo equals to width of cc-by logo
\setbox\@tempboxa\hbox{\includegraphics[height=\baselineskip,clip]{cc-by}}%
\ccLogoWidth=\dimexpr\wd\@tempboxa
\setbox\@tempboxa\hbox{\includegraphics[width=\ccLogoWidth,clip]{ceur-ws-logo}}
\@rightskip\@flushglue \rightskip\@rightskip
% \hangindent\dimexpr\wd\@tempboxa+0.5em\relax
\begin{minipage}[c]{\ccLogoWidth}
\href{http://ceur-ws.org}%
% {\lower\baselineskip\hbox{\unhcopy\@tempboxa}}\enskip
{\hbox{\unhcopy\@tempboxa}}
\end{minipage}
\enskip
\begin{minipage}[c]{\linewidth - \ccLogoWidth - 2\footnotemargin}
{CEUR~Workshop~Proceedings~(\href{http://ceur-ws.org}{CEUR-WS.org})}%
\end{minipage}
}
\seq_new:N \g_ceur_logonote_seq
\NewDocumentCommand \logonote { m }
{
\group_begin:
\seq_gput_right:Nn \g_ceur_logonote_seq
{
\tex_def:D \thefootnote { }
\footnotetext{%
\raggedright
\hspace*{-\parindent}
% \hspace*{-\labelsep}
\hspace*{-\footnotemargin}
#1}
}
\group_end:
}
\newcommand \printlogonotes { \seq_use:Nn \g_ceur_logonote_seq { \par } }
%
% Print all footnotes in the title page
%
\bool_new:N \g_ceur_longmktitle_bool
\int_new:N \g_ceur_jtype_int
\int_new:N \g_ceur_blind_int
\NewDocumentCommand \printFirstPageNotes { } {
\bool_if:NTF \g_ceur_longmktitle_bool {
\tex_let:D \columnwidth = \textwidth
} { }
\int_compare:nTF { \g_ceur_jtype_int > 5 } {
\ceuraddress
} { }
\printtnotes
\printnonumnotes
\bool_if:NTF \g_ceur_blind_bool {
} {
\printcornotes
\printmaltese
\printaddrinfoot
\printemails
\printurls
\printorcid
\printfacebook
\printtwitter
\printgplus
\printlinkedin
\printfnotes
}
\printlogonotes
\bool_if:NTF \g_ceur_longmktitle_bool {
\if@twocolumn
\tex_let:D \columnwidth = \Columnwidth \fi
} { }
\normalcolor
}
%
% Date History
%
\tl_new:N \g_ceur_recd_tl
\tl_new:N \g_ceur_accd_tl
\tl_new:N \g_ceur_revd_tl
\tl_new:N \g_ceur_pub_online_tl
\tl_new:N \g_ceur_pub_print_tl
\cs_new:Npn \date_parse:n #1 { \date_parse_aux:w #1 \q_stop }
\cs_new:Npn \date_parse_aux:w #1 / #2 / #3 \q_stop
{ <do something with the date> }
\NewDocumentCommand \received { m }
{ \tl_gput_right:Nn \g_ceur_recd_tl { #1 } }
\NewDocumentCommand \accepted { m }
{ \tl_gput_right:Nn \g_ceur_accd_tl { #1 } }
\NewDocumentCommand \revised { m }
{ \tl_gput_right:Nn \g_ceur_revd_tl { #1 } }
\NewDocumentCommand \published { O{} m }
{
\tl_if_eq:nnTF { #1 } { online }
{ \tl_if_gput_right:Nn \g_ceur_pub_online_tl { #2 } }
{ \tl_if_gput_right:Nn \g_ceur_pub_print_tl { #2 } }
}
%
% Verse/Recto
%
\tl_new:N \l_ceur_verso_tl
\tl_new:N \l_ceur_recto_tl
\NewDocumentCommand \verso { m }
{ \tl_set:Nn \l_ceur_verso_tl { #1 } }
\NewDocumentCommand \recto { m }
{ \tl_set:Nn \l_ceur_recto_tl { #1 } }
%
% Maketitle
%
\newcounter{au}
\newcounter{cnote}
\newcounter{tnote}
\newcounter{fnote}
\newcounter{aff}
\cs_new:Nn \__reset_title_counters:
{
\setcounter{cnote}{0}
\setcounter{fnote}{0}
\setcounter{tnote}{0}
\setcounter{footnote}{0}
}
\keys_define:nn { ceur / mktitle }
{
blind .bool_gset:N = \g_ceur_blind_bool ,
footer .multichoice:,
footer/default .tl_gset:N = \g_ceur_footer_default_tl ,
footer/custom .tl_gset:N = \g_ceur_footer_custom_tl ,
longtitle .bool_gset:N = \g_ceur_longtitle_bool ,
longabstract .bool_gset:N = \g_ceur_longtitle_bool ,
breakafter .clist_gset:N = \g_ceur_breakafter_clist ,
nologo .bool_gset:N = \g_ceur_nologo_bool ,
}
\bool_new:N \g_ceur_breakafter_title_bool
\bool_new:N \g_ceur_breakafter_auaff_bool
\bool_new:N \g_ceur_breakafter_abstract_bool
\NewDocumentCommand \processbreakafter { }
{
\clist_if_empty:NTF \g_ceur_breakafter_clist { }
{
\clist_map_inline:Nn \g_ceur_breakafter_clist
{ \bool_gset_true:c { g_ceur_breakafter_##1_bool } }
}
}
\NewDocumentCommand \pprintMaketitle { O{} }
{
\tl_if_blank:nTF { #1 } { }
{ \keys_set:nn { ceur / mktitle } { #1 } }
\processbreakafter
\clearpage
\__reset_title_counters:
\tex_def:D \baselinestretch { 1 }
\printFirstPageNotes
\thispagestyle{pprintTitle}%
\group_begin:
\@title
\group_end:
\bool_if:NTF \g_ceur_breakafter_title_bool
{ \newpage } { }
%
\bool_if:NTF \g_ceur_blind_bool
{ \vspace* { 10 mm } }
{
\group_begin:
\normalsize \ceurauthors \par
\ceurcollab \par
\footnotesize \itshape \ceuraddress \par \vskip36pt
\group_end:
\bool_if:NTF \g_ceur_breakafter_auaff_bool
{ \newpage } { }
}
%
\printabsbox
\printkeybox
\bool_if:NTF \g_ceur_breakafter_abstract_bool
{ \newpage } { }
%
\setcounter{footnote}{\c@fnote}
\tex_gdef:D \thefootnote { \arabic{footnote} }
\tex_def:D \baselinestretch { \@blstr }
\normalfont \normalsize
}
\NewDocumentCommand \MaketitleBox { } {
\tex_def:D \baselinestretch{1}
\group_begin:
\@title
\group_end:
%
\bool_if:NTF \g_ceur_blind_bool {
\vspace* { 10 mm }
} {
\group_begin:
\normalsize \ceurauthors \par
\ceurcollab \par
\footnotesize \itshape \ceuraddress \par
\group_end:
\bool_if:NTF \g_ceur_breakafter_auaff_bool
{ \newpage } { }
}
% \printFirstPageNotes
%
\dashrule{0pt}{3pt}
\begin{Abstract}
\noindent \ignorespaces
\file_if_exist:nT { \jobname.abs } { \file_input:n { \jobname.abs } }
\end{Abstract}
\dashrule{6pt}{3pt}
\bool_if:NTF \g_ceur_breakafter_abstract_bool
{ \newpage } { }
}
\box_new:N \g_ceur_notes_box
\box_new:N \g_ceur_front_box
\cs_set:Npn \__fn_text:n #1
{ \group_begin:\vbox_top:n { \footnotesize #1 } \group_end:\par}
\NewDocumentCommand \LongMaketitleBox { }
{
\vbox_gset:Nn \g_ceur_front_box
{
\tex_def:D \baselinestretch{1}
\group_begin:
\@title
\group_end:
%
\group_begin:
\normalsize \ceurauthors \par
\ceurcollab \par
\footnotesize \itshape \ceuraddress \par
\group_end:
%
\dashrule{0pt}{3pt}
\begin{Abstract}
\noindent \ignorespaces
\file_if_exist:nT { \jobname.abs } { \file_input:n { \jobname.abs } }
\end{Abstract}
\dashrule{3pt}{3pt}
}
\vbox_gset:Nn \g_ceur_notes_box
{ \cs_set_eq:NN \footnotetext \__fn_text:n \printFirstPageNotes }
\dim_gset:Nn \g_tmpb_dim { \box_ht:N \g_ceur_notes_box }
% \iow_term:x { ...~[ht: \dim_use:N \g_tmpb_dim ] }
\dim_gadd:Nn \g_tmpb_dim { \box_dp:N \g_ceur_notes_box }
% \iow_term:x { ...~[ht+dp: \dim_use:N \g_tmpb_dim ] }
\ifbool{sc}{\dim_gadd:Nn \g_tmpb_dim { 12pt } } { }
}
\NewDocumentCommand \ProcessLongTitleBox { }
{
% \vbox_gset:Nn \g_ceur_notes_box
% { \cs_set_eq:NN \footnotetext \__fn_text:n \printFirstPageNotes }
% \dim_gset:Nn \g_tmpb_dim { \box_ht:N \g_ceur_notes_box }
% % \iow_term:x { ...~[ht: \dim_use:N \g_tmpb_dim ] }
% \dim_gadd:Nn \g_tmpb_dim { \box_dp:N \g_ceur_notes_box }
% % \iow_term:x { ...~[ht+dp: \dim_use:N \g_tmpb_dim ] }
%
\dim_gset:Nn \g_tmpa_dim { \textheight }
% \vbox_unpack:N \g_ceur_notes_box
% \iow_term:x { ...~[tmpa:~ \dim_use:N \g_tmpa_dim ] }
% \dim_gsub:Nn \g_tmpa_dim { \box_ht:N \g_ceur_notes_box }
% \iow_term:x { ...~[tmpa-noteht:~ \dim_use:N \g_tmpa_dim ] }
% \dim_gsub:Nn \g_tmpa_dim { \box_dp:N \g_ceur_notes_box }
% \iow_term:x { ...~[tmpa-notedp:~ \dim_use:N \g_tmpa_dim ] }
\dim_gsub:Nn \g_tmpa_dim { \g_tmpb_dim }
\vbox_set_split_to_ht:NNn \g_tmpb_box \g_ceur_front_box { \g_tmpa_dim }
\noindent \vbox_unpack_clear:N \g_tmpb_box
\printFirstPageNotes
\dim_gzero:N \g_tmpa_dim
\dim_gset:Nn \g_tmpa_dim { \box_ht:N \g_ceur_front_box }
% \iow_term:x { ...~[tmpa-ht:~ \dim_use:N \g_tmpa_dim ] }
\dim_gadd:Nn \g_tmpa_dim { \box_dp:N \g_ceur_front_box }
% \iow_term:x { ...~[tmpa-ht+dp:~ \dim_use:N \g_tmpa_dim ~+~\the\textheight] }
\dim_compare:nNnTF { \dim_use:N \g_tmpa_dim } > { \the\textheight }
{
\vbox_set_split_to_ht:NNn \g_tmpb_box \g_ceur_front_box { \textheight }
\vbox_unpack_clear:N \g_tmpb_box
\ifbool{dc}
{ \twocolumn[{\vbox_unpack_clear:N \g_ceur_front_box}] }
{ \vbox_unpack_clear:N \g_ceur_front_box }
}
{
\ifbool{dc}
{ \twocolumn[{\vbox_unpack_clear:N \g_ceur_front_box}] }
{ \vbox_unpack_clear:N \g_ceur_front_box }
}
\normalcolor \normalfont
}
\ExplSyntaxOff
%
% Headings
%
\def\@seccntDot{.}
\def\@seccntformat#1{\csname the#1\endcsname\@seccntDot\hskip 0.5em}
\newdimen\paraindent \paraindent=\parindent
\newdimen\subparaindent \subparaindent=\parindent
\def\ssssparaindent{}
\def\sectionfont{\rmfamily\fontsize{12pt}{14pt}%
\bfseries}
\def\ssectionfont{\rmfamily\fontsize{11pt}{13pt}%
\bfseries\selectfont}
\def\sssectionfont{\rmfamily\fontsize{10.5pt}{12pt}%
\fontseries{b}\fontshape{it}\selectfont}
\def\ssssectionfont{\rmfamily\fontsize{11pt}{10pt}\itshape\selectfont}
\def\sssssectionfont{\rmfamily\fontsize{11pt}{10pt}\selectfont}%
\AtBeginDocument{\global\@afterindentfalse}
% \renewcommand\section{\@startsection{section}{1}{\z@}%
% {15pt \@plus 3\p@ \@minus 3\p@}%
% {4\p@}%
% {%\let\@hangfrom\relax
% \sectionfont\raggedright\hst[13pt]}}
% \renewcommand\subsection{\@startsection{subsection}{2}{\z@}%
% {10pt \@plus 3\p@ \@minus 2\p@}%
% {.1\p@}%
% {%\let\@hangfrom\relax
% \ssectionfont\raggedright }}
% \renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%
% {10pt \@plus 1\p@ \@minus .3\p@}%
% {.1\p@}%
% {%\let\@hangfrom\relax
% \sssectionfont\raggedright}}
% \renewcommand\paragraph{\@startsection{paragraph}{4}{\parindent}%
% {10pt \@plus0.01pt \@minus0.01pt}%
% {-6pt}%
% {\ssssparaindent%
% \ssssectionfont\itshape\raggedright}}
% \renewcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}%
% {0pt \@plus0.1pt \@minus0.1pt}%
% {-6pt}%
% {\hspace*{\subparaindent}
% \sssssectionfont\raggedright}}
\def\thesubsection{\thesection.\arabic{subsection}}
\def\thesubsubsection{\thesubsection.\arabic{subsubsection}}
%
% Sundry lengths
%
\def\xstrut#1#2{\vrule height#1 depth #2 width\z@}
\def\hstrut#1{\vrule height#1 depth \z@ width 0pt}
\def\dstrut#1{\vrule height0pt depth#1 width 0pt}
\def\hst[#1]{\vrule height#1 depth \z@ width \z@}
\def\dst[#1]{\vrule height0pt depth#1 width 0pt}
\def\xst[#1][#2]{\vrule height#1 depth #2 width\z@}
\def\lastpage{100}
\AtEndDocument{%
% \clearpage
\immediate\write\@auxout{\string\csxdef{lastpage}{\thepage}}
}
\ExplSyntaxOn
%
% pagestyle
%
\RequirePackage{scrlayer-scrpage}
\clearpairofpagestyles
\setkomafont{pageheadfoot}{\sffamily\small}
% \setkomafont{pagehead}{\sffamily\small}
\bool_if:NTF \g_ceur_hf_bool {
\KOMAoptions{headsepline}
% \ofoot[Page~ \thepage {} ~of~ \lastpage]{Page~ \thepage {} ~of~ \lastpage}
% \ifoot[\__short_authors: :~ { \rmfamily \itshape CEUR~Workshop~Proceedings}]{\__short_authors: :~ { \rmfamily \itshape CEUR~Workshop~Proceedings}}
% \ohead[]{\__short_title:}
\cfoot[\thepage]{\thepage}
\ohead[]{\firstpage--\lastpage}
\ihead[]{\__short_authors:{} ~ { \rmfamily \itshape CEUR~Workshop~Proceedings}}
}{ }
% \newcommand{\hffont}{\sffamily\small}
% \RequirePackage{scrlayer-fancyhdr}
% \fancypagestyle{first}{%
% \fancyhf{}%
% \renewcommand{\headrulewidth}{\z@}%
% \renewcommand{\footrulewidth}{\z@}%
% \fancyfoot[R]{\hffont Page~ \thepage {} ~of~ \lastpage}%
% \fancyfoot[L]{\hffont \__short_authors: :~ { \rmfamily \itshape CEUR~Workshop~Proceedings}}%
% }
% \fancypagestyle{standard}{%
% \fancyhf{}%
% \renewcommand{\headrulewidth}{\z@}%
% \renewcommand{\footrulewidth}{\z@}%
% \fancyfoot[R]{\hffont Page~ \thepage {} ~of~ \lastpage}%
% \fancyfoot[L]{\hffont \__short_authors: :~ { \rmfamily \itshape CEUR~Workshop~Proceedings}}%
% \fancyhead[L]{\hffont \__short_title:}%
% }
\cs_new:Npn \__first_footerline: {
\group_begin:
\small \sffamily
\__short_authors: :~
{ \rmfamily \itshape CEUR~Workshop~Proceedings }
\group_end:
}
\cs_new:Npn \__first_head: {
\parbox[t]{\textwidth}
{
\color{black!20}
\rule{\textwidth}{0pt}
}
}
\cs_new:Npn \__first_foot: {
\parbox[t]{\textwidth} {
% \rule{\textwidth}{.2pt}\\
\sffamily\small
\__first_footerline:
\hfill Page~ \thepage {} ~of~ \lastpage
}
}
\cs_new:Npn \__ceur_head: {
\parbox{\textwidth} {
\sffamily\small\centering
\__short_title:
}
}
\cs_new:Npn \__ceur_foot: {
\parbox[t]{\textwidth} {
% \rule{\textwidth}{.2pt}\\
\sffamily\small
\__first_footerline:
\hfill Page~\thepage {}~of~ \lastpage
}
}
% \newcommand \ps@first {
% \cs_set_eq:NN \@oddhead \__first_head:
% \cs_set_eq:NN \@evenhead \__first_head:
% \cs_set_eq:NN \@evenfoot \__first_foot:
% \cs_set_eq:NN \@oddfoot \__first_foot:
% }
% \newcommand \ps@ceur {
% \cs_set_eq:NN \@oddhead \__ceur_head:
% \cs_set_eq:NN \@evenhead \__ceur_head:
% \cs_set_eq:NN \@evenfoot \__ceur_foot:
% \cs_set_eq:NN \@oddfoot \__ceur_foot:
% }
% \ps@ceur
%
% Floats
%
\def\topfraction{.9}
\def\bottomfraction{.9}
\setcounter{topnumber}{4}
\setcounter{bottomnumber}{3}
\setcounter{totalnumber}{5}
\renewcommand\textfraction{.1}
\renewcommand\floatpagefraction{.9}
\setcounter{dbltopnumber}{2}
\renewcommand\dbltopfraction{.9}
\renewcommand\dblfloatpagefraction{.95}
\newdimen \FullWidth
\FullWidth=\textwidth
\newcolumntype{L}{@{\extracolsep{\fill}}l}
\newcolumntype{R}{@{\extracolsep{\fill}}r}
\newcolumntype{C}{@{\extracolsep{\fill}}c}
\cs_gset_eq:NN \thead \toprule
\cs_gset_eq:NN \endthead \midrule
\cs_gset_eq:NN \tabref \ref
\dim_new:N \l_tbl_width_dim
\dim_set:Nn \l_tbl_width_dim { \linewidth }
\cs_new:Npn \__make_tbl_caption:nn #1#2
{
\l_tbl_align_tl
\skip_vertical:N \l_tbl_abovecap_skip
% \bool_if:NTF \g_tbl_full_bool
% {
% \color{scolor!70}\rule{\FullWidth}{2pt}\normalcolor\\
% }
% { \color{scolor!70}\rule{\tblwidth}{2pt}\normalcolor\\ }
% \fboxsep=4pt
% \colorbox{white}
{\parbox{ \dimexpr(\l_tbl_width_dim)}
{\rightskip=0pt\sffamily\small\textbf{\color{scolor}#1}\par#2\par\vskip4pt }}
\skip_vertical:N \l_tbl_belowcap_skip
}
\keys_define:nn { ceur / tbl } {
width .dim_set:N = \l_tbl_width_dim ,
pos .tl_set:N = \l_tbl_pos_tl ,
cols .tl_set:N = \l_tbl_cols_tl ,
align .tl_set:N = \l_tbl_align_tl,
abovecap .skip_set:N = \l_tbl_abovecap_skip ,
belowcap .skip_set:N = \l_tbl_belowcap_skip ,
abovetbl .skip_set:N = \l_tbl_abovetbl_skip ,
belowtbl .skip_set:N = \l_tbl_belowtbl_skip ,
full .bool_gset:N = \g_tbl_full_bool ,
unknown .code:n = \tl_set:Nx \l_tbl_pos_tl { \l_keys_key_str },
}
\cs_set:Npn \__reset_tbl: {
\tl_set:Nx \l_tbl_pos_tl { t }
\tl_set:Nx \l_tbl_cols_tl { 1 }
\tl_set:Nn \l_tbl_align_tl { \centering }
\skip_set:Nn \l_tbl_abovecap_skip { 6pt }
\skip_set:Nn \l_tbl_belowcap_skip { 0pt }
\skip_set:Nn \l_tbl_abovetbl_skip { 6pt }
\skip_set:Nn \l_tbl_belowtbl_skip { 6pt }
}
\RenewDocumentEnvironment { table } { O{} } {
\__reset_tbl:
\bool_gset_false:N \g_tbl_full_bool
\dim_set:Nn \l_tbl_width_dim { \linewidth }
\keys_set:nn { ceur / tbl } { #1 }
\csxdef{fps@table}{\l_tbl_pos_tl}
\csgdef{tblwidth}{\dim_use:N \l_tbl_width_dim}
\cs_set_eq:NN \@makecaption \__make_tbl_caption:nn
\@float{table}
\l_tbl_align_tl
\sffamily\small
}
{ \end@float }
\RenewDocumentEnvironment { table* } { O{width=\FullWidth} } {
\__reset_tbl:
\bool_gset_true:N \g_tbl_full_bool
\dim_set:Nn \l_tbl_width_dim { \FullWidth }
\keys_set:nn { ceur / tbl } { #1 }
\csxdef{fps@table}{\l_tbl_pos_tl}
\csgdef{tblwidth}{\dim_use:N \l_tbl_width_dim}
\cs_set_eq:NN \@makecaption \__make_tbl_caption:nn
\@dblfloat{table}
\l_tbl_align_tl
\sffamily\small
% \leftskip=-\FullWidth
}
{ \end@dblfloat }
\dim_new:N \l_fig_width_dim
\dim_set:Nn \l_fig_width_dim { \linewidth }
\cs_new:Npn \__make_fig_caption:nn #1#2 {
\l_fig_align_tl
\skip_vertical:N \l_fig_abovecap_skip
% \bool_if:NTF \g_fig_full_bool
% { \skip_horizontal:n { -\FullWidth } } { }
\parbox{ \l_fig_width_dim }
{\rightskip=0pt\sffamily\small\textbf{\color{scolor}#1:}~#2\par }
\skip_vertical:N \l_fig_belowcap_skip
}
\keys_define:nn { ceur / fig } {
width .dim_set:N = \l_fig_width_dim ,
pos .tl_set:N = \l_fig_pos_tl ,
cols .tl_set:N = \l_fig_cols_tl ,
align .tl_set:N = \l_fig_align_tl,
abovecap .skip_set:N = \l_fig_abovecap_skip ,
belowcap .skip_set:N = \l_fig_belowcap_skip ,
abovefig .skip_set:N = \l_fig_abovefig_skip ,
belowfig .skip_set:N = \l_fig_belowfig_skip ,
full .bool_gset:N = \g_fig_full_bool ,
unknown .code:n = \tl_set:Nx \l_fig_pos_tl { \l_keys_key_str },
}
\cs_set:Npn \__reset_fig: {
\tl_set:Nx \l_fig_pos_tl { t }
\tl_set:Nx \l_fig_cols_tl { 1 }
\tl_set:Nn \l_fig_align_tl { \raggedleft }
\skip_set:Nn \l_fig_abovecap_skip { 6pt }
\skip_set:Nn \l_fig_belowcap_skip { 6pt }
\skip_set:Nn \l_fig_abovefig_skip { 6pt }
\skip_set:Nn \l_fig_belowfig_skip { 6pt }
}
\RenewDocumentEnvironment { figure } { O{} } {
\__reset_fig:
\bool_gset_false:N \g_fig_full_bool
\dim_set:Nn \l_fig_width_dim { \linewidth }
\keys_set:nn { ceur / fig } { #1 }
\csxdef{fps@figure}{\l_fig_pos_tl}
\csgdef{figwidth}{\dim_use:N \l_fig_width_dim}
\cs_set_eq:NN \@makecaption \__make_fig_caption:nn
\@float{figure}
\l_fig_align_tl
\sffamily\small
}{ \end@float }
\RenewDocumentEnvironment { figure* } { O{width=\textwidth} } {
\__reset_fig:
\bool_gset_true:N \g_fig_full_bool
\dim_set:Nn \l_fig_width_dim { \FullWidth }
\keys_set:nn { ceur / fig } { #1 }
\csxdef{fps@figure}{\l_fig_pos_tl}
\csgdef{figwidth}{\dim_use:N \l_fig_width_dim}
\cs_set_eq:NN \@makecaption \__make_fig_caption:nn
\@dblfloat{figure}
\l_fig_align_tl
\sffamily\small
% \leftskip=-\FullWidth
}
{ \end@dblfloat }
%
% wrapped figure
%
\RequirePackage{wrapfig}
\dim_new:N \l_wrap_figwidth_dim
\dim_new:N \l_wrap_fighspace_dim
\dim_new:N \l_wrap_figvspace_dim
\dim_new:N \l_wrap_fighcorr_dim
\dim_new:N \l_wrap_figvcorr_dim
\dim_new:N \l_above_bio_dim
\int_new:N \l_wrap_figlcorr_int
\int_new:N \l_wrap_figlines_int
\tl_new:N \l_wrap_figfile_tl
\NewDocumentCommand \wfigwidth { m }
{ \dim_set:Nn \l_wrap_figwidth_dim { #1 } }
\NewDocumentCommand \wfighspace { m }
{ \dim_set:Nn \l_wrap_fighspace_dim { #1 } }
\NewDocumentCommand \wfigvspace { m }
{ \dim_set:Nn \l_wrap_figvspace_dim { #1 } }
\NewDocumentCommand \wfighcorr { m }
{ \dim_set:Nn \l_wrap_fighcorr_dim { #1 } }
\NewDocumentCommand \wfigvcorr { m }
{ \dim_set:Nn \l_wrap_figvcorr_dim { #1 } }
\NewDocumentCommand \addfiglines { m }
{ \int_set:Nn \l_wrap_figlcorr_int { #1 } }
\NewDocumentCommand \abovebioskip { m }
{ \dim_set:Nn \l_above_bio_dim { #1 } }
\cs_new:Nn \__fig_defaults: {
\wfigwidth { 25.5mm }
\wfighspace { 0mm }
\wfigvspace { 0mm }
\wfighcorr { 0pt }
\wfigvcorr { -12pt }
\wfigvcorr { 0pt }
\abovebioskip { 12pt }
\tl_set:Nn \l_wrap_figpos_tl { l }
\int_set:Nn \l_wrap_figlines_int { 3 }
\int_set:Nn \l_wrap_figlcorr_int { 1 }
\tl_clear:N \l_wrap_figcap_tl
}
\__fig_defaults:
\keys_define:nn { wrap / fig } {
width .dim_set:N = \l_wrap_figwidth_dim ,
hspace .dim_set:N = \l_wrap_fighspace_dim ,
vspace .dim_set:N = \l_wrap_figvspace_dim ,
hcorr .dim_set:N = \l_wrap_fighcorr_dim ,
vcorr .dim_set:N = \l_wrap_figvcorr_dim ,
lcorr .int_set:N = \l_wrap_figlcorr_int ,
pos .tl_set:N = \l_wrap_figpos_tl ,
lines .int_set:N = \l_wrap_figlines_int ,
cap .tl_set:N = \l_wrap_figcap_tl ,
}
\cs_new:Npn \__find_fig_height:n #1 {
\box_clear:N \g_tmpa_box
\hbox_gset:Nn \g_tmpa_box
{ \includegraphics [ width = \l_wrap_figwidth_dim ] { #1 } }
\dim_zero:N \l_tmpa_dim
\dim_set:Nn \l_tmpa_dim { \box_ht:N \g_tmpa_box }
\dim_add:Nn \l_tmpa_dim { \box_dp:N \g_tmpa_box }
\fp_set:Nn \l_tmpa_fp { \dim_to_fp:n { \l_tmpa_dim } }
\fp_set:Nn \l_tmpb_fp { \dim_to_fp:n { \baselineskip } }
%
\fp_set:Nn \l_wrap_figlines_fp
{ \fp_eval:n { ( \l_tmpa_fp / \l_tmpb_fp ) + .5 } }
\int_set:Nn \l_wrap_figlines_int
{ \fp_to_int:N \l_wrap_figlines_fp }
%
\iow_term:x { ...~wr-fig:~[BL:~\the\baselineskip] ~ ...}
\iow_term:x { ...~wr-fig:~[LINE-FP:~ \fp_use:N \l_wrap_figlines_fp]~ ...}
\iow_term:x { ...~wr-fig:~[LINE-INT:~ \int_use:N \l_wrap_figlines_int]~ ...}
}
\newbox \l_bio_text_box
\NewDocumentCommand \WrapFigure { o m } {
\__fig_defaults:
\IfNoValueTF { #1 } { } { \keys_set:nn { wrap / fig } { #1 } }
\stepcounter { ca_biography_ctr }
\__find_fig_height:n { #2 }
\dim_zero:N \l_tmpb_dim
\dim_set:Nn \l_tmpb_dim
{ \l_wrap_figwidth_dim + \l_wrap_fighspace_dim }
\int_gadd:Nn \l_wrap_figlines_int { \int_use:N \l_wrap_figlcorr_int }
\setlength { \columnsep } { 5pt }
\setlength { \intextsep } { 0pt }
% \mbox{}
\ifbool { dc } {
\xdef\Columnwidth{238.25pt}
}{
\xdef\Columnwidth{\the\textwidth}
}
\ifcsundef { cabio\theca_biography_ctr lines }
{
\setbox \l_bio_text_box = \vbox \bgroup
\hsize = \dimexpr ( \Columnwidth - 72.28pt )
}
{
\ifbool { dc } {
\int_gset:Nn \l_wrap_figlines_int
{ \csuse { cabio\theca_biography_ctr lines } }
} { }
\skip_vertical:N \l_above_bio_dim
\begin{wrapfigure}[\int_use:N \l_wrap_figlines_int]
{ \l_wrap_figpos_tl }
[ \dim_use:N \l_wrap_fighcorr_dim ]
{ \dim_use:N \l_tmpb_dim }
% \skip_vertical:N \l_wrap_figvcorr_dim
\includegraphics[width=\l_wrap_figwidth_dim]{#2}
\end{wrapfigure}
\setbox \l_bio_text_box = \vbox \bgroup
\hsize = \dimexpr ( \Columnwidth )
}
}
\cs_set:Nn \__fwidth: { 1in }
\cs_set:Nn \__fpos: { l }
%
% short authors/title
%
\tl_new:N \__short_authors:
\newcommand\shortauthors[1]{ \cs_gset:Nn \__short_authors: { #1 } }
\tl_new:N \__short_title:
\newcommand\shorttitle[1]{ \cs_gset:Nn \__short_title: { #1 } }
\newcounter { ca_biography_ctr }
\newbool { cas_no_pic_bio }
\boolfalse { cas_no_pic_bio }
\NewDocumentCommand \bio { O{} m }
{
\global \boolfalse { cas_no_pic_bio }
\casbiographyfont
\par \medskip \tl_set:Nn \l_tmpa_tl { #2 }
\tl_if_empty:NTF \l_tmpa_tl
{ \global \booltrue { cas_no_pic_bio } }
{ \WrapFigure [ #1 ]{ #2 } }
\noindent \ignorespaces
}
\int_new:N \l_ca_temp_inta
\NewDocumentCommand \endbio { } {
\ifbool{ cas_no_pic_bio } { } {
\egroup
% \fp_set:Nn \l_wrap_figlines_fp
% { \fp_eval:n { ( ( \l_tmpa_fp +
% \numexpr\dimexpr\the\ht\l_bio_text_box )
% / \l_tmpb_fp ) + .5 } }
\int_gset:Nn \l_ca_temp_inta
{ \numexpr\dimexpr(\the\ht\l_bio_text_box + 2\baselineskip )/
\dimexpr\the\baselineskip }
\iow_now:Nx \@auxout {
\string\csgdef{cabio\theca_biography_ctr lines}
{ \int_use:N \l_ca_temp_inta } }
\mbox{}\vspace*{-4.5pt}\noindent
\unvbox \l_bio_text_box }
}
\let\casbiographyfont\relax
\NewDocumentEnvironment { biography } { o m }
{
\IfValueTF { #1 }
{ \par\medskip \noindent \includegraphics[width=1in]{#1} }
{ }
\par\smallskip
\noindent \textbf{#2:}\enspace
}
{ }
\ExplSyntaxOff
%
% Customized Enumeration
%
\def\blstr#1{\gdef\@bslstr{#1}}
\def\@blstr{1}
\newdimen\leftMargin
\leftMargin=2em
\newtoks\@enLab %\newtoks\@enfont
\def\@enQmark{?}
\def\@enLabel#1#2{%
\edef\@enThe{\noexpand#1{\@enumctr}}%
\@enLab\expandafter{\the\@enLab\csname the\@enumctr\endcsname}%
\@enloop}
\def\@enSpace{\afterassignment\@enSp@ce\let\@tempa= }
\def\@enSp@ce{\@enLab\expandafter{\the\@enLab\space}\@enloop}
\def\@enGroup#1{\@enLab\expandafter{\the\@enLab{#1}}\@enloop}
\def\@enOther#1{\@enLab\expandafter{\the\@enLab#1}\@enloop}
\def\@enloop{\futurelet\@entemp\@enloop@}
\def\@enloop@{%
\ifx A\@entemp \def\@tempa{\@enLabel\Alph }\else
\ifx a\@entemp \def\@tempa{\@enLabel\alph }\else
\ifx i\@entemp \def\@tempa{\@enLabel\roman }\else
\ifx I\@entemp \def\@tempa{\@enLabel\Roman }\else
\ifx 1\@entemp \def\@tempa{\@enLabel\arabic}\else
\ifx \@sptoken\@entemp \let\@tempa\@enSpace \else
\ifx \bgroup\@entemp \let\@tempa\@enGroup \else
\ifx \@enum@\@entemp \let\@tempa\@gobble \else
\let\@tempa\@enOther
\fi\fi\fi\fi\fi\fi\fi\fi
\@tempa}
\newlength{\@sep} \newlength{\@@sep}
\setlength{\@sep}{.5\baselineskip plus.2\baselineskip
minus.2\baselineskip}
\setlength{\@@sep}{.1\baselineskip plus.01\baselineskip
minus.05\baselineskip}
\providecommand{\sfbc}{\rmfamily\upshape}
\providecommand{\sfn}{\rmfamily\upshape}
\def\@enfont{\ifnum \@enumdepth >1\let\@nxt\sfn \else\let\@nxt\sfbc \fi\@nxt}
\def\enumerate{%
\ifnum \@enumdepth >3 \@toodeep\else
\advance\@enumdepth \@ne
\edef\@enumctr{enum\romannumeral\the\@enumdepth}\fi
\@ifnextchar[{\@@enum@}{\@enum@}}
\def\@@enum@[#1]{%
\@enLab{}\let\@enThe\@enQmark
\@enloop#1\@enum@
\ifx\@enThe\@enQmark\@warning{The counter will not be printed.%
^^J\space\@spaces\@spaces\@spaces The label is: \the\@enLab}\fi
\expandafter\edef\csname label\@enumctr\endcsname{\the\@enLab}%
\expandafter\let\csname the\@enumctr\endcsname\@enThe
\csname c@\@enumctr\endcsname7
\expandafter\settowidth
\csname leftmargin\romannumeral\@enumdepth\endcsname
{\the\@enLab\hskip\labelsep}%
\@enum@}
\def\@enum@{\list{{\@enfont\csname label\@enumctr\endcsname}}%
{\usecounter{\@enumctr}\def\makelabel##1{\hss\llap{##1}}%
\ifnum \@enumdepth>1\setlength{\topsep}{\@@sep}\else
\setlength{\topsep}{\@sep}\fi
\ifnum \@enumdepth>1\setlength{\itemsep}{0pt plus1pt minus1pt}%
\else \setlength{\itemsep}{\@@sep}\fi
%\setlength\leftmargin{\leftMargin}%%%{1.8em}
\setlength{\parsep}{0pt plus1pt minus1pt}%
\setlength{\parskip}{0pt plus1pt minus1pt}
}}
\def\endenumerate{\par\ifnum \@enumdepth >1\addvspace{\@@sep}\else
\addvspace{\@sep}\fi \endlist}
\def\sitem{\@noitemargtrue\@item[\@itemlabel *]}
\def\itemize{\@ifnextchar[{\@Itemize}{\@Itemize[]}}
\def\@Itemize[#1]{%
\def\next{#1}%
\ifnum \@itemdepth >\thr@@\@toodeep\else
\advance\@itemdepth\@ne
\ifx\next\@empty\else\expandafter\def\csname
labelitem\romannumeral\the\@itemdepth\endcsname{#1}\fi%
\edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
\expandafter\list\csname\@itemitem\endcsname
{\def\makelabel##1{\hss\llap{##1}}}%
\fi
\setlength{\itemsep}{\@@sep}
\setlength{\parsep}{0pt plus1pt minus1pt}%
\setlength{\parskip}{0pt plus1pt minus1pt}
}
%
% Customized theorem
% (non-italic enunciations)
%
\def\newdefinition#1{%
\@ifnextchar[{\@odfn{#1}}{\@ndfn{#1}}}%]
\def\@ndfn#1#2{%
\@ifnextchar[{\@xndfn{#1}{#2}}{\@yndfn{#1}{#2}}}
\def\@xndfn#1#2[#3]{%
\expandafter\@ifdefinable\csname #1\endcsname
{\@definecounter{#1}\@newctr{#1}[#3]%
\expandafter\xdef\csname the#1\endcsname{%
\expandafter\noexpand\csname the#3\endcsname \@dfncountersep
\@dfncounter{#1}}%
\global\@namedef{#1}{\@dfn{#1}{#2}}%
\global\@namedef{end#1}{\@enddefinition}}}
\def\@yndfn#1#2{%
\expandafter\@ifdefinable\csname #1\endcsname
{\@definecounter{#1}%
\expandafter\xdef\csname the#1\endcsname{\@dfncounter{#1}}%
\global\@namedef{#1}{\@dfn{#1}{#2}}%
\global\@namedef{end#1}{\@enddefinition}}}
\def\@odfn#1[#2]#3{%
\@ifundefined{c@#2}{\@nocounterr{#2}}%
{\expandafter\@ifdefinable\csname #1\endcsname
{\global\@namedef{the#1}{\@nameuse{the#2}}
\global\@namedef{#1}{\@dfn{#2}{#3}}%
\global\@namedef{end#1}{\@enddefinition}}}}
\def\@dfn#1#2{%
\refstepcounter{#1}%
\@ifnextchar[{\@ydfn{#1}{#2}}{\@xdfn{#1}{#2}}}
\def\@xdfn#1#2{%
\@begindefinition{#2}{\csname the#1\endcsname}\ignorespaces}
\def\@ydfn#1#2[#3]{%
\@opargbegindefinition{#2}{\csname the#1\endcsname}{#3}\ignorespaces}
\def\@dfncounter#1{\noexpand\arabic{#1}}
\def\@dfncountersep{.}
\def\@begindefinition#1#2{\trivlist
\item[\hskip\labelsep{\bfseries #1\ #2.}]\upshape}
\def\@opargbegindefinition#1#2#3{\trivlist
\item[\hskip\labelsep{\bfseries #1\ #2\ (#3).}]\upshape}
\def\@enddefinition{\endtrivlist}
\def\@begintheorem#1#2{\trivlist
\let\baselinestretch\@blstr
\item[\hskip \labelsep{\bfseries #1\ #2.}]\itshape}
\def\@opargbegintheorem#1#2#3{\trivlist
\let\baselinestretch\@blstr
\item[\hskip \labelsep{\bfseries #1\ #2\ (#3).}]\itshape}
%
% Unnumbered roman proofs
%
\def\newproof#1{%
\@ifnextchar[{\@oprf{#1}}{\@nprf{#1}}}
\def\@nprf#1#2{%
\@ifnextchar[{\@xnprf{#1}{#2}}{\@ynprf{#1}{#2}}}
\def\@xnprf#1#2[#3]{%
\expandafter\@ifdefinable\csname #1\endcsname
{\@definecounter{#1}\@newctr{#1}[#3]%
\expandafter\xdef\csname the#1\endcsname{%
\expandafter\noexpand\csname the#3\endcsname \@prfcountersep
\@prfcounter{#1}}%
\global\@namedef{#1}{\@prf{#1}{#2}}%
\global\@namedef{end#1}{\@endproof}}}
\def\@ynprf#1#2{%
\expandafter\@ifdefinable\csname #1\endcsname
{\@definecounter{#1}%
\expandafter\xdef\csname the#1\endcsname{\@prfcounter{#1}}%
\global\@namedef{#1}{\@prf{#1}{#2}}%
\global\@namedef{end#1}{\@endproof}}}
\def\@oprf#1[#2]#3{%
\@ifundefined{c@#2}{\@nocounterr{#2}}%
{\expandafter\@ifdefinable\csname #1\endcsname
{\global\@namedef{the#1}{\@nameuse{the#2}}%
\global\@namedef{#1}{\@prf{#2}{#3}}%
\global\@namedef{end#1}{\@endproof}}}}
\def\@prf#1#2{%
\refstepcounter{#1}%
\@ifnextchar[{\@yprf{#1}{#2}}{\@xprf{#1}{#2}}}
\def\@xprf#1#2{%
\@beginproof{#2}{\csname the#1\endcsname}\ignorespaces}
\def\@yprf#1#2[#3]{%
\@opargbeginproof{#2}{\csname the#1\endcsname}{#3}\ignorespaces}
\def\@prfcounter#1{\noexpand\arabic{#1}}
\def\@prfcountersep{.}
\def\@beginproof#1#2{\trivlist\let\baselinestretch\@blstr
\item[\hskip \labelsep{\scshape #1.}]\rmfamily}
\def\@opargbeginproof#1#2#3{\trivlist\let\baselinestretch\@blstr
\item[\hskip \labelsep{\scshape #1\ (#3).}]\rmfamily}
\def\@endproof{\endtrivlist}
\newcommand*{\qed}{\hbox{}\hfill$\Box$}
\xspaceaddexceptions{]}
\ExplSyntaxOn
%%
%% Bibliography
%%
% \RequirePackage[numbers,sort&compress]{natbib}
\RequirePackage[numbers]{natbib}
\AtBeginDocument{\bibsep=0pt}
\bibliographystyle{elsarticle-num-names}
% \bibliographystyle{elsarticle-num}
%%
%% Fonts
%%
\ifpdftex
\RequirePackage[T1]{fontenc}
\fi
%% Main font
\file_if_exist:nTF { libertinus.sty }
{
\RequirePackage{libertinus}
}{
\iow_term:x { Libertinus fonts are not available }
}
%% Math font for pdfLaTeX
% \ifpdftex
% \file_if_exist:nTF { libertinust1math.sty }
% {
% \RequirePackage{libertinust1math}
% }{
% \iow_term:x { Libertinus math fonts are not available }
% }
% \fi
\ExplSyntaxOff
%%
%% Compatibility workaround
%%
%% Old font naming commands for Koma class
\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
\endinput
%
% End of class 'ceurart'
%
%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% coding: utf-8-unix
%%% End: