init
This commit is contained in:
28
abstract.md
Normal file
28
abstract.md
Normal file
@@ -0,0 +1,28 @@
|
||||
---
|
||||
title: Interfacing piezoelectric inter-digitated transducers to printed circuit boards
|
||||
institute:
|
||||
- uc: University of Canterbury
|
||||
author:
|
||||
- Logan Henderson:
|
||||
institute: uc
|
||||
- Dr Joe Chen:
|
||||
institute: uc
|
||||
- Dr Ciaran Moore:
|
||||
institute: uc
|
||||
- Dr Romain Arnal:
|
||||
institute: uc
|
||||
---
|
||||
|
||||
Ultrasonic interdigitated transducers (IDTs) can be used for a wide variety of sensing and transduction applications such as sonoporation @rich_sonoporation_2022, biosensing @fertier_love_2009, microfluidic mixing @shilton_nanoliter-droplet_2014 and particle manipulation @ding_-chip_2012. Packaging these actuators in lab-on-a-chip devices expands the number of applications that they can address; however, this packaging introduces the challenge of securing the fragile piezoelectric substrate, which is typically only 0.5 mm thick, to a print circuit board (PCB) that typically houses connectors and circuitry for impedance matching and amplification.
|
||||
|
||||
We explore different methods of interfacing piezoelectric substrate to a fiberglass PCBs, and the resulting effects on the performance at multiple frequencies, from 10 MHz to 250 MHz by measuring the Rayleigh wave transmission. Both IDTs were attached to a vector network analyser with the response of the system measured with additional matching circuits added where needed.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Initial results show that attaching IDT to PCBs with a two part araldite epoxy causes significant attenuation in lower frequency IDTs operating around 10MHz and less attenuation iyn higher frequenc IDTs that operate closer to 100MHz. Matching circuits were shown to have a minor effect on the output at the operating frequency, while also increasing attenuation above and below the operating frequency. This work paves the wave for the creation for higher performance and more robust ultrasonic based lab on chip devices.
|
||||
|
||||
\pagebreak
|
||||
|
||||
# References {.reset-citation-positions}
|
||||
176
author-info-blocks.lua
Normal file
176
author-info-blocks.lua
Normal file
@@ -0,0 +1,176 @@
|
||||
--[[
|
||||
affiliation-blocks – generate title components
|
||||
|
||||
Copyright © 2017–2021 Albert Krewinkel
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any purpose
|
||||
with or without fee is hereby granted, provided that the above copyright notice
|
||||
and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||
OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
||||
THIS SOFTWARE.
|
||||
]]
|
||||
local List = require 'pandoc.List'
|
||||
local utils = require 'pandoc.utils'
|
||||
local stringify = utils.stringify
|
||||
|
||||
local default_marks
|
||||
local default_marks = {
|
||||
corresponding_author = FORMAT == 'latex'
|
||||
and {pandoc.RawInline('latex', '*')}
|
||||
or {pandoc.Str '✉'},
|
||||
equal_contributor = FORMAT == 'latex'
|
||||
and {pandoc.RawInline('latex', '$\\dagger{}$')}
|
||||
or {pandoc.Str '*'},
|
||||
}
|
||||
|
||||
local function intercalate(lists, elem)
|
||||
local result = List:new{}
|
||||
for i = 1, (#lists - 1) do
|
||||
result:extend(lists[i])
|
||||
result:extend(elem)
|
||||
end
|
||||
if #lists > 0 then
|
||||
result:extend(lists[#lists])
|
||||
end
|
||||
return result
|
||||
end
|
||||
|
||||
--- Check whether the given author is a corresponding author
|
||||
local function is_corresponding_author(author)
|
||||
return author.correspondence and author.email
|
||||
end
|
||||
|
||||
--- Create inlines for a single author (includes all author notes)
|
||||
local function author_inline_generator (get_mark)
|
||||
return function (author)
|
||||
local author_marks = List:new{}
|
||||
if author.equal_contributor then
|
||||
author_marks[#author_marks + 1] = get_mark 'equal_contributor'
|
||||
end
|
||||
local idx_str
|
||||
for _, idx in ipairs(author.institute) do
|
||||
if type(idx) ~= 'table' then
|
||||
idx_str = tostring(idx)
|
||||
else
|
||||
idx_str = stringify(idx)
|
||||
end
|
||||
author_marks[#author_marks + 1] = {pandoc.Str(idx_str)}
|
||||
end
|
||||
if is_corresponding_author(author) then
|
||||
author_marks[#author_marks + 1] = get_mark 'corresponding_author'
|
||||
end
|
||||
local res = List.clone(author.name)
|
||||
res[#res + 1] = pandoc.Superscript(intercalate(author_marks, {pandoc.Str ','}))
|
||||
return res
|
||||
end
|
||||
end
|
||||
|
||||
local function is_equal_contributor (author)
|
||||
return author.equal_contributor
|
||||
end
|
||||
|
||||
--- Create equal contributors note.
|
||||
local function create_equal_contributors_block(authors, mark)
|
||||
local has_equal_contribs = List:new(authors):find_if(is_equal_contributor)
|
||||
if not has_equal_contribs then
|
||||
return nil
|
||||
end
|
||||
local contributors = {
|
||||
pandoc.Superscript(mark'equal_contributor'),
|
||||
pandoc.Space(),
|
||||
pandoc.Str 'These authors contributed equally to this work.'
|
||||
}
|
||||
return List:new{pandoc.Para(contributors)}
|
||||
end
|
||||
|
||||
--- Generate a block list all affiliations, marked with arabic numbers.
|
||||
local function create_affiliations_blocks(affiliations)
|
||||
local affil_lines = List:new(affiliations):map(
|
||||
function (affil, i)
|
||||
local num_inlines = List:new{
|
||||
pandoc.Superscript{pandoc.Str(tostring(i))},
|
||||
pandoc.Space()
|
||||
}
|
||||
return num_inlines .. affil.name
|
||||
end
|
||||
)
|
||||
return {pandoc.Para(intercalate(affil_lines, {pandoc.LineBreak()}))}
|
||||
end
|
||||
|
||||
--- Generate a block element containing the correspondence information
|
||||
local function create_correspondence_blocks(authors, mark)
|
||||
local corresponding_authors = List:new{}
|
||||
for _, author in ipairs(authors) do
|
||||
if is_corresponding_author(author) then
|
||||
local mailto = 'mailto:' .. pandoc.utils.stringify(author.email)
|
||||
local author_with_mail = List:new(
|
||||
author.name .. List:new{pandoc.Space(), pandoc.Str '<'} ..
|
||||
author.email .. List:new{pandoc.Str '>'}
|
||||
)
|
||||
local link = pandoc.Link(author_with_mail, mailto)
|
||||
table.insert(corresponding_authors, {link})
|
||||
end
|
||||
end
|
||||
if #corresponding_authors == 0 then
|
||||
return nil
|
||||
end
|
||||
local correspondence = List:new{
|
||||
pandoc.Superscript(mark'corresponding_author'),
|
||||
pandoc.Space(),
|
||||
pandoc.Str'Correspondence:',
|
||||
pandoc.Space()
|
||||
}
|
||||
local sep = List:new{pandoc.Str',', pandoc.Space()}
|
||||
return {
|
||||
pandoc.Para(correspondence .. intercalate(corresponding_authors, sep))
|
||||
}
|
||||
end
|
||||
|
||||
--- Generate a list of inlines containing all authors.
|
||||
local function create_authors_inlines(authors, mark)
|
||||
local inlines_generator = author_inline_generator(mark)
|
||||
local inlines = List:new(authors):map(inlines_generator)
|
||||
local and_str = List:new{pandoc.Space(), pandoc.Str'and', pandoc.Space()}
|
||||
|
||||
local last_author = inlines[#inlines]
|
||||
inlines[#inlines] = nil
|
||||
local result = intercalate(inlines, {pandoc.Str ',', pandoc.Space()})
|
||||
if #authors > 1 then
|
||||
result:extend(List:new{pandoc.Str ","} .. and_str)
|
||||
end
|
||||
result:extend(last_author)
|
||||
return result
|
||||
end
|
||||
|
||||
return {
|
||||
{
|
||||
Pandoc = function (doc)
|
||||
local meta = doc.meta
|
||||
local body = List:new{}
|
||||
|
||||
local mark = function (mark_name) return default_marks[mark_name] end
|
||||
|
||||
body:extend(create_equal_contributors_block(doc.meta.author, mark) or {})
|
||||
body:extend(create_affiliations_blocks(doc.meta.institute) or {})
|
||||
body:extend(create_correspondence_blocks(doc.meta.author, mark) or {})
|
||||
body:extend(doc.blocks)
|
||||
|
||||
-- Overwrite authors with formatted values. We use a single, formatted
|
||||
-- string for most formats. LaTeX output, however, looks nicer if we
|
||||
-- provide a authors as a list.
|
||||
meta.author = FORMAT:match 'latex'
|
||||
and pandoc.MetaList(doc.meta.author):map(author_inline_generator(mark))
|
||||
or pandoc.MetaInlines(create_authors_inlines(doc.meta.author, mark))
|
||||
-- Institute info is now baked into the affiliations block.
|
||||
meta.institute = nil
|
||||
|
||||
return pandoc.Pandoc(body, meta)
|
||||
end
|
||||
}
|
||||
}
|
||||
1
complie.sh
Executable file
1
complie.sh
Executable file
@@ -0,0 +1 @@
|
||||
pandoc -o output.pdf abstract.md --lua-filter=scholarly-metadata.lua --lua-filter=author-info-blocks.lua --citeproc --bibliography=ref.bib --csl=ieee.csl
|
||||
519
ieee.csl
Normal file
519
ieee.csl
Normal file
@@ -0,0 +1,519 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<style xmlns="http://purl.org/net/xbiblio/csl" class="in-text" version="1.0" demote-non-dropping-particle="sort-only">
|
||||
<info>
|
||||
<title>IEEE Reference Guide version 11.29.2023</title>
|
||||
<title-short>Institute of Electrical and Electronics Engineers</title-short>
|
||||
<id>http://www.zotero.org/styles/ieee</id>
|
||||
<link href="http://www.zotero.org/styles/ieee" rel="self"/>
|
||||
<link href="https://journals.ieeeauthorcenter.ieee.org/your-role-in-article-production/ieee-editorial-style-manual/" rel="documentation"/>
|
||||
<author>
|
||||
<name>Michael Berkowitz</name>
|
||||
<email>mberkowi@gmu.edu</email>
|
||||
</author>
|
||||
<contributor>
|
||||
<name>Julian Onions</name>
|
||||
<email>julian.onions@gmail.com</email>
|
||||
</contributor>
|
||||
<contributor>
|
||||
<name>Rintze Zelle</name>
|
||||
<uri>http://twitter.com/rintzezelle</uri>
|
||||
</contributor>
|
||||
<contributor>
|
||||
<name>Stephen Frank</name>
|
||||
<uri>http://www.zotero.org/sfrank</uri>
|
||||
</contributor>
|
||||
<contributor>
|
||||
<name>Sebastian Karcher</name>
|
||||
</contributor>
|
||||
<contributor>
|
||||
<name>Giuseppe Silano</name>
|
||||
<email>g.silano89@gmail.com</email>
|
||||
<uri>http://giuseppesilano.net</uri>
|
||||
</contributor>
|
||||
<contributor>
|
||||
<name>Patrick O'Brien</name>
|
||||
</contributor>
|
||||
<contributor>
|
||||
<name>Brenton M. Wiernik</name>
|
||||
</contributor>
|
||||
<contributor>
|
||||
<name>Oliver Couch</name>
|
||||
<email>oliver.couch@gmail.com</email>
|
||||
</contributor>
|
||||
<contributor>
|
||||
<name>Andrew Dunning</name>
|
||||
<uri>https://orcid.org/0000-0003-0464-5036</uri>
|
||||
</contributor>
|
||||
<category citation-format="numeric"/>
|
||||
<category field="engineering"/>
|
||||
<category field="generic-base"/>
|
||||
<summary>IEEE style as per the 2023 guidelines.</summary>
|
||||
<updated>2024-03-27T11:41:27+00:00</updated>
|
||||
<rights license="http://creativecommons.org/licenses/by-sa/3.0/">This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License</rights>
|
||||
</info>
|
||||
<locale xml:lang="en">
|
||||
<date form="text">
|
||||
<date-part name="month" form="short" suffix=" "/>
|
||||
<date-part name="day" form="numeric-leading-zeros" suffix=", "/>
|
||||
<date-part name="year"/>
|
||||
</date>
|
||||
<terms>
|
||||
<term name="chapter" form="short">ch.</term>
|
||||
<term name="chapter-number" form="short">ch.</term>
|
||||
<term name="presented at">presented at the</term>
|
||||
<term name="available at">available</term>
|
||||
<!-- always use three-letter abbreviations for months -->
|
||||
<term name="month-06" form="short">Jun.</term>
|
||||
<term name="month-07" form="short">Jul.</term>
|
||||
<term name="month-09" form="short">Sep.</term>
|
||||
</terms>
|
||||
</locale>
|
||||
<!-- Macros -->
|
||||
<macro name="status">
|
||||
<choose>
|
||||
<if variable="page issue volume" match="none">
|
||||
<text variable="status" text-case="capitalize-first" suffix="" font-weight="bold"/>
|
||||
</if>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="edition">
|
||||
<choose>
|
||||
<if type="bill book chapter graphic legal_case legislation motion_picture paper-conference report song" match="any">
|
||||
<choose>
|
||||
<if is-numeric="edition">
|
||||
<group delimiter=" ">
|
||||
<number variable="edition" form="ordinal"/>
|
||||
<text term="edition" form="short"/>
|
||||
</group>
|
||||
</if>
|
||||
<else>
|
||||
<text variable="edition" text-case="capitalize-first" suffix="."/>
|
||||
</else>
|
||||
</choose>
|
||||
</if>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="issued">
|
||||
<choose>
|
||||
<if type="article-journal report" match="any">
|
||||
<date variable="issued">
|
||||
<date-part name="month" form="short" suffix=" "/>
|
||||
<date-part name="year" form="long"/>
|
||||
</date>
|
||||
</if>
|
||||
<else-if type="bill book chapter graphic legal_case legislation song thesis" match="any">
|
||||
<date variable="issued">
|
||||
<date-part name="year" form="long"/>
|
||||
</date>
|
||||
</else-if>
|
||||
<else-if type="paper-conference" match="any">
|
||||
<date variable="issued">
|
||||
<date-part name="month" form="short"/>
|
||||
<date-part name="year" prefix=" "/>
|
||||
</date>
|
||||
</else-if>
|
||||
<else-if type="motion_picture" match="any">
|
||||
<date variable="issued" form="text" prefix="(" suffix=")"/>
|
||||
</else-if>
|
||||
<else>
|
||||
<date variable="issued" form="text"/>
|
||||
</else>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="author">
|
||||
<names variable="author">
|
||||
<name and="text" et-al-min="7" et-al-use-first="1" initialize-with=". "/>
|
||||
<label form="short" prefix=", " text-case="capitalize-first"/>
|
||||
<et-al font-style="italic"/>
|
||||
<substitute>
|
||||
<names variable="editor"/>
|
||||
<names variable="translator"/>
|
||||
<text macro="director"/>
|
||||
</substitute>
|
||||
</names>
|
||||
</macro>
|
||||
<macro name="editor">
|
||||
<names variable="editor">
|
||||
<name initialize-with=". " delimiter=", " and="text"/>
|
||||
<label form="short" prefix=", " text-case="capitalize-first"/>
|
||||
</names>
|
||||
</macro>
|
||||
<macro name="director">
|
||||
<names variable="director">
|
||||
<name and="text" et-al-min="7" et-al-use-first="1" initialize-with=". "/>
|
||||
<et-al font-style="italic"/>
|
||||
</names>
|
||||
</macro>
|
||||
<macro name="locators">
|
||||
<group delimiter=", ">
|
||||
<text macro="edition"/>
|
||||
<group delimiter=" ">
|
||||
<text term="volume" form="short"/>
|
||||
<number variable="volume" form="numeric"/>
|
||||
</group>
|
||||
<group delimiter=" ">
|
||||
<number variable="number-of-volumes" form="numeric"/>
|
||||
<text term="volume" form="short" plural="true"/>
|
||||
</group>
|
||||
<group delimiter=" ">
|
||||
<text term="issue" form="short"/>
|
||||
<number variable="issue" form="numeric"/>
|
||||
</group>
|
||||
</group>
|
||||
</macro>
|
||||
<macro name="title">
|
||||
<choose>
|
||||
<if type="bill book graphic legal_case legislation motion_picture song standard software" match="any">
|
||||
<text variable="title" font-style="italic"/>
|
||||
</if>
|
||||
<else>
|
||||
<text variable="title" quotes="true"/>
|
||||
</else>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="publisher">
|
||||
<choose>
|
||||
<if type="bill book chapter graphic legal_case legislation motion_picture paper-conference song" match="any">
|
||||
<group delimiter=": ">
|
||||
<text variable="publisher-place"/>
|
||||
<text variable="publisher"/>
|
||||
</group>
|
||||
</if>
|
||||
<else>
|
||||
<group delimiter=", ">
|
||||
<text variable="publisher"/>
|
||||
<text variable="publisher-place"/>
|
||||
</group>
|
||||
</else>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="event">
|
||||
<choose>
|
||||
<!-- Published Conference Paper -->
|
||||
<if type="paper-conference speech" match="any">
|
||||
<choose>
|
||||
<if variable="container-title" match="any">
|
||||
<group delimiter=" ">
|
||||
<text term="in"/>
|
||||
<text variable="container-title" font-style="italic"/>
|
||||
</group>
|
||||
</if>
|
||||
<!-- Unpublished Conference Paper -->
|
||||
<else>
|
||||
<group delimiter=" ">
|
||||
<text term="presented at"/>
|
||||
<text variable="event"/>
|
||||
</group>
|
||||
</else>
|
||||
</choose>
|
||||
</if>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="access">
|
||||
<choose>
|
||||
<if type="webpage post post-weblog" match="any">
|
||||
<!-- https://url.com/ (accessed Mon. DD, YYYY). -->
|
||||
<choose>
|
||||
<if variable="URL">
|
||||
<group delimiter=". " prefix=" ">
|
||||
<group delimiter=": ">
|
||||
<text term="accessed" text-case="capitalize-first"/>
|
||||
<date variable="accessed" form="text"/>
|
||||
</group>
|
||||
<text term="online" prefix="[" suffix="]" text-case="capitalize-first"/>
|
||||
<group delimiter=": ">
|
||||
<text term="available at" text-case="capitalize-first"/>
|
||||
<text variable="URL"/>
|
||||
</group>
|
||||
</group>
|
||||
</if>
|
||||
</choose>
|
||||
</if>
|
||||
<else-if match="any" variable="DOI">
|
||||
<!-- doi: 10.1000/xyz123. -->
|
||||
<text variable="DOI" prefix=" doi: " suffix="."/>
|
||||
</else-if>
|
||||
<else-if variable="URL">
|
||||
<!-- Accessed: Mon. DD, YYYY. [Medium]. Available: https://URL.com/ -->
|
||||
<group delimiter=". " prefix=" " suffix=". ">
|
||||
<!-- Accessed: Mon. DD, YYYY. -->
|
||||
<group delimiter=": ">
|
||||
<text term="accessed" text-case="capitalize-first"/>
|
||||
<date variable="accessed" form="text"/>
|
||||
</group>
|
||||
<!-- [Online Video]. -->
|
||||
<group prefix="[" suffix="]" delimiter=" ">
|
||||
<choose>
|
||||
<if variable="medium" match="any">
|
||||
<text variable="medium" text-case="capitalize-first"/>
|
||||
</if>
|
||||
<else>
|
||||
<text term="online" text-case="capitalize-first"/>
|
||||
<choose>
|
||||
<if type="motion_picture">
|
||||
<text term="video" text-case="capitalize-first"/>
|
||||
</if>
|
||||
</choose>
|
||||
</else>
|
||||
</choose>
|
||||
</group>
|
||||
</group>
|
||||
<!-- Available: https://URL.com/ -->
|
||||
<group delimiter=": " prefix=" ">
|
||||
<text term="available at" text-case="capitalize-first"/>
|
||||
<text variable="URL"/>
|
||||
</group>
|
||||
</else-if>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="page">
|
||||
<choose>
|
||||
<if type="article-journal" variable="number" match="all">
|
||||
<group delimiter=" ">
|
||||
<text value="Art."/>
|
||||
<text term="issue" form="short"/>
|
||||
<text variable="number"/>
|
||||
</group>
|
||||
</if>
|
||||
<else>
|
||||
<group delimiter=" ">
|
||||
<label variable="page" form="short"/>
|
||||
<text variable="page"/>
|
||||
</group>
|
||||
</else>
|
||||
</choose>
|
||||
</macro>
|
||||
<macro name="citation-locator">
|
||||
<group delimiter=" ">
|
||||
<choose>
|
||||
<if locator="page">
|
||||
<label variable="locator" form="short"/>
|
||||
</if>
|
||||
<else>
|
||||
<label variable="locator" form="short" text-case="capitalize-first"/>
|
||||
</else>
|
||||
</choose>
|
||||
<text variable="locator"/>
|
||||
</group>
|
||||
</macro>
|
||||
<macro name="geographic-location">
|
||||
<group delimiter=", " suffix=".">
|
||||
<choose>
|
||||
<if variable="publisher-place">
|
||||
<text variable="publisher-place" text-case="title"/>
|
||||
</if>
|
||||
<else-if variable="event-place">
|
||||
<text variable="event-place" text-case="title"/>
|
||||
</else-if>
|
||||
</choose>
|
||||
</group>
|
||||
</macro>
|
||||
<!-- Series -->
|
||||
<macro name="collection">
|
||||
<choose>
|
||||
<if variable="collection-title" match="any">
|
||||
<text term="in" suffix=" "/>
|
||||
<group delimiter=", " suffix=". ">
|
||||
<text variable="collection-title"/>
|
||||
<text variable="collection-number" prefix="no. "/>
|
||||
<text variable="volume" prefix="vol. "/>
|
||||
</group>
|
||||
</if>
|
||||
</choose>
|
||||
</macro>
|
||||
<!-- Citation -->
|
||||
<citation>
|
||||
<sort>
|
||||
<key variable="citation-number"/>
|
||||
</sort>
|
||||
<layout delimiter=", ">
|
||||
<group prefix="[" suffix="]" delimiter=", ">
|
||||
<text variable="citation-number"/>
|
||||
<text macro="citation-locator"/>
|
||||
</group>
|
||||
</layout>
|
||||
</citation>
|
||||
<!-- Bibliography -->
|
||||
<bibliography entry-spacing="0" second-field-align="flush">
|
||||
<layout>
|
||||
<!-- Citation Number -->
|
||||
<text variable="citation-number" prefix="[" suffix="]"/>
|
||||
<!-- Author(s) -->
|
||||
<text macro="author" suffix=", "/>
|
||||
<!-- Rest of Citation -->
|
||||
<choose>
|
||||
<!-- Specific Formats -->
|
||||
<if type="article-journal">
|
||||
<group delimiter=", ">
|
||||
<text macro="title"/>
|
||||
<text variable="container-title" font-style="italic" form="short"/>
|
||||
<text macro="locators"/>
|
||||
<text macro="page"/>
|
||||
<text macro="issued"/>
|
||||
<text macro="status"/>
|
||||
</group>
|
||||
<choose>
|
||||
<if variable="URL DOI" match="none">
|
||||
<text value="."/>
|
||||
</if>
|
||||
<else>
|
||||
<text value=","/>
|
||||
</else>
|
||||
</choose>
|
||||
<text macro="access"/>
|
||||
</if>
|
||||
<else-if type="paper-conference speech" match="any">
|
||||
<group delimiter=", " suffix=", ">
|
||||
<text macro="title"/>
|
||||
<text macro="event"/>
|
||||
<text macro="editor"/>
|
||||
</group>
|
||||
<text macro="collection"/>
|
||||
<group delimiter=", " suffix=".">
|
||||
<text macro="publisher"/>
|
||||
<text macro="issued"/>
|
||||
<text macro="page"/>
|
||||
<text macro="status"/>
|
||||
</group>
|
||||
<text macro="access"/>
|
||||
</else-if>
|
||||
<else-if type="chapter">
|
||||
<group delimiter=", " suffix=".">
|
||||
<text macro="title"/>
|
||||
<group delimiter=" ">
|
||||
<text term="in" suffix=" "/>
|
||||
<text variable="container-title" font-style="italic"/>
|
||||
</group>
|
||||
<text macro="locators"/>
|
||||
<text macro="editor"/>
|
||||
<text macro="collection"/>
|
||||
<text macro="publisher"/>
|
||||
<text macro="issued"/>
|
||||
<group delimiter=" ">
|
||||
<label variable="chapter-number" form="short"/>
|
||||
<text variable="chapter-number"/>
|
||||
</group>
|
||||
<text macro="page"/>
|
||||
</group>
|
||||
<text macro="access"/>
|
||||
</else-if>
|
||||
<else-if type="report">
|
||||
<group delimiter=", " suffix=".">
|
||||
<text macro="title"/>
|
||||
<text macro="publisher"/>
|
||||
<group delimiter=" ">
|
||||
<text variable="genre"/>
|
||||
<text variable="number"/>
|
||||
</group>
|
||||
<text macro="issued"/>
|
||||
</group>
|
||||
<text macro="access"/>
|
||||
</else-if>
|
||||
<else-if type="thesis">
|
||||
<group delimiter=", " suffix=".">
|
||||
<text macro="title"/>
|
||||
<text variable="genre"/>
|
||||
<text macro="publisher"/>
|
||||
<text macro="issued"/>
|
||||
</group>
|
||||
<text macro="access"/>
|
||||
</else-if>
|
||||
<else-if type="software">
|
||||
<group delimiter=". " suffix=".">
|
||||
<text macro="title"/>
|
||||
<text macro="issued" prefix="(" suffix=")"/>
|
||||
<text variable="genre"/>
|
||||
<text macro="publisher"/>
|
||||
</group>
|
||||
<text macro="access"/>
|
||||
</else-if>
|
||||
<else-if type="article">
|
||||
<group delimiter=", " suffix=".">
|
||||
<text macro="title"/>
|
||||
<text macro="issued"/>
|
||||
<group delimiter=": ">
|
||||
<text macro="publisher" font-style="italic"/>
|
||||
<text variable="number"/>
|
||||
</group>
|
||||
</group>
|
||||
<text macro="access"/>
|
||||
</else-if>
|
||||
<else-if type="webpage post-weblog post" match="any">
|
||||
<group delimiter=", " suffix=".">
|
||||
<text macro="title"/>
|
||||
<text variable="container-title"/>
|
||||
</group>
|
||||
<text macro="access"/>
|
||||
</else-if>
|
||||
<else-if type="patent">
|
||||
<group delimiter=", ">
|
||||
<text macro="title"/>
|
||||
<text variable="number"/>
|
||||
<text macro="issued"/>
|
||||
</group>
|
||||
<text macro="access"/>
|
||||
</else-if>
|
||||
<!-- Online Video -->
|
||||
<else-if type="motion_picture">
|
||||
<text macro="geographic-location" suffix=". "/>
|
||||
<group delimiter=", " suffix=".">
|
||||
<text macro="title"/>
|
||||
<text macro="issued"/>
|
||||
</group>
|
||||
<text macro="access"/>
|
||||
</else-if>
|
||||
<else-if type="standard">
|
||||
<group delimiter=", " suffix=".">
|
||||
<text macro="title"/>
|
||||
<group delimiter=" ">
|
||||
<text variable="genre"/>
|
||||
<text variable="number"/>
|
||||
</group>
|
||||
<text macro="geographic-location"/>
|
||||
<text macro="issued"/>
|
||||
</group>
|
||||
<text macro="access"/>
|
||||
</else-if>
|
||||
<!-- Generic/Fallback Formats -->
|
||||
<else-if type="bill book graphic legal_case legislation report song" match="any">
|
||||
<group delimiter=", " suffix=". ">
|
||||
<text macro="title"/>
|
||||
<text macro="locators"/>
|
||||
</group>
|
||||
<text macro="collection"/>
|
||||
<group delimiter=", " suffix=".">
|
||||
<text macro="publisher"/>
|
||||
<text macro="issued"/>
|
||||
<text macro="page"/>
|
||||
</group>
|
||||
<text macro="access"/>
|
||||
</else-if>
|
||||
<else-if type="article-magazine article-newspaper broadcast interview manuscript map patent personal_communication song speech thesis webpage" match="any">
|
||||
<group delimiter=", " suffix=".">
|
||||
<text macro="title"/>
|
||||
<text variable="container-title" font-style="italic"/>
|
||||
<text macro="locators"/>
|
||||
<text macro="publisher"/>
|
||||
<text macro="page"/>
|
||||
<text macro="issued"/>
|
||||
</group>
|
||||
<text macro="access"/>
|
||||
</else-if>
|
||||
<else>
|
||||
<group delimiter=", " suffix=". ">
|
||||
<text macro="title"/>
|
||||
<text variable="container-title" font-style="italic"/>
|
||||
<text macro="locators"/>
|
||||
</group>
|
||||
<text macro="collection"/>
|
||||
<group delimiter=", " suffix=".">
|
||||
<text macro="publisher"/>
|
||||
<text macro="page"/>
|
||||
<text macro="issued"/>
|
||||
</group>
|
||||
<text macro="access"/>
|
||||
</else>
|
||||
</choose>
|
||||
</layout>
|
||||
</bibliography>
|
||||
</style>
|
||||
BIN
image-1.png
Normal file
BIN
image-1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 126 KiB |
BIN
output.pdf
Normal file
BIN
output.pdf
Normal file
Binary file not shown.
55
ref.bib
Normal file
55
ref.bib
Normal file
@@ -0,0 +1,55 @@
|
||||
|
||||
@article{rich_sonoporation_2022,
|
||||
title = {Sonoporation: {Past}, {Present}, and {Future}},
|
||||
volume = {7},
|
||||
url = {https://advanced.onlinelibrary.wiley.com/doi/abs/10.1002/admt.202100885},
|
||||
doi = {https://doi.org/10.1002/admt.202100885},
|
||||
abstract = {Abstract A surge of research in intracellular delivery technologies is underway with the increased innovations in cell-based therapies and cell reprogramming. Particularly, physical cell membrane permeabilization techniques are highlighted as the leading technologies because of their unique features, including versatility, independence of cargo properties, and high-throughput delivery that is critical for providing the desired cell quantity for cell-based therapies. Amongst the physical permeabilization methods, sonoporation holds great promise and demonstrates to deliver a variety of functional cargos, such as biomolecular drugs, proteins, and plasmids, to various cells including cancer, immune, and stem cells. However, traditional bubble-based sonoporation methods usually require special contrast agents. Bubble-based sonoporation methods also have high chances of inducing irreversible damage to critical cell components, lowering the cell viability, and reducing the effectiveness of delivered cargos. To overcome these limitations, several novel non-bubble-based sonoporation mechanisms are under development. This review will cover both the bubble-based and non-bubble-based sonoporation mechanisms being employed for intracellular delivery, the technologies being investigated to overcome the limitations of traditional platforms, as well as perspectives on the future sonoporation mechanisms, technologies, and applications.},
|
||||
number = {1},
|
||||
journal = {Advanced Materials Technologies},
|
||||
author = {Rich, Joseph and Tian, Zhenhua and Huang, Tony Jun},
|
||||
year = {2022},
|
||||
keywords = {acoustics, acoustofluidics, intracellular delivery, physical permeabilization, sonoporation},
|
||||
pages = {2100885},
|
||||
}
|
||||
|
||||
@article{fertier_love_2009,
|
||||
title = {Love wave immunosensor for antibody recognition using an innovative semicarbazide surface functionalization},
|
||||
volume = {140},
|
||||
issn = {0925-4005},
|
||||
url = {https://www.sciencedirect.com/science/article/pii/S0925400509003864},
|
||||
doi = {https://doi.org/10.1016/j.snb.2009.04.069},
|
||||
abstract = {A new novel and easy functionalization route of a Love wave acoustic sensor based on the α-oxo-semicarbazone bond is described. The interest is firstly to observe in real-time the immobilization of the peptide on the semicarbazide surface of the transducer and secondly to monitor the specific binding of antibodies. Site-specific immobilization of antigenic-peptides as well as binding of murine monoclonal antibodies has been shown by gravimetric measurements. A tetramethylrhodamine-labeled goat antibody directed against murine antibodies was used to further characterize the biomolecular interactions by fluorescence microscopy and surface analysis (by AFM). Our data show that the gravimetric monitoring developed from the prepared Love wave immunosensor is a promising alternative route to characterize chemical and biomolecular events.},
|
||||
number = {2},
|
||||
journal = {Sensors and Actuators B: Chemical},
|
||||
author = {Fertier, Laurent and Cretin, Marc and Rolland, Marc and Durand, Jean-Olivier and Raehm, Laurence and Desmet, Rémi and Melnyk, Oleg and Zimmermann, Céline and Déjous, Corinne and Rebière, Dominique},
|
||||
year = {2009},
|
||||
keywords = {Real-time antibodies recognition monitoring, SAMs, Semicarbazide functionalization, SH-SAW, Surface modification},
|
||||
pages = {616--622},
|
||||
}
|
||||
|
||||
@article{shilton_nanoliter-droplet_2014,
|
||||
title = {Nanoliter-{Droplet} {Acoustic} {Streaming} via {Ultra} {High} {Frequency} {Surface} {Acoustic} {Waves}},
|
||||
volume = {26},
|
||||
url = {https://advanced.onlinelibrary.wiley.com/doi/abs/10.1002/adma.201400091},
|
||||
doi = {https://doi.org/10.1002/adma.201400091},
|
||||
abstract = {The relevant length scales in sub-nanometer amplitude surface acoustic wave-driven acoustic streaming are demonstrated. We demonstrate the absence of any physical limitations preventing the downscaling of SAW-driven internal streaming to nanoliter microreactors and beyond by extending SAW microfluidics up to operating frequencies in the GHz range. This method is applied to nanoliter scale fluid mixing.},
|
||||
number = {29},
|
||||
journal = {Advanced Materials},
|
||||
author = {Shilton, Richie J. and Travagliati, Marco and Beltram, Fabio and Cecchini, Marco},
|
||||
year = {2014},
|
||||
keywords = {acoustics, lab-on-a-chip, microfluidics, mixing, surface acoustic waves},
|
||||
pages = {4941--4946},
|
||||
}
|
||||
|
||||
@article{ding_-chip_2012,
|
||||
title = {On-chip manipulation of single microparticles, cells, and organisms using surface acoustic waves},
|
||||
volume = {109},
|
||||
issn = {00278424},
|
||||
language = {English},
|
||||
number = {28},
|
||||
journal = {Proceedings of the National Academy of Sciences of the United States of America},
|
||||
author = {Ding, Xiaoyun and Lin, Sz-Chin Steven and Kiraly, Brian and Yue, Hongjun and Li, Sixing and Chiang, I-Kao and Shi, Jinjie and Benkovic, Stephen J. and Huang, Tony Jun},
|
||||
year = {2012},
|
||||
pages = {11105--11109},
|
||||
}
|
||||
199
scholarly-metadata.lua
Normal file
199
scholarly-metadata.lua
Normal file
@@ -0,0 +1,199 @@
|
||||
--[[
|
||||
ScholarlyMeta – normalize author/affiliation meta variables
|
||||
|
||||
Copyright (c) 2017-2021 Albert Krewinkel, Robert Winkler
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any purpose
|
||||
with or without fee is hereby granted, provided that the above copyright notice
|
||||
and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||
OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
||||
THIS SOFTWARE.
|
||||
]]
|
||||
local List = require 'pandoc.List'
|
||||
|
||||
--- Returns the type of a metadata value.
|
||||
--
|
||||
-- @param v a metadata value
|
||||
-- @treturn string one of `Blocks`, `Inlines`, `List`, `Map`, `string`, `boolean`
|
||||
local function metatype (v)
|
||||
if PANDOC_VERSION <= '2.16.2' then
|
||||
local metatag = type(v) == 'table' and v.t and v.t:gsub('^Meta', '')
|
||||
return metatag and metatag ~= 'Map' and metatag or type(v)
|
||||
end
|
||||
return pandoc.utils.type(v)
|
||||
end
|
||||
|
||||
local type = pandoc.utils.type or metatype
|
||||
|
||||
|
||||
-- Split a string at commas.
|
||||
local function comma_separated_values(str)
|
||||
local acc = List:new{}
|
||||
for substr in str:gmatch('([^,]*)') do
|
||||
acc[#acc + 1] = substr:gsub('^%s*', ''):gsub('%s*$', '') -- trim
|
||||
end
|
||||
return acc
|
||||
end
|
||||
|
||||
--- Ensure the return value is a list.
|
||||
local function ensure_list (val)
|
||||
if type(val) == 'List' then
|
||||
return val
|
||||
elseif type(val) == 'Inlines' then
|
||||
-- check if this is really a comma-separated list
|
||||
local csv = comma_separated_values(pandoc.utils.stringify(val))
|
||||
if #csv >= 2 then
|
||||
return csv
|
||||
end
|
||||
return List:new{val}
|
||||
elseif type(val) == 'table' and #val > 0 then
|
||||
return List:new(val)
|
||||
else
|
||||
-- Anything else, use as a singleton (or empty list if val == nil).
|
||||
return List:new{val}
|
||||
end
|
||||
end
|
||||
|
||||
--- Returns a function which checks whether an object has the given ID.
|
||||
local function has_id (id)
|
||||
return function(x) return x.id == id end
|
||||
end
|
||||
|
||||
--- Copy all key-value pairs of the first table into the second iff there is no
|
||||
-- such key yet in the second table.
|
||||
-- @returns the second argument
|
||||
function add_missing_entries(a, b)
|
||||
for k, v in pairs(a) do
|
||||
b[k] = b[k] or v
|
||||
end
|
||||
return b
|
||||
end
|
||||
|
||||
--- Create an object with a name. The name is either taken directly from the
|
||||
-- `name` field, or from the *only* field name (i.e., key) if the object is a
|
||||
-- dictionary with just one entry. If neither exists, the name is left unset
|
||||
-- (`nil`).
|
||||
function to_named_object (obj)
|
||||
local named = {}
|
||||
if type(obj) == 'Inlines' then
|
||||
-- Treat inlines as the name
|
||||
named.name = obj
|
||||
named.id = pandoc.utils.stringify(obj)
|
||||
elseif type(obj) ~= 'table' then
|
||||
-- if the object isn't a table, just use its value as a name.
|
||||
named.name = pandoc.MetaInlines{pandoc.Str(tostring(obj))}
|
||||
named.id = tostring(obj)
|
||||
elseif obj.name ~= nil then
|
||||
-- object has name attribute → just create a copy of the object
|
||||
add_missing_entries(obj, named)
|
||||
named.id = pandoc.utils.stringify(named.id or named.name)
|
||||
elseif next(obj) and next(obj, next(obj)) == nil then
|
||||
-- Single-entry table. The entry's key is taken as the name, the value
|
||||
-- contains the attributes.
|
||||
key, attribs = next(obj)
|
||||
if type(attribs) == 'string' or type(attribs) == 'Inlines' then
|
||||
named.name = attribs
|
||||
else
|
||||
add_missing_entries(attribs, named)
|
||||
named.name = named.name or pandoc.MetaInlines{pandoc.Str(tostring(key))}
|
||||
end
|
||||
named.id = named.id and pandoc.utils.stringify(named.id) or key
|
||||
else
|
||||
-- this is not a named object adhering to the usual conventions.
|
||||
error('not a named object: ' .. tostring(obj))
|
||||
end
|
||||
return named
|
||||
end
|
||||
|
||||
--- Resolve institute placeholders to full named objects
|
||||
local function resolve_institutes (institute, known_institutes)
|
||||
local unresolved_institutes
|
||||
if institute == nil then
|
||||
unresolved_institutes = {}
|
||||
elseif type(institute) == "string" or type(institute) == "number" then
|
||||
unresolved_institutes = {institute}
|
||||
else
|
||||
unresolved_institutes = institute
|
||||
end
|
||||
|
||||
local result = List:new{}
|
||||
for i, inst in ipairs(unresolved_institutes) do
|
||||
result[i] =
|
||||
known_institutes[tonumber(inst)] or
|
||||
known_institutes:find_if(has_id(pandoc.utils.stringify(inst))) or
|
||||
to_named_object(inst)
|
||||
end
|
||||
return result
|
||||
end
|
||||
|
||||
--- Insert a named object into a list; if an object of the same name exists
|
||||
-- already, add all properties only present in the new object to the existing
|
||||
-- item.
|
||||
function merge_on_id (list, namedObj)
|
||||
local elem, idx = list:find_if(has_id(namedObj.id))
|
||||
local res = elem and add_missing_entries(namedObj, elem) or namedObj
|
||||
local obj_idx = idx or (#list + 1)
|
||||
-- return res, obj_idx
|
||||
list[obj_idx] = res
|
||||
return res, #list
|
||||
end
|
||||
|
||||
--- Flatten a list of lists.
|
||||
local function flatten (lists)
|
||||
local result = List:new{}
|
||||
for _, lst in ipairs(lists) do
|
||||
result:extend(lst)
|
||||
end
|
||||
return result
|
||||
end
|
||||
|
||||
--- Canonicalize authors and institutes
|
||||
local function canonicalize(raw_author, raw_institute)
|
||||
local institutes = ensure_list(raw_institute):map(to_named_object)
|
||||
local authors = ensure_list(raw_author):map(to_named_object)
|
||||
|
||||
for _, author in ipairs(authors) do
|
||||
author.institute = resolve_institutes(
|
||||
ensure_list(author.institute),
|
||||
institutes
|
||||
)
|
||||
end
|
||||
|
||||
-- Merge institutes defined in author objects with those defined in the
|
||||
-- top-level list.
|
||||
local author_insts = flatten(authors:map(function(x) return x.institute end))
|
||||
for _, inst in ipairs(author_insts) do
|
||||
merge_on_id(institutes, inst)
|
||||
end
|
||||
|
||||
-- Add list indices to institutes for numbering and reference purposes
|
||||
for idx, inst in ipairs(institutes) do
|
||||
inst.index = pandoc.MetaInlines{pandoc.Str(tostring(idx))}
|
||||
end
|
||||
|
||||
-- replace institutes with their indices
|
||||
local to_index = function (inst)
|
||||
return tostring(select(2, institutes:find_if(has_id(inst.id))))
|
||||
end
|
||||
for _, author in ipairs(authors) do
|
||||
author.institute = pandoc.MetaList(author.institute:map(to_index))
|
||||
end
|
||||
|
||||
return authors, institutes
|
||||
end
|
||||
|
||||
|
||||
return {
|
||||
{
|
||||
Meta = function(meta)
|
||||
meta.author, meta.institute = canonicalize(meta.author, meta.institute)
|
||||
return meta
|
||||
end
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user