Skip to content

Commit 4471ea2

Browse files
committed
Output chapter authors for single file output
1 parent 488ec95 commit 4471ea2

File tree

7 files changed

+168
-90
lines changed

7 files changed

+168
-90
lines changed

src/project/types/book/book-render.ts

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ import {
8585
import { pathWithForwardSlashes } from "../../../core/path.ts";
8686
import { kDateFormat } from "../website/listing/website-listing-template.ts";
8787
import { removePandocTo } from "../../../command/render/flags.ts";
88+
import { resourcePath } from "../../../core/resources.ts";
8889

8990
export function bookPandocRenderer(
9091
options: RenderOptions,
@@ -349,13 +350,21 @@ async function mergeExecutedFiles(
349350
const partitioned = partitionYamlFrontMatter(
350351
file.executeResult.markdown,
351352
);
352-
const yaml = partitioned?.yaml
353-
? readYamlFromMarkdown(partitioned?.yaml)
354-
: undefined;
355-
const frontTitle = frontMatterTitle(yaml);
356-
const titleMarkdown = frontTitle ? `# ${frontTitle}\n\n` : "";
357353

358-
itemMarkdown = bookItemMetadata(project, item, file) + titleMarkdown +
354+
const titleBlockPath = resourcePath(
355+
"projects/book/pandoc/title-block.md",
356+
);
357+
const titleAttr = `template='${titleBlockPath}'`;
358+
359+
const titleBlockMd = partitioned?.yaml
360+
? "```````{.quarto-title-block " + titleAttr + "}\n" +
361+
partitioned?.yaml +
362+
"\n```````"
363+
: "";
364+
365+
console.log(titleBlockMd);
366+
367+
itemMarkdown = bookItemMetadata(project, item, file) + titleBlockMd +
359368
(partitioned?.markdown || file.executeResult.markdown);
360369
} else {
361370
throw new Error(

src/resources/filters/authors/authors.lua

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ function import(script)
1515
local path = PANDOC_SCRIPT_FILE:match("(.*[/\\])")
1616
dofile(path .. script)
1717
end
18-
import("meta.lua")
18+
1919
import("../common/pandoc.lua")
2020
import("../common/string.lua")
2121
import("../common/table.lua")
@@ -25,10 +25,14 @@ import("../common/base64.lua")
2525
import("../common/meta.lua")
2626
import("../common/debug.lua")
2727
import("../common/params.lua")
28+
import("../common/authors.lua")
2829
-- [/import]
2930

3031
initParams()
3132

3233
return {
33-
authorsMeta()
34+
Meta = function(meta)
35+
return processAuthorMeta(meta)
36+
end
3437
}
38+

src/resources/filters/authors/meta.lua renamed to src/resources/filters/common/authors.lua

Lines changed: 76 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -140,99 +140,96 @@ local kAffiliationAliasedFields = {
140140
-- a simple incremental counter that can be used for things like note numbers
141141
local kNumber = "number"
142142

143-
-- Normalizes author metadata from the 'input' field into
144-
-- consistently structured metadata in the 'output' field
145-
function authorsMeta()
146-
return {
147-
Meta = function(meta)
148-
if not _quarto.format.isHtmlOutput() and not _quarto.format.isLatexOutput() and not _quarto.format.isIpynbOutput() then
149-
return
150-
end
143+
function processAuthorMeta(meta, authorInput)
144+
if not _quarto.format.isHtmlOutput() and not _quarto.format.isLatexOutput() and not _quarto.format.isIpynbOutput() then
145+
return
146+
end
151147

152-
local authorsRaw = meta[kAuthorInput]
153-
154-
-- the normalized authors
155-
local authors = {}
156-
157-
-- the normalized affilations
158-
local affiliations = {}
159-
160-
if authorsRaw then
161-
for i,v in ipairs(authorsRaw) do
162-
163-
local authorAndAffiliations = processAuthor(v)
164-
165-
-- initialize the author
166-
local author = authorAndAffiliations.author
167-
local authorAffils = authorAndAffiliations.affiliations
168-
169-
-- assign an id to this author if one isn't defined
170-
local authorNumber = #authors + 1
171-
if author[kId] == nil then
172-
author[kId] = authorNumber
173-
end
174-
175-
-- go through the affilations and add any to the list
176-
-- assigning an id if needed
177-
if authorAffils ~= nil then
178-
for i,v in ipairs(authorAffils) do
179-
local affiliation = maybeAddAffiliation(v, affiliations)
180-
setAffiliation(author, { ref=affiliation[kId] })
181-
end
182-
end
148+
if authorInput == nil then
149+
authorInput = kAuthorInput
150+
end
151+
local authorsRaw = meta[authorInput]
152+
153+
-- the normalized authors
154+
local authors = {}
183155

184-
-- add this author to the list of authors
185-
authors[authorNumber] = author
186-
end
187-
end
156+
-- the normalized affilations
157+
local affiliations = {}
188158

189-
-- Add any attributes that are explicitly specified
190-
local affiliationsRaw = meta[kAffiliations]
191-
if affiliationsRaw then
192-
local explicitAffils = processAffiliation(nil, affiliationsRaw)
193-
if explicitAffils then
194-
for i,affiliation in ipairs(explicitAffils) do
195-
maybeAddAffiliation(affiliation, affiliations)
196-
end
159+
if authorsRaw then
160+
for i,v in ipairs(authorsRaw) do
161+
162+
local authorAndAffiliations = processAuthor(v)
163+
164+
-- initialize the author
165+
local author = authorAndAffiliations.author
166+
local authorAffils = authorAndAffiliations.affiliations
167+
168+
-- assign an id to this author if one isn't defined
169+
local authorNumber = #authors + 1
170+
if author[kId] == nil then
171+
author[kId] = authorNumber
172+
end
173+
174+
-- go through the affilations and add any to the list
175+
-- assigning an id if needed
176+
if authorAffils ~= nil then
177+
for i,v in ipairs(authorAffils) do
178+
local affiliation = maybeAddAffiliation(v, affiliations)
179+
setAffiliation(author, { ref=affiliation[kId] })
197180
end
198181
end
199182

200-
-- validate that every author affiliation has a corresponding
201-
-- affiliation defined in the affiliations key
202-
validateRefs(authors, affiliations)
183+
-- add this author to the list of authors
184+
authors[authorNumber] = author
185+
end
186+
end
203187

204-
-- number the authors and affiliations
205-
for i,affil in ipairs(affiliations) do
206-
affil[kNumber] = i
207-
end
208-
for i,auth in ipairs(authors) do
209-
auth[kNumber] = i
188+
-- Add any attributes that are explicitly specified
189+
local affiliationsRaw = meta[kAffiliations]
190+
if affiliationsRaw then
191+
local explicitAffils = processAffiliation(nil, affiliationsRaw)
192+
if explicitAffils then
193+
for i,affiliation in ipairs(explicitAffils) do
194+
maybeAddAffiliation(affiliation, affiliations)
210195
end
196+
end
197+
end
211198

212-
-- Write the normalized data back to metadata
213-
if #authors ~= 0 then
214-
meta[kAuthorOutput] = authors
215-
end
199+
-- validate that every author affiliation has a corresponding
200+
-- affiliation defined in the affiliations key
201+
validateRefs(authors, affiliations)
216202

217-
if #affiliations ~= 0 then
218-
meta[kAffiliations] = affiliations
219-
end
203+
-- number the authors and affiliations
204+
for i,affil in ipairs(affiliations) do
205+
affil[kNumber] = i
206+
end
207+
for i,auth in ipairs(authors) do
208+
auth[kNumber] = i
209+
end
220210

221-
-- Write the de-normalized versions back to metadata
222-
if #authors ~= 0 then
223-
meta[kByAuthor] = byAuthors(authors, affiliations)
224-
end
211+
-- Write the normalized data back to metadata
212+
if #authors ~= 0 then
213+
meta[kAuthorOutput] = authors
214+
end
225215

226-
if #affiliations ~= 0 then
227-
meta[kByAffiliation] = byAffiliations(authors, affiliations)
228-
end
216+
if #affiliations ~= 0 then
217+
meta[kAffiliations] = affiliations
218+
end
229219

230-
-- Provide localized or user specified strings for title block elements
231-
meta = computeLabels(authors, affiliations, meta)
220+
-- Write the de-normalized versions back to metadata
221+
if #authors ~= 0 then
222+
meta[kByAuthor] = byAuthors(authors, affiliations)
223+
end
232224

233-
return meta
234-
end
235-
}
225+
if #affiliations ~= 0 then
226+
meta[kByAffiliation] = byAffiliations(authors, affiliations)
227+
end
228+
229+
-- Provide localized or user specified strings for title block elements
230+
meta = computeLabels(authors, affiliations, meta)
231+
232+
return meta
236233
end
237234

238235
-- Add an affiliation to the list of affiliations if needed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
-- book.lua
2+
-- Copyright (C) 2020 by RStudio, PBC
3+
4+
-- inject metadata
5+
function quartoBook()
6+
return {
7+
CodeBlock = function(el)
8+
9+
-- If this is a title block cell, we should render it
10+
-- using the template
11+
if (tcontains(el.attr.classes, 'quarto-title-block')) then
12+
13+
-- read the contents of the code cell
14+
-- this should just be some metadata
15+
local renderedDoc = pandoc.read(el.text, 'markdown')
16+
17+
-- render the title block using the metdata and
18+
-- and the template
19+
local template = el.attr.attributes['template']
20+
21+
-- process any author information
22+
local input = 'author'
23+
if renderedDoc.meta['authors'] then
24+
input = 'authors'
25+
end
26+
local processedMeta = processAuthorMeta(renderedDoc.meta, input)
27+
28+
-- read the title block template
29+
local renderedBlocks = compileTemplate(template, processedMeta)
30+
31+
return renderedBlocks
32+
end
33+
end
34+
}
35+
end
36+

src/resources/filters/quarto-post/quarto-post.lua

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import("reveal.lua")
2626
import("tikz.lua")
2727
import("meta.lua")
2828
import("delink.lua")
29+
import("book.lua")
2930
import("../common/lunacolors.lua")
3031
import("../common/log.lua")
3132
import("../common/base64.lua")
@@ -36,6 +37,7 @@ import("../common/pandoc.lua")
3637
import("../common/figures.lua")
3738
import("../common/meta.lua")
3839
import("../common/debug.lua")
40+
import("../common/authors.lua")
3941
-- [/import]
4042

4143
initParams()
@@ -47,6 +49,7 @@ return {
4749
foldCode(),
4850
responsive(),
4951
ipynb(),
52+
quartoBook(),
5053
reveal(),
5154
tikz(),
5255
delink(),

src/resources/formats/ipynb/templates/title-block.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ $if(subtitle)$$subtitle$$endif$
66

77
$-- there are affiliations, render that
88
$if(by-affiliation/first)$
9-
$for(by-author)$$if(by-author.url)$[$by-author.name.literal$]($by-author.url$)$else$$by-author.name.literal$$endif$$if(by-author.orcid)$ [![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg==)](https://orcid.org/$by-author.orcid$) $endif$$if(by-author.affiliations/first)$
9+
$for(by-author)$$if(by-author.url)$[$by-author.name.literal$]($by-author.url$)$else$$by-author.name.literal$$endif$$if(by-author.orcid)$ [![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg==)](https://orcid.org/$by-author.orcid$)$endif$$if(by-author.affiliations/first)$
1010
$if(by-author.affiliations/allbutlast)$
11-
($for(by-author.affiliations/allbutlast)$$if(it.url)$[$it.name$]($it.url$)$else$$it.name$$endif$$if(it.orcid)$ [![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg==)](https://orcid.org/$it.orcid$) $endif$, $endfor$$for(by-author.affiliations/last)$$if(it.url)$[$it.name$]($it.url$)$else$$it.name$$endif$$endfor$)
11+
($for(by-author.affiliations/allbutlast)$$if(it.url)$[$it.name$]($it.url$)$else$$it.name$$endif$$if(it.orcid)$ [![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg==)](https://orcid.org/$it.orcid$) $endif$, $endfor$$for(by-author.affiliations/last)$$if(it.url)$[$it.name$]($it.url$)$else$$it.name$$endif$$endfor$)
1212
$else$
13-
($for(by-author.affiliations/first)$$if(it.url)$[$it.name$]($it.url$)$else$$it.name$$endif$$endfor$)
13+
($for(by-author.affiliations/first)$$if(it.url)$[$it.name$]($it.url$)$else$$it.name$$endif$$endfor$)
1414
$endif$
1515
$endif$
1616
$endfor$$if(date)$$date$$endif$

0 commit comments

Comments
 (0)