From f14e5c50cf028a4e5f35bab0c9839ebda787a3e2 Mon Sep 17 00:00:00 2001 From: Charles Tapley Hoyt Date: Tue, 17 Sep 2024 11:41:37 +0200 Subject: [PATCH] Add contributor roles Closes #73 --- CHANGELOG.md | 1 + data/defaults/pdf.yaml | 2 + data/defaults/preprint.yaml | 3 + data/filters/prepare-credit.lua | 86 +++++++++++++++++++ data/templates/default.latex | 9 ++ data/templates/preprint.latex | 9 ++ example/paper.md | 79 +++++++++++++++++ test/expected-draft/paper.jats/paper.jats | 100 ++++++++++++++++++++++ test/expected-draft/paper.tex | 98 +++++++++++++++++++++ test/expected-pub/paper.jats/paper.jats | 100 ++++++++++++++++++++++ test/expected-pub/paper.tex | 98 +++++++++++++++++++++ 11 files changed, 585 insertions(+) create mode 100644 data/filters/prepare-credit.lua diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e4e58a..94803d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ## UNRELEASED +- Support for annotating author roles with the Contribution Role Taxonomy (CRediT) (Charles Tapley Hoyt) - Fix bug in application of `prepare-affiliations.lua` filter (Charles Tapley Hoyt) - Fix a bug in the injection of `SOURCE_DATE_EPOCH` (https://github.com/openjournals/inara/pull/86) in tests - Fix test files (https://github.com/openjournals/inara/pull/86, https://github.com/openjournals/inara/pull/85) diff --git a/data/defaults/pdf.yaml b/data/defaults/pdf.yaml index 01b2096..0f4f6b9 100644 --- a/data/defaults/pdf.yaml +++ b/data/defaults/pdf.yaml @@ -11,6 +11,8 @@ filters: path: self-citation.lua - type: lua path: fix-bibentry-spacing.lua + - type: lua + path: prepare-credit.lua variables: # styling options colorlinks: true diff --git a/data/defaults/preprint.yaml b/data/defaults/preprint.yaml index be33e27..10465f4 100644 --- a/data/defaults/preprint.yaml +++ b/data/defaults/preprint.yaml @@ -1,6 +1,9 @@ to: latex output-file: paper.preprint.tex template: preprint.latex +filters: + - type: lua + path: prepare-credit.lua variables: # styling options colorlinks: true diff --git a/data/filters/prepare-credit.lua b/data/filters/prepare-credit.lua new file mode 100644 index 0000000..9f7ed67 --- /dev/null +++ b/data/filters/prepare-credit.lua @@ -0,0 +1,86 @@ +-- Checks if any contributor information is available + +roles = pandoc.List { + "conceptualization", + "data-curation", + "formal-analysis", + "funding-acquisition", + "investigation", + "methodology", + "project-administration", + "resources", + "software", + "supervision", + "validation", + "visualization", + "writing-original-draft", + "writing-review-editing" +} + +degrees = pandoc.List { + "Lead", + "Supporting", + "Equal" +} + +function invalidRole(str) + return not roles:includes(str) +end + +function invalidDegree(str) + return not degrees:includes(str) +end + +function join_with_commas_and(list) + local len = #list + if len == 0 then + return "" + elseif len == 1 then + return list[1] + elseif len == 2 then + return list[1] .. " and " .. list[2] + else + local result = table.concat(list, ", ", 1, len - 1) + return result .. ", and " .. list[len] + end +end + +function capitalize_first_letter(str) + return str:sub(1, 1):upper() .. str:sub(2) +end + +function clean_role_dict(d) + if d.type then + return d + else + return {["type"] = pandoc.utils.stringify(d)} + end +end + +function Meta (meta) + meta.hasRoles = false + for _, author in ipairs(meta.authors or {}) do + if author.roles then + meta.hasRoles = true + roleList = {} + for _, roleDict in ipairs(author.roles) do + roleDict = clean_role_dict(roleDict) + role = pandoc.utils.stringify(roleDict.type) + if invalidRole(role) then + error("invalid role for author " .. author.name .. ": " .. role) + end + if roleDict.degree then + degree = capitalize_first_letter(pandoc.utils.stringify(roleDict.degree)) + if invalidDegree(degree) then + error("invalid degree for author " .. author.name .. ": " .. degree) + end + table.insert(roleList, role .. " (" .. degree .. ")") + else + table.insert(roleList, role) + end + end + author.rolesString = join_with_commas_and(roleList) + end + end + return meta +end diff --git a/data/templates/default.latex b/data/templates/default.latex index a0f207a..d7ad6ce 100644 --- a/data/templates/default.latex +++ b/data/templates/default.latex @@ -557,6 +557,15 @@ $if(lof)$ $endif$ $body$ +$if(hasRoles)$ +\section{Author Contributions}\label{author-contributions} +\begin{enumerate} +$for(authors)$ +\item $it.name$ - $it.rolesString$ +$endfor$ +\end{enumerate} +$endif$ + $if(natbib)$ $if(bibliography)$ $if(biblio-title)$ diff --git a/data/templates/preprint.latex b/data/templates/preprint.latex index 8a9e7f0..9853b9a 100644 --- a/data/templates/preprint.latex +++ b/data/templates/preprint.latex @@ -438,6 +438,15 @@ $if(has-frontmatter)$ $endif$ $body$ +$if(hasRoles)$ +\section{Author Contributions}\label{author-contributions} +\begin{enumerate} +$for(authors)$ +\item $it.name$ - $it.rolesString$ +$endfor$ +\end{enumerate} +$endif$ + $if(has-frontmatter)$ \backmatter $endif$ diff --git a/example/paper.md b/example/paper.md index 9c2e3fc..672be95 100644 --- a/example/paper.md +++ b/example/paper.md @@ -7,14 +7,27 @@ authors: affiliation: "1, 2, 4" orcid: 0000-0002-9455-0796 corresponding: true + roles: + - type: software + degree: equal + - 'methodology' - name: Juanjo Bazán orcid: 0000-0001-7699-3983 affiliation: [1] equal-contrib: true + roles: + - type: software + degree: equal - name: Arfon M. Smith orcid: 0000-0002-3957-2474 affiliation: [1, 3] equal-contrib: true + roles: + - type: software + degree: equal + - type: supervision + degree: lead + affiliations: - index: 1 name: Open Journals @@ -365,6 +378,72 @@ authors: +## Contributor Roles + +The [Contribution Role Taxonomy (CRediT)](https://credit.niso.org/contributor-roles) defines +fourteen standard roles of authors. Each author can be annotated with one or more contribution +roles. + +1. [conceptualization](https://credit.niso.org/contributor-roles/conceptualization) +2. [data-curation](https://credit.niso.org/contributor-roles/data-curation) +3. [formal-analysis](https://credit.niso.org/contributor-roles/formal-analysis) +4. [funding-acquisition](https://credit.niso.org/contributor-roles/funding-acquisition) +5. [investigation](https://credit.niso.org/contributor-roles/investigation) +6. [methodology](https://credit.niso.org/contributor-roles/methodology) +7. [project-administration](https://credit.niso.org/contributor-roles/project-administration) +8. [resources](https://credit.niso.org/contributor-roles/resources) +9. [software](https://credit.niso.org/contributor-roles/software) +10. [supervision](https://credit.niso.org/contributor-roles/supervision) +11. [validation](https://credit.niso.org/contributor-roles/validation) +12. [visualization](https://credit.niso.org/contributor-roles/visualization) +13. [writing-original-draft](https://credit.niso.org/contributor-roles/writing-original-draft) +14. [writing-review-editing](https://credit.niso.org/contributor-roles/writing-review-editing) + +JATS also specifies three degrees which can be used to quantify the impact of a contribution: + +1. `Lead` +2. `Supporting` +3. `Equal` - for use if multiple equivalent leads + +Together, these can be used to identify which authors materially contributed to the paper, +such as through `formal-analysis` or `data-curation` and which authors contributed immaterially, +such as through `supervision`. It also allows for saying if multiple people made the same +kind of contribution, who took the lead. + +```yaml +authors: + - name: John Doe + affiliation: [ 1 ] + roles: + - type: 'formal-analysis' + degree: 'lead' + + - name: John Boss + affiliation: [ 1 ] + roles: + - type: 'funding-acquisition' + degree: 'lead' + - type: 'supervision' + degree: 'lead' +``` + +Roles are optional, and within roles, degrees are optional. It's possible to shorthand +roles by using strings directly: + +```yaml +authors: + - name: John Doe + affiliation: [ 1 ] + roles: + - 'formal-analysis' + + - name: John Boss + affiliation: [ 1 ] + roles: + - 'funding-acquisition' + - 'supervision' +``` + ## Affiliations Each affiliation requires an `index` and `name`. diff --git a/test/expected-draft/paper.jats/paper.jats b/test/expected-draft/paper.jats/paper.jats index 6d114ce..06a4c8c 100644 --- a/test/expected-draft/paper.jats/paper.jats +++ b/test/expected-draft/paper.jats/paper.jats @@ -520,6 +520,106 @@ Software should use an OSI-approved license.

+ + Contributor Roles +

The + Contribution + Role Taxonomy (CRediT) defines fourteen standard roles of + authors. Each author can be annotated with one or more contribution + roles.

+ + +

conceptualization

+
+ +

data-curation

+
+ +

formal-analysis

+
+ +

funding-acquisition

+
+ +

investigation

+
+ +

methodology

+
+ +

project-administration

+
+ +

resources

+
+ +

software

+
+ +

supervision

+
+ +

validation

+
+ +

visualization

+
+ +

writing-original-draft

+
+ +

writing-review-editing

+
+
+

JATS also specifies three degrees which can be used to quantify + the impact of a contribution:

+ + +

Lead

+
+ +

Supporting

+
+ +

Equal - for use if multiple equivalent + leads

+
+
+

Together, these can be used to identify which authors materially + contributed to the paper, such as through + formal-analysis or + data-curation and which authors contributed + immaterially, such as through supervision. It + also allows for saying if multiple people made the same kind of + contribution, who took the lead.

+ authors: + - name: John Doe + affiliation: [ 1 ] + roles: + - type: 'formal-analysis' + degree: 'lead' + + - name: John Boss + affiliation: [ 1 ] + roles: + - type: 'funding-acquisition' + degree: 'lead' + - type: 'supervision' + degree: 'lead' +

Roles are optional, and within roles, degrees are optional. It’s + possible to shorthand roles by using strings directly:

+ authors: + - name: John Doe + affiliation: [ 1 ] + roles: + - 'formal-analysis' + + - name: John Boss + affiliation: [ 1 ] + roles: + - 'funding-acquisition' + - 'supervision' +
Affiliations

Each affiliation requires an index and diff --git a/test/expected-draft/paper.tex b/test/expected-draft/paper.tex index b44113a..4cea4e5 100644 --- a/test/expected-draft/paper.tex +++ b/test/expected-draft/paper.tex @@ -848,6 +848,103 @@ \subsubsection{Example}\label{example} \end{Highlighting} \end{Shaded} +\subsection{Contributor Roles}\label{contributor-roles} + +The \href{https://credit.niso.org/contributor-roles}{Contribution Role +Taxonomy (CRediT)} defines fourteen standard roles of authors. Each +author can be annotated with one or more contribution roles. + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\tightlist +\item + \href{https://credit.niso.org/contributor-roles/conceptualization}{conceptualization} +\item + \href{https://credit.niso.org/contributor-roles/data-curation}{data-curation} +\item + \href{https://credit.niso.org/contributor-roles/formal-analysis}{formal-analysis} +\item + \href{https://credit.niso.org/contributor-roles/funding-acquisition}{funding-acquisition} +\item + \href{https://credit.niso.org/contributor-roles/investigation}{investigation} +\item + \href{https://credit.niso.org/contributor-roles/methodology}{methodology} +\item + \href{https://credit.niso.org/contributor-roles/project-administration}{project-administration} +\item + \href{https://credit.niso.org/contributor-roles/resources}{resources} +\item + \href{https://credit.niso.org/contributor-roles/software}{software} +\item + \href{https://credit.niso.org/contributor-roles/supervision}{supervision} +\item + \href{https://credit.niso.org/contributor-roles/validation}{validation} +\item + \href{https://credit.niso.org/contributor-roles/visualization}{visualization} +\item + \href{https://credit.niso.org/contributor-roles/writing-original-draft}{writing-original-draft} +\item + \href{https://credit.niso.org/contributor-roles/writing-review-editing}{writing-review-editing} +\end{enumerate} + +JATS also specifies three degrees which can be used to quantify the +impact of a contribution: + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\tightlist +\item + \texttt{Lead} +\item + \texttt{Supporting} +\item + \texttt{Equal} - for use if multiple equivalent leads +\end{enumerate} + +Together, these can be used to identify which authors materially +contributed to the paper, such as through \texttt{formal-analysis} or +\texttt{data-curation} and which authors contributed immaterially, such +as through \texttt{supervision}. It also allows for saying if multiple +people made the same kind of contribution, who took the lead. + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{authors}\KeywordTok{:} +\AttributeTok{ }\KeywordTok{{-}}\AttributeTok{ }\FunctionTok{name}\KeywordTok{:}\AttributeTok{ John Doe} +\AttributeTok{ }\FunctionTok{affiliation}\KeywordTok{:}\AttributeTok{ }\KeywordTok{[}\AttributeTok{ }\DecValTok{1}\AttributeTok{ }\KeywordTok{]} +\AttributeTok{ }\FunctionTok{roles}\KeywordTok{:} +\AttributeTok{ }\KeywordTok{{-}}\AttributeTok{ }\FunctionTok{type}\KeywordTok{:}\AttributeTok{ }\StringTok{\textquotesingle{}formal{-}analysis\textquotesingle{}} +\AttributeTok{ }\FunctionTok{degree}\KeywordTok{:}\AttributeTok{ }\StringTok{\textquotesingle{}lead\textquotesingle{}} + +\AttributeTok{ }\KeywordTok{{-}}\AttributeTok{ }\FunctionTok{name}\KeywordTok{:}\AttributeTok{ John Boss} +\AttributeTok{ }\FunctionTok{affiliation}\KeywordTok{:}\AttributeTok{ }\KeywordTok{[}\AttributeTok{ }\DecValTok{1}\AttributeTok{ }\KeywordTok{]} +\AttributeTok{ }\FunctionTok{roles}\KeywordTok{:} +\AttributeTok{ }\KeywordTok{{-}}\AttributeTok{ }\FunctionTok{type}\KeywordTok{:}\AttributeTok{ }\StringTok{\textquotesingle{}funding{-}acquisition\textquotesingle{}} +\AttributeTok{ }\FunctionTok{degree}\KeywordTok{:}\AttributeTok{ }\StringTok{\textquotesingle{}lead\textquotesingle{}} +\AttributeTok{ }\KeywordTok{{-}}\AttributeTok{ }\FunctionTok{type}\KeywordTok{:}\AttributeTok{ }\StringTok{\textquotesingle{}supervision\textquotesingle{}} +\AttributeTok{ }\FunctionTok{degree}\KeywordTok{:}\AttributeTok{ }\StringTok{\textquotesingle{}lead\textquotesingle{}} +\end{Highlighting} +\end{Shaded} + +Roles are optional, and within roles, degrees are optional. It's +possible to shorthand roles by using strings directly: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{authors}\KeywordTok{:} +\AttributeTok{ }\KeywordTok{{-}}\AttributeTok{ }\FunctionTok{name}\KeywordTok{:}\AttributeTok{ John Doe} +\AttributeTok{ }\FunctionTok{affiliation}\KeywordTok{:}\AttributeTok{ }\KeywordTok{[}\AttributeTok{ }\DecValTok{1}\AttributeTok{ }\KeywordTok{]} +\AttributeTok{ }\FunctionTok{roles}\KeywordTok{:} +\AttributeTok{ }\KeywordTok{{-}}\AttributeTok{ }\StringTok{\textquotesingle{}formal{-}analysis\textquotesingle{}} + +\AttributeTok{ }\KeywordTok{{-}}\AttributeTok{ }\FunctionTok{name}\KeywordTok{:}\AttributeTok{ John Boss} +\AttributeTok{ }\FunctionTok{affiliation}\KeywordTok{:}\AttributeTok{ }\KeywordTok{[}\AttributeTok{ }\DecValTok{1}\AttributeTok{ }\KeywordTok{]} +\AttributeTok{ }\FunctionTok{roles}\KeywordTok{:} +\AttributeTok{ }\KeywordTok{{-}}\AttributeTok{ }\StringTok{\textquotesingle{}funding{-}acquisition\textquotesingle{}} +\AttributeTok{ }\KeywordTok{{-}}\AttributeTok{ }\StringTok{\textquotesingle{}supervision\textquotesingle{}} +\end{Highlighting} +\end{Shaded} + \subsection{Affiliations}\label{affiliations} Each affiliation requires an \texttt{index} and \texttt{name}. @@ -1029,4 +1126,5 @@ \section{Behind the scenes}\label{behind-the-scenes} \end{CSLReferences} + \end{document} diff --git a/test/expected-pub/paper.jats/paper.jats b/test/expected-pub/paper.jats/paper.jats index bf895b1..e2abebd 100644 --- a/test/expected-pub/paper.jats/paper.jats +++ b/test/expected-pub/paper.jats/paper.jats @@ -520,6 +520,106 @@ Software should use an OSI-approved license.

+ + Contributor Roles +

The + Contribution + Role Taxonomy (CRediT) defines fourteen standard roles of + authors. Each author can be annotated with one or more contribution + roles.

+ + +

conceptualization

+
+ +

data-curation

+
+ +

formal-analysis

+
+ +

funding-acquisition

+
+ +

investigation

+
+ +

methodology

+
+ +

project-administration

+
+ +

resources

+
+ +

software

+
+ +

supervision

+
+ +

validation

+
+ +

visualization

+
+ +

writing-original-draft

+
+ +

writing-review-editing

+
+
+

JATS also specifies three degrees which can be used to quantify + the impact of a contribution:

+ + +

Lead

+
+ +

Supporting

+
+ +

Equal - for use if multiple equivalent + leads

+
+
+

Together, these can be used to identify which authors materially + contributed to the paper, such as through + formal-analysis or + data-curation and which authors contributed + immaterially, such as through supervision. It + also allows for saying if multiple people made the same kind of + contribution, who took the lead.

+ authors: + - name: John Doe + affiliation: [ 1 ] + roles: + - type: 'formal-analysis' + degree: 'lead' + + - name: John Boss + affiliation: [ 1 ] + roles: + - type: 'funding-acquisition' + degree: 'lead' + - type: 'supervision' + degree: 'lead' +

Roles are optional, and within roles, degrees are optional. It’s + possible to shorthand roles by using strings directly:

+ authors: + - name: John Doe + affiliation: [ 1 ] + roles: + - 'formal-analysis' + + - name: John Boss + affiliation: [ 1 ] + roles: + - 'funding-acquisition' + - 'supervision' +
Affiliations

Each affiliation requires an index and diff --git a/test/expected-pub/paper.tex b/test/expected-pub/paper.tex index 1bacab4..f71215f 100644 --- a/test/expected-pub/paper.tex +++ b/test/expected-pub/paper.tex @@ -846,6 +846,103 @@ \subsubsection{Example}\label{example} \end{Highlighting} \end{Shaded} +\subsection{Contributor Roles}\label{contributor-roles} + +The \href{https://credit.niso.org/contributor-roles}{Contribution Role +Taxonomy (CRediT)} defines fourteen standard roles of authors. Each +author can be annotated with one or more contribution roles. + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\tightlist +\item + \href{https://credit.niso.org/contributor-roles/conceptualization}{conceptualization} +\item + \href{https://credit.niso.org/contributor-roles/data-curation}{data-curation} +\item + \href{https://credit.niso.org/contributor-roles/formal-analysis}{formal-analysis} +\item + \href{https://credit.niso.org/contributor-roles/funding-acquisition}{funding-acquisition} +\item + \href{https://credit.niso.org/contributor-roles/investigation}{investigation} +\item + \href{https://credit.niso.org/contributor-roles/methodology}{methodology} +\item + \href{https://credit.niso.org/contributor-roles/project-administration}{project-administration} +\item + \href{https://credit.niso.org/contributor-roles/resources}{resources} +\item + \href{https://credit.niso.org/contributor-roles/software}{software} +\item + \href{https://credit.niso.org/contributor-roles/supervision}{supervision} +\item + \href{https://credit.niso.org/contributor-roles/validation}{validation} +\item + \href{https://credit.niso.org/contributor-roles/visualization}{visualization} +\item + \href{https://credit.niso.org/contributor-roles/writing-original-draft}{writing-original-draft} +\item + \href{https://credit.niso.org/contributor-roles/writing-review-editing}{writing-review-editing} +\end{enumerate} + +JATS also specifies three degrees which can be used to quantify the +impact of a contribution: + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\tightlist +\item + \texttt{Lead} +\item + \texttt{Supporting} +\item + \texttt{Equal} - for use if multiple equivalent leads +\end{enumerate} + +Together, these can be used to identify which authors materially +contributed to the paper, such as through \texttt{formal-analysis} or +\texttt{data-curation} and which authors contributed immaterially, such +as through \texttt{supervision}. It also allows for saying if multiple +people made the same kind of contribution, who took the lead. + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{authors}\KeywordTok{:} +\AttributeTok{ }\KeywordTok{{-}}\AttributeTok{ }\FunctionTok{name}\KeywordTok{:}\AttributeTok{ John Doe} +\AttributeTok{ }\FunctionTok{affiliation}\KeywordTok{:}\AttributeTok{ }\KeywordTok{[}\AttributeTok{ }\DecValTok{1}\AttributeTok{ }\KeywordTok{]} +\AttributeTok{ }\FunctionTok{roles}\KeywordTok{:} +\AttributeTok{ }\KeywordTok{{-}}\AttributeTok{ }\FunctionTok{type}\KeywordTok{:}\AttributeTok{ }\StringTok{\textquotesingle{}formal{-}analysis\textquotesingle{}} +\AttributeTok{ }\FunctionTok{degree}\KeywordTok{:}\AttributeTok{ }\StringTok{\textquotesingle{}lead\textquotesingle{}} + +\AttributeTok{ }\KeywordTok{{-}}\AttributeTok{ }\FunctionTok{name}\KeywordTok{:}\AttributeTok{ John Boss} +\AttributeTok{ }\FunctionTok{affiliation}\KeywordTok{:}\AttributeTok{ }\KeywordTok{[}\AttributeTok{ }\DecValTok{1}\AttributeTok{ }\KeywordTok{]} +\AttributeTok{ }\FunctionTok{roles}\KeywordTok{:} +\AttributeTok{ }\KeywordTok{{-}}\AttributeTok{ }\FunctionTok{type}\KeywordTok{:}\AttributeTok{ }\StringTok{\textquotesingle{}funding{-}acquisition\textquotesingle{}} +\AttributeTok{ }\FunctionTok{degree}\KeywordTok{:}\AttributeTok{ }\StringTok{\textquotesingle{}lead\textquotesingle{}} +\AttributeTok{ }\KeywordTok{{-}}\AttributeTok{ }\FunctionTok{type}\KeywordTok{:}\AttributeTok{ }\StringTok{\textquotesingle{}supervision\textquotesingle{}} +\AttributeTok{ }\FunctionTok{degree}\KeywordTok{:}\AttributeTok{ }\StringTok{\textquotesingle{}lead\textquotesingle{}} +\end{Highlighting} +\end{Shaded} + +Roles are optional, and within roles, degrees are optional. It's +possible to shorthand roles by using strings directly: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{authors}\KeywordTok{:} +\AttributeTok{ }\KeywordTok{{-}}\AttributeTok{ }\FunctionTok{name}\KeywordTok{:}\AttributeTok{ John Doe} +\AttributeTok{ }\FunctionTok{affiliation}\KeywordTok{:}\AttributeTok{ }\KeywordTok{[}\AttributeTok{ }\DecValTok{1}\AttributeTok{ }\KeywordTok{]} +\AttributeTok{ }\FunctionTok{roles}\KeywordTok{:} +\AttributeTok{ }\KeywordTok{{-}}\AttributeTok{ }\StringTok{\textquotesingle{}formal{-}analysis\textquotesingle{}} + +\AttributeTok{ }\KeywordTok{{-}}\AttributeTok{ }\FunctionTok{name}\KeywordTok{:}\AttributeTok{ John Boss} +\AttributeTok{ }\FunctionTok{affiliation}\KeywordTok{:}\AttributeTok{ }\KeywordTok{[}\AttributeTok{ }\DecValTok{1}\AttributeTok{ }\KeywordTok{]} +\AttributeTok{ }\FunctionTok{roles}\KeywordTok{:} +\AttributeTok{ }\KeywordTok{{-}}\AttributeTok{ }\StringTok{\textquotesingle{}funding{-}acquisition\textquotesingle{}} +\AttributeTok{ }\KeywordTok{{-}}\AttributeTok{ }\StringTok{\textquotesingle{}supervision\textquotesingle{}} +\end{Highlighting} +\end{Shaded} + \subsection{Affiliations}\label{affiliations} Each affiliation requires an \texttt{index} and \texttt{name}. @@ -1027,4 +1124,5 @@ \section{Behind the scenes}\label{behind-the-scenes} \end{CSLReferences} + \end{document}