diff --git a/journal/SageH.bst b/journal/SageH.bst deleted file mode 100644 index 4e7f695..0000000 --- a/journal/SageH.bst +++ /dev/null @@ -1,1543 +0,0 @@ -% This is file `SageH.bst', -%% Created by Sunrise Setting Ltd, Paignton, UK, www.sunrise-setting.co.uk -%% Version 1.00, 27 July 2013 -%% -%% The original source files were: -%% -%% merlin.mbs (with options: `ay,nat,nm-rvx,ed-rev,jnrlst,keyxyr,dt-beg,yr-par,yrp-x,note-yr,volp-sp,pp-last,num-xser,ser-vol,ser-ed,jnm-x,add-pub,pre-edn,isbn,doi,edparxc,in-col,pp,ed,xedn,and-xcom,url,url-blk,nfss,') -%% ---------------------------------------- -%% *** Sage Harvard reference style *** -%% -%% Copyright 1994-2011 Patrick W Daly - % =============================================================== - % IMPORTANT NOTICE: - % This bibliographic style (bst) file has been generated from one or - % more master bibliographic style (mbs) files, listed above. - % - % This generated file can be redistributed and/or modified under the terms - % of the LaTeX Project Public License Distributed from CTAN - % archives in directory macros/latex/base/lppl.txt; either - % version 1 of the License, or any later version. - % =============================================================== - % Name and version information of the main mbs file: - % \ProvidesFile{merlin.mbs}[2011/03/28 4.32 (PWD, AO, DPC)] - % For use with BibTeX version 0.99a or later - %------------------------------------------------------------------- - % This bibliography style file is intended for texts in ENGLISH - % This is an author-year citation style bibliography. As such, it is - % non-standard LaTeX, and requires a special package file to function properly. - % Such a package is natbib.sty by Patrick W. Daly - % The form of the \bibitem entries is - % \bibitem[Jones et al.(1990)]{key}... - % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}... - % The essential feature is that the label (the part in brackets) consists - % of the author names, as they should appear in the citation, with the year - % in parentheses following. There must be no space before the opening - % parenthesis! - % With natbib v5.3, a full list of authors may also follow the year. - % In natbib.sty, it is possible to define the type of enclosures that is - % really wanted (brackets or parentheses), but in either case, there must - % be parentheses in the label. - % The \cite command functions as follows: - % \citet{key} ==>> Jones et al. (1990) - % \citet*{key} ==>> Jones, Baker, and Smith (1990) - % \citep{key} ==>> (Jones et al., 1990) - % \citep*{key} ==>> (Jones, Baker, and Smith, 1990) - % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2) - % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990) - % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., 1990, p. 32) - % \citeauthor{key} ==>> Jones et al. - % \citeauthor*{key} ==>> Jones, Baker, and Smith - % \citeyear{key} ==>> 1990 - %--------------------------------------------------------------------- - -ENTRY - { address - author - booktitle - chapter - doi - edition - editor - eid - howpublished - institution - isbn - journal - key - month - note - number - organization - pages - publisher - school - series - title - type - url - volume - year - } - {} - { label extra.label sort.label short.list } -INTEGERS { output.state before.all mid.sentence after.sentence after.block } -FUNCTION {init.state.consts} -{ #0 'before.all := - #1 'mid.sentence := - #2 'after.sentence := - #3 'after.block := -} -STRINGS { s t} -FUNCTION {output.nonnull} -{ 's := - output.state mid.sentence = - { ", " * write$ } - { output.state after.block = - { add.period$ write$ - newline$ - "\newblock " write$ - } - { output.state before.all = - 'write$ - { add.period$ " " * write$ } - if$ - } - if$ - mid.sentence 'output.state := - } - if$ - s -} -FUNCTION {output} -{ duplicate$ empty$ - 'pop$ - 'output.nonnull - if$ -} -FUNCTION {output.check} -{ 't := - duplicate$ empty$ - { pop$ "empty " t * " in " * cite$ * warning$ } - 'output.nonnull - if$ -} -FUNCTION {fin.entry} -{ add.period$ - write$ - newline$ -} - -FUNCTION {new.block} -{ output.state before.all = - 'skip$ - { after.block 'output.state := } - if$ -} -FUNCTION {new.sentence} -{ output.state after.block = - 'skip$ - { output.state before.all = - 'skip$ - { after.sentence 'output.state := } - if$ - } - if$ -} -FUNCTION {add.blank} -{ " " * before.all 'output.state := -} - -FUNCTION {date.block} -{ - add.blank -} - -FUNCTION {not} -{ { #0 } - { #1 } - if$ -} -FUNCTION {and} -{ 'skip$ - { pop$ #0 } - if$ -} -FUNCTION {or} -{ { pop$ #1 } - 'skip$ - if$ -} -STRINGS {z} -FUNCTION {remove.dots} -{ 'z := - "" - { z empty$ not } - { z #1 #2 substring$ - duplicate$ "\." = - { z #3 global.max$ substring$ 'z := * } - { pop$ - z #1 #1 substring$ - z #2 global.max$ substring$ 'z := - duplicate$ "." = 'pop$ - { * } - if$ - } - if$ - } - while$ -} -FUNCTION {new.block.checkb} -{ empty$ - swap$ empty$ - and - 'skip$ - 'new.block - if$ -} -FUNCTION {field.or.null} -{ duplicate$ empty$ - { pop$ "" } - 'skip$ - if$ -} -FUNCTION {emphasize} -{ duplicate$ empty$ - { pop$ "" } - { "\emph{" swap$ * "}" * } - if$ -} -FUNCTION {tie.or.space.prefix} -{ duplicate$ text.length$ #3 < - { "~" } - { " " } - if$ - swap$ -} - -FUNCTION {capitalize} -{ "u" change.case$ "t" change.case$ } - -FUNCTION {space.word} -{ " " swap$ * " " * } - % Here are the language-specific definitions for explicit words. - % Each function has a name bbl.xxx where xxx is the English word. - % The language selected here is ENGLISH -FUNCTION {bbl.and} -{ "and"} - -FUNCTION {bbl.etal} -{ "et~al." } - -FUNCTION {bbl.editors} -{ "eds." } - -FUNCTION {bbl.editor} -{ "ed." } - -FUNCTION {bbl.edby} -{ "edited by" } - -FUNCTION {bbl.edition} -{ "edition" } - -FUNCTION {bbl.volume} -{ "volume" } - -FUNCTION {bbl.of} -{ "of" } - -FUNCTION {bbl.number} -{ "number" } - -FUNCTION {bbl.nr} -{ "no." } - -FUNCTION {bbl.in} -{ "in" } - -FUNCTION {bbl.pages} -{ "pp." } - -FUNCTION {bbl.page} -{ "p." } - -FUNCTION {bbl.chapter} -{ "chapter" } - -FUNCTION {bbl.techrep} -{ "Technical Report" } - -FUNCTION {bbl.mthesis} -{ "Master's Thesis" } - -FUNCTION {bbl.phdthesis} -{ "PhD Thesis" } - -MACRO {jan} {"January"} - -MACRO {feb} {"February"} - -MACRO {mar} {"March"} - -MACRO {apr} {"April"} - -MACRO {may} {"May"} - -MACRO {jun} {"June"} - -MACRO {jul} {"July"} - -MACRO {aug} {"August"} - -MACRO {sep} {"September"} - -MACRO {oct} {"October"} - -MACRO {nov} {"November"} - -MACRO {dec} {"December"} - -MACRO {acmcs} {"ACM Computing Surveys"} - -MACRO {acta} {"Acta Informatica"} - -MACRO {cacm} {"Communications of the ACM"} - -MACRO {ibmjrd} {"IBM Journal of Research and Development"} - -MACRO {ibmsj} {"IBM Systems Journal"} - -MACRO {ieeese} {"IEEE Transactions on Software Engineering"} - -MACRO {ieeetc} {"IEEE Transactions on Computers"} - -MACRO {ieeetcad} - {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} - -MACRO {ipl} {"Information Processing Letters"} - -MACRO {jacm} {"Journal of the ACM"} - -MACRO {jcss} {"Journal of Computer and System Sciences"} - -MACRO {scp} {"Science of Computer Programming"} - -MACRO {sicomp} {"SIAM Journal on Computing"} - -MACRO {tocs} {"ACM Transactions on Computer Systems"} - -MACRO {tods} {"ACM Transactions on Database Systems"} - -MACRO {tog} {"ACM Transactions on Graphics"} - -MACRO {toms} {"ACM Transactions on Mathematical Software"} - -MACRO {toois} {"ACM Transactions on Office Information Systems"} - -MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} - -MACRO {tcs} {"Theoretical Computer Science"} -FUNCTION {bibinfo.check} -{ swap$ - duplicate$ missing$ - { - pop$ pop$ - "" - } - { duplicate$ empty$ - { - swap$ pop$ - } - { swap$ - pop$ - } - if$ - } - if$ -} -FUNCTION {bibinfo.warn} -{ swap$ - duplicate$ missing$ - { - swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ - "" - } - { duplicate$ empty$ - { - swap$ "empty " swap$ * " in " * cite$ * warning$ - } - { swap$ - pop$ - } - if$ - } - if$ -} -FUNCTION {format.url} -{ - url - duplicate$ empty$ - { pop$ "" } - { "\urlprefix\url{" swap$ * "}" * } - if$ -} - -INTEGERS { nameptr namesleft numnames } - - -STRINGS { bibinfo} - -FUNCTION {format.names} -{ 'bibinfo := - duplicate$ empty$ 'skip$ { - 's := - "" 't := - #1 'nameptr := - s num.names$ 'numnames := - numnames 'namesleft := - { namesleft #0 > } - { s nameptr - "{vv~}{ll}{ f{}}{ jj}" - format.name$ - remove.dots - bibinfo bibinfo.check - 't := - nameptr #1 > - { - namesleft #1 > - { ", " * t * } - { - s nameptr "{ll}" format.name$ duplicate$ "others" = - { 't := } - { pop$ } - if$ - t "others" = - { - " " * bbl.etal * - } - { - bbl.and - space.word * t * - } - if$ - } - if$ - } - 't - if$ - nameptr #1 + 'nameptr := - namesleft #1 - 'namesleft := - } - while$ - } if$ -} -FUNCTION {format.names.ed} -{ - format.names -} -FUNCTION {format.key} -{ empty$ - { key field.or.null } - { "" } - if$ -} - -FUNCTION {format.authors} -{ author "author" format.names -} -FUNCTION {get.bbl.editor} -{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ } - -FUNCTION {format.editors} -{ editor "editor" format.names duplicate$ empty$ 'skip$ - { - " " * - get.bbl.editor - "(" swap$ * ")" * - * - } - if$ -} -FUNCTION {format.isbn} -{ isbn "isbn" bibinfo.check - duplicate$ empty$ 'skip$ - { - new.block - "ISBN " swap$ * - } - if$ -} - -FUNCTION {format.doi} -{ doi empty$ - { "" } - { - new.block - "\doi{" DOI * "}" * - } - if$ -} -FUNCTION {format.note} -{ - note empty$ - { "" } - { note #1 #1 substring$ - duplicate$ "{" = - 'skip$ - { output.state mid.sentence = - { "l" } - { "u" } - if$ - change.case$ - } - if$ - note #2 global.max$ substring$ * "note" bibinfo.check - } - if$ -} - -FUNCTION {format.title} -{ title - duplicate$ empty$ 'skip$ - { "t" change.case$ } - if$ - "title" bibinfo.check -} -FUNCTION {format.full.names} -{'s := - "" 't := - #1 'nameptr := - s num.names$ 'numnames := - numnames 'namesleft := - { namesleft #0 > } - { s nameptr - "{vv~}{ll}" format.name$ - 't := - nameptr #1 > - { - namesleft #1 > - { ", " * t * } - { - s nameptr "{ll}" format.name$ duplicate$ "others" = - { 't := } - { pop$ } - if$ - t "others" = - { - " " * bbl.etal * - } - { - bbl.and - space.word * t * - } - if$ - } - if$ - } - 't - if$ - nameptr #1 + 'nameptr := - namesleft #1 - 'namesleft := - } - while$ -} - -FUNCTION {author.editor.key.full} -{ author empty$ - { editor empty$ - { key empty$ - { cite$ #1 #3 substring$ } - 'key - if$ - } - { editor format.full.names } - if$ - } - { author format.full.names } - if$ -} - -FUNCTION {author.key.full} -{ author empty$ - { key empty$ - { cite$ #1 #3 substring$ } - 'key - if$ - } - { author format.full.names } - if$ -} - -FUNCTION {editor.key.full} -{ editor empty$ - { key empty$ - { cite$ #1 #3 substring$ } - 'key - if$ - } - { editor format.full.names } - if$ -} - -FUNCTION {make.full.names} -{ type$ "book" = - type$ "inbook" = - or - 'author.editor.key.full - { type$ "proceedings" = - 'editor.key.full - 'author.key.full - if$ - } - if$ -} - -FUNCTION {output.bibitem} -{ newline$ - "\bibitem[{" write$ - label write$ - ")" make.full.names duplicate$ short.list = - { pop$ } - { * } - if$ - "}]{" * write$ - cite$ write$ - "}" write$ - newline$ - "" - before.all 'output.state := -} - -FUNCTION {n.dashify} -{ - 't := - "" - { t empty$ not } - { t #1 #1 substring$ "-" = - { t #1 #2 substring$ "--" = not - { "--" * - t #2 global.max$ substring$ 't := - } - { { t #1 #1 substring$ "-" = } - { "-" * - t #2 global.max$ substring$ 't := - } - while$ - } - if$ - } - { t #1 #1 substring$ * - t #2 global.max$ substring$ 't := - } - if$ - } - while$ -} - -FUNCTION {word.in} -{ bbl.in capitalize - ":" * - " " * } - -FUNCTION {format.date} -{ year "year" bibinfo.check duplicate$ empty$ - { - "empty year in " cite$ * "; set to ????" * warning$ - pop$ "????" - } - 'skip$ - if$ - extra.label * - before.all 'output.state := - " (" swap$ * ")" * -} -FUNCTION {format.btitle} -{ title "title" bibinfo.check - duplicate$ empty$ 'skip$ - { - emphasize - } - if$ -} -FUNCTION {either.or.check} -{ empty$ - 'pop$ - { "can't use both " swap$ * " fields in " * cite$ * warning$ } - if$ -} -FUNCTION {format.bvolume} -{ volume empty$ - { "" } - { bbl.volume volume tie.or.space.prefix - "volume" bibinfo.check * * - series "series" bibinfo.check - duplicate$ empty$ 'pop$ - { emphasize ", " * swap$ * } - if$ - "volume and number" number either.or.check - } - if$ -} -FUNCTION {format.number.series} -{ volume empty$ - { number empty$ - { series field.or.null } - { series empty$ - { number "number" bibinfo.check } - { output.state mid.sentence = - { bbl.number } - { bbl.number capitalize } - if$ - number tie.or.space.prefix "number" bibinfo.check * * - bbl.in space.word * - series "series" bibinfo.check * - } - if$ - } - if$ - } - { "" } - if$ -} - -FUNCTION {format.edition} -{ edition duplicate$ empty$ 'skip$ - { - output.state mid.sentence = - { "l" } - { "t" } - if$ change.case$ - "edition" bibinfo.check - " " * bbl.edition * - } - if$ -} -INTEGERS { multiresult } -FUNCTION {multi.page.check} -{ 't := - #0 'multiresult := - { multiresult not - t empty$ not - and - } - { t #1 #1 substring$ - duplicate$ "-" = - swap$ duplicate$ "," = - swap$ "+" = - or or - { #1 'multiresult := } - { t #2 global.max$ substring$ 't := } - if$ - } - while$ - multiresult -} -FUNCTION {format.pages} -{ pages duplicate$ empty$ 'skip$ - { duplicate$ multi.page.check - { - bbl.pages swap$ - n.dashify - } - { - bbl.page swap$ - } - if$ - tie.or.space.prefix - "pages" bibinfo.check - * * - } - if$ -} -FUNCTION {format.journal.pages} -{ pages duplicate$ empty$ 'pop$ - { swap$ duplicate$ empty$ - { pop$ pop$ format.pages } - { - ": " * - swap$ - n.dashify - "pages" bibinfo.check - * - } - if$ - } - if$ -} -FUNCTION {format.journal.eid} -{ eid "eid" bibinfo.check - duplicate$ empty$ 'pop$ - { swap$ duplicate$ empty$ 'skip$ - { - ": " * - } - if$ - swap$ * - } - if$ -} -FUNCTION {format.vol.num.pages} -{ volume field.or.null - duplicate$ empty$ 'skip$ - { - "volume" bibinfo.check - } - if$ - number "number" bibinfo.check duplicate$ empty$ 'skip$ - { - swap$ duplicate$ empty$ - { "there's a number but no volume in " cite$ * warning$ } - 'skip$ - if$ - swap$ - "(" swap$ * ")" * - } - if$ * -} - -FUNCTION {format.chapter.pages} -{ chapter empty$ - { "" } - { type empty$ - { bbl.chapter } - { type "l" change.case$ - "type" bibinfo.check - } - if$ - chapter tie.or.space.prefix - "chapter" bibinfo.check - * * - } - if$ -} - -FUNCTION {format.booktitle} -{ - booktitle "booktitle" bibinfo.check - emphasize -} -FUNCTION {format.in.ed.booktitle} -{ format.booktitle duplicate$ empty$ 'skip$ - { - format.bvolume duplicate$ empty$ 'pop$ - { ", " swap$ * * } - if$ - editor "editor" format.names.ed duplicate$ empty$ 'pop$ - { - " " * - get.bbl.editor - "(" swap$ * ") " * - * swap$ - * } - if$ - word.in swap$ * - } - if$ -} -FUNCTION {format.thesis.type} -{ type duplicate$ empty$ - 'pop$ - { swap$ pop$ - "t" change.case$ "type" bibinfo.check - } - if$ -} -FUNCTION {format.tr.number} -{ number "number" bibinfo.check - type duplicate$ empty$ - { pop$ bbl.techrep } - 'skip$ - if$ - "type" bibinfo.check - swap$ duplicate$ empty$ - { pop$ "t" change.case$ } - { tie.or.space.prefix * * } - if$ -} -FUNCTION {format.article.crossref} -{ - word.in - " \cite{" * crossref * "}" * -} -FUNCTION {format.book.crossref} -{ volume duplicate$ empty$ - { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ - pop$ word.in - } - { bbl.volume - capitalize - swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word * - } - if$ - " \cite{" * crossref * "}" * -} -FUNCTION {format.incoll.inproc.crossref} -{ - word.in - " \cite{" * crossref * "}" * -} -FUNCTION {format.org.or.pub} -{ 't := - "" - address empty$ t empty$ and - 'skip$ - { - address "address" bibinfo.check * - t empty$ - 'skip$ - { address empty$ - 'skip$ - { ": " * } - if$ - t * - } - if$ - } - if$ -} -FUNCTION {format.publisher.address} -{ publisher "publisher" bibinfo.warn format.org.or.pub -} - -FUNCTION {format.organization.address} -{ organization "organization" bibinfo.check format.org.or.pub -} - -FUNCTION {article} -{ output.bibitem - format.authors "author" output.check - author format.key output - format.date "year" output.check - date.block - format.title "title" output.check - new.block - crossref missing$ - { - journal - "journal" bibinfo.check - emphasize - "journal" output.check - add.blank - format.vol.num.pages output - } - { format.article.crossref output.nonnull - } - if$ - eid empty$ - { format.journal.pages } - { format.journal.eid } - if$ - format.doi output - new.block - format.url output - new.block - format.note output - fin.entry -} -FUNCTION {book} -{ output.bibitem - author empty$ - { format.editors "author and editor" output.check - editor format.key output - add.blank - } - { format.authors output.nonnull - crossref missing$ - { "author and editor" editor either.or.check } - 'skip$ - if$ - } - if$ - format.date "year" output.check - date.block - format.btitle "title" output.check - crossref missing$ - { format.bvolume output - new.block - format.number.series output - format.edition output - new.sentence - format.publisher.address output - } - { - new.block - format.book.crossref output.nonnull - } - if$ - format.isbn output - format.doi output - new.block - format.url output - new.block - format.note output - fin.entry -} -FUNCTION {booklet} -{ output.bibitem - format.authors output - author format.key output - format.date "year" output.check - date.block - format.title "title" output.check - new.block - howpublished "howpublished" bibinfo.check output - address "address" bibinfo.check output - format.isbn output - format.doi output - new.block - format.url output - new.block - format.note output - fin.entry -} - -FUNCTION {inbook} -{ output.bibitem - author empty$ - { format.editors "author and editor" output.check - editor format.key output - } - { format.authors output.nonnull - crossref missing$ - { "author and editor" editor either.or.check } - 'skip$ - if$ - } - if$ - format.date "year" output.check - date.block - format.btitle "title" output.check - crossref missing$ - { - format.bvolume output - format.chapter.pages "chapter and pages" output.check - new.block - format.number.series output - format.edition output - new.sentence - format.publisher.address output - } - { - format.chapter.pages "chapter and pages" output.check - new.block - format.book.crossref output.nonnull - } - if$ - crossref missing$ - { format.isbn output } - 'skip$ - if$ - format.pages "pages" output.check - format.doi output - new.block - format.url output - new.block - format.note output - fin.entry -} - -FUNCTION {incollection} -{ output.bibitem - format.authors "author" output.check - author format.key output - format.date "year" output.check - date.block - format.title "title" output.check - new.block - crossref missing$ - { format.in.ed.booktitle "booktitle" output.check - format.number.series output - format.edition output - format.chapter.pages output - new.sentence - format.publisher.address output - format.isbn output - } - { format.incoll.inproc.crossref output.nonnull - format.chapter.pages output - } - if$ - format.pages "pages" output.check - format.doi output - new.block - format.url output - new.block - format.note output - fin.entry -} -FUNCTION {inproceedings} -{ output.bibitem - format.authors "author" output.check - author format.key output - format.date "year" output.check - date.block - format.title "title" output.check - new.block - crossref missing$ - { format.in.ed.booktitle "booktitle" output.check - format.number.series output - new.sentence - publisher empty$ - { format.organization.address output } - { organization "organization" bibinfo.check output - format.publisher.address output - } - if$ - format.isbn output - } - { format.incoll.inproc.crossref output.nonnull - } - if$ - format.pages "pages" output.check - format.doi output - new.block - format.url output - new.block - format.note output - fin.entry -} -FUNCTION {conference} { inproceedings } -FUNCTION {manual} -{ output.bibitem - format.authors output - author format.key output - format.date "year" output.check - date.block - format.btitle "title" output.check - organization address new.block.checkb - organization "organization" bibinfo.check output - address "address" bibinfo.check output - format.edition output - format.doi output - new.block - format.url output - new.block - format.note output - fin.entry -} - -FUNCTION {mastersthesis} -{ output.bibitem - format.authors "author" output.check - author format.key output - format.date "year" output.check - date.block - format.btitle - "title" output.check - new.block - bbl.mthesis format.thesis.type output.nonnull - school "school" bibinfo.warn output - address "address" bibinfo.check output - format.doi output - new.block - format.url output - new.block - format.note output - fin.entry -} - -FUNCTION {misc} -{ output.bibitem - format.authors output - author format.key output - format.date "year" output.check - date.block - format.title output - new.block - howpublished "howpublished" bibinfo.check output - format.doi output - new.block - format.url output - new.block - format.note output - fin.entry -} -FUNCTION {phdthesis} -{ output.bibitem - format.authors "author" output.check - author format.key output - format.date "year" output.check - date.block - format.btitle - "title" output.check - new.block - bbl.phdthesis format.thesis.type output.nonnull - school "school" bibinfo.warn output - address "address" bibinfo.check output - format.doi output - new.block - format.url output - new.block - format.note output - fin.entry -} - -FUNCTION {proceedings} -{ output.bibitem - format.editors output - editor format.key output - format.date "year" output.check - date.block - format.btitle "title" output.check - format.bvolume output - format.number.series output - new.sentence - publisher empty$ - { format.organization.address output } - { organization "organization" bibinfo.check output - format.publisher.address output - } - if$ - format.isbn output - format.doi output - new.block - format.url output - new.block - format.note output - fin.entry -} - -FUNCTION {techreport} -{ output.bibitem - format.authors "author" output.check - author format.key output - format.date "year" output.check - date.block - format.title - "title" output.check - new.block - format.tr.number output.nonnull - institution "institution" bibinfo.warn output - address "address" bibinfo.check output - format.doi output - new.block - format.url output - new.block - format.note output - fin.entry -} - -FUNCTION {unpublished} -{ output.bibitem - format.authors "author" output.check - author format.key output - format.date "year" output.check - date.block - format.title "title" output.check - format.doi output - new.block - format.url output - new.block - format.note "note" output.check - fin.entry -} - -FUNCTION {default.type} { misc } -READ -FUNCTION {sortify} -{ purify$ - "l" change.case$ -} -INTEGERS { len } -FUNCTION {chop.word} -{ 's := - 'len := - s #1 len substring$ = - { s len #1 + global.max$ substring$ } - 's - if$ -} -FUNCTION {format.lab.names} -{ 's := - "" 't := - s #1 "{vv~}{ll}" format.name$ - s num.names$ duplicate$ - #2 > - { pop$ - " " * bbl.etal * - } - { #2 < - 'skip$ - { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = - { - " " * bbl.etal * - } - { bbl.and space.word * s #2 "{vv~}{ll}" format.name$ - * } - if$ - } - if$ - } - if$ -} - -FUNCTION {author.key.label} -{ author empty$ - { key empty$ - { cite$ #1 #3 substring$ } - 'key - if$ - } - { author format.lab.names } - if$ -} - -FUNCTION {author.editor.key.label} -{ author empty$ - { editor empty$ - { key empty$ - { cite$ #1 #3 substring$ } - 'key - if$ - } - { editor format.lab.names } - if$ - } - { author format.lab.names } - if$ -} - -FUNCTION {editor.key.label} -{ editor empty$ - { key empty$ - { cite$ #1 #3 substring$ } - 'key - if$ - } - { editor format.lab.names } - if$ -} - -FUNCTION {calc.short.authors} -{ type$ "book" = - type$ "inbook" = - or - 'author.editor.key.label - { type$ "proceedings" = - 'editor.key.label - 'author.key.label - if$ - } - if$ - 'short.list := -} - -FUNCTION {calc.label} -{ calc.short.authors - short.list - "(" - * - year duplicate$ empty$ - short.list key field.or.null = or - { pop$ "" } - 'skip$ - if$ - * - 'label := -} - -FUNCTION {sort.format.names} -{ 's := - #1 'nameptr := - "" - s num.names$ 'numnames := - numnames 'namesleft := - { namesleft #0 > } - { s nameptr - "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" - format.name$ 't := - nameptr #1 > - { - " " * - namesleft #1 = t "others" = and - { "zzzzz" 't := } - 'skip$ - if$ - t sortify * - } - { t sortify * } - if$ - nameptr #1 + 'nameptr := - namesleft #1 - 'namesleft := - } - while$ -} - -FUNCTION {sort.format.title} -{ 't := - "A " #2 - "An " #3 - "The " #4 t chop.word - chop.word - chop.word - sortify - #1 global.max$ substring$ -} -FUNCTION {author.sort} -{ author empty$ - { key empty$ - { "to sort, need author or key in " cite$ * warning$ - "" - } - { key sortify } - if$ - } - { author sort.format.names } - if$ -} -FUNCTION {author.editor.sort} -{ author empty$ - { editor empty$ - { key empty$ - { "to sort, need author, editor, or key in " cite$ * warning$ - "" - } - { key sortify } - if$ - } - { editor sort.format.names } - if$ - } - { author sort.format.names } - if$ -} -FUNCTION {editor.sort} -{ editor empty$ - { key empty$ - { "to sort, need editor or key in " cite$ * warning$ - "" - } - { key sortify } - if$ - } - { editor sort.format.names } - if$ -} -FUNCTION {presort} -{ calc.label - label sortify - " " - * - type$ "book" = - type$ "inbook" = - or - 'author.editor.sort - { type$ "proceedings" = - 'editor.sort - 'author.sort - if$ - } - if$ - #1 entry.max$ substring$ - 'sort.label := - sort.label - * - " " - * - title field.or.null - sort.format.title - * - #1 entry.max$ substring$ - 'sort.key$ := -} - -ITERATE {presort} -SORT -STRINGS { last.label next.extra } -INTEGERS { last.extra.num last.extra.num.extended last.extra.num.blank number.label } -FUNCTION {initialize.extra.label.stuff} -{ #0 int.to.chr$ 'last.label := - "" 'next.extra := - #0 'last.extra.num := - "a" chr.to.int$ #1 - 'last.extra.num.blank := - last.extra.num.blank 'last.extra.num.extended := - #0 'number.label := -} -FUNCTION {forward.pass} -{ last.label label = - { last.extra.num #1 + 'last.extra.num := - last.extra.num "z" chr.to.int$ > - { "a" chr.to.int$ 'last.extra.num := - last.extra.num.extended #1 + 'last.extra.num.extended := - } - 'skip$ - if$ - last.extra.num.extended last.extra.num.blank > - { last.extra.num.extended int.to.chr$ - last.extra.num int.to.chr$ - * 'extra.label := } - { last.extra.num int.to.chr$ 'extra.label := } - if$ - } - { "a" chr.to.int$ 'last.extra.num := - "" 'extra.label := - label 'last.label := - } - if$ - number.label #1 + 'number.label := -} -FUNCTION {reverse.pass} -{ next.extra "b" = - { "a" 'extra.label := } - 'skip$ - if$ - extra.label 'next.extra := - extra.label - duplicate$ empty$ - 'skip$ - { "{\natexlab{" swap$ * "}}" * } - if$ - 'extra.label := - label extra.label * 'label := -} -EXECUTE {initialize.extra.label.stuff} -ITERATE {forward.pass} -REVERSE {reverse.pass} -FUNCTION {bib.sort.order} -{ sort.label - " " - * - year field.or.null sortify - * - " " - * - title field.or.null - sort.format.title - * - #1 entry.max$ substring$ - 'sort.key$ := -} -ITERATE {bib.sort.order} -SORT -FUNCTION {begin.bib} -{ preamble$ empty$ - 'skip$ - { preamble$ write$ newline$ } - if$ - "\begin{thebibliography}{" number.label int.to.str$ * "}" * - write$ newline$ - "\providecommand{\natexlab}[1]{#1}" - write$ newline$ - "\providecommand{\url}[1]{\texttt{#1}}" - write$ newline$ - "\providecommand{\urlprefix}{URL }" - write$ newline$ - "\expandafter\ifx\csname urlstyle\endcsname\relax" - write$ newline$ - " \providecommand{\doi}[1]{DOI:\discretionary{}{}{}#1}\else" - write$ newline$ - " \providecommand{\doi}{DOI:\discretionary{}{}{}\begingroup \urlstyle{rm}\Url}\fi" - write$ newline$ -} -EXECUTE {begin.bib} -EXECUTE {init.state.consts} -ITERATE {call.type$} -FUNCTION {end.bib} -{ newline$ - "\end{thebibliography}" write$ newline$ -} -EXECUTE {end.bib} -%% End of customized bst file -%% -%% End of file `SageH.bst'. diff --git a/journal/Sage_LaTeX_Guidelines.tex b/journal/Sage_LaTeX_Guidelines.tex deleted file mode 100644 index 7c39f0f..0000000 --- a/journal/Sage_LaTeX_Guidelines.tex +++ /dev/null @@ -1,378 +0,0 @@ -% sage_latex_guidelines.tex V1.20, 14 January 2017 - -\documentclass[Afour,sageh,times]{sagej} - -\usepackage{moreverb,url} - -\usepackage[colorlinks,bookmarksopen,bookmarksnumbered,citecolor=red,urlcolor=red]{hyperref} - -\newcommand\BibTeX{{\rmfamily B\kern-.05em \textsc{i\kern-.025em b}\kern-.08em -T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}} - -\def\volumeyear{2016} - -\begin{document} - -\runninghead{Smith and Wittkopf} - -\title{A demonstration of the \LaTeXe\ class file for -\itshape{SAGE Publications}} - -\author{Alistair Smith\affilnum{1} and Hendrik Wittkopf\affilnum{2}} - -\affiliation{\affilnum{1}Sunrise Setting Ltd, UK\\ -\affilnum{2}SAGE Publications Ltd, UK} - -\corrauth{Alistair Smith, Sunrise Setting Ltd -Brixham Laboratory, -Freshwater Quarry, -Brixham, Devon, -TQ5~8BA, UK.} - -\email{alistair.smith@sunrise-setting.co.uk} - -\begin{abstract} -This paper describes the use of the \LaTeXe\ -\textsf{\journalclass} class file for setting papers to be -submitted to a \textit{SAGE Publications} journal. -The template can be downloaded \href{http://www.uk.sagepub.com/repository/binaries/SAGE LaTeX template.zip}{here}. -\end{abstract} - -\keywords{Class file, \LaTeXe, \textit{SAGE Publications}} - -\maketitle - -\section{Introduction} -Many authors submitting to research journals use \LaTeXe\ to -prepare their papers. This paper describes the -\textsf{\journalclass} class file which can be used to convert -articles produced with other \LaTeXe\ class files into the correct -form for submission to \textit{SAGE Publications}. - -The \textsf{\journalclass} class file preserves much of the -standard \LaTeXe\ interface so that any document which was -produced using the standard \LaTeXe\ \textsf{article} style can -easily be converted to work with the \textsf{\journalclassshort} -style. However, the width of text and typesize will vary from that -of \textsf{article.cls}; therefore, \textit{line breaks will change} -and it is likely that displayed mathematics and tabular material -will need re-setting. - -In the following sections we describe how to lay out your code to -use \textsf{\journalclass} to reproduce much of the typographical look of -the \textit{SAGE} journal that you wish to submit to. However, this paper is not a guide to -using \LaTeXe\ and we would refer you to any of the many books -available (see, for example, \cite{R1}, \cite{R2} and \cite{R3}). - -\section{The three golden rules} -Before we proceed, we would like to stress \textit{three golden -rules} that need to be followed to enable the most efficient use -of your code at the typesetting stage: -\begin{enumerate} -\item[(i)] keep your own macros to an absolute minimum; - -\item[(ii)] as \TeX\ is designed to make sensible spacing -decisions by itself, do \textit{not} use explicit horizontal or -vertical spacing commands, except in a few accepted (mostly -mathematical) situations, such as \verb"\," before a -differential~d, or \verb"\quad" to separate an equation from its -qualifier; - -\item[(iii)] follow the journal reference style. -\end{enumerate} - -\section{Getting started} The \textsf{\journalclassshort} class file should run -on any standard \LaTeXe\ installation. If any of the fonts, style -files or packages it requires are missing from your installation, -they can be found on the \textit{\TeX\ Collection} DVDs or downloaded from -CTAN. - -\begin{figure*} -\setlength{\fboxsep}{0pt}% -\setlength{\fboxrule}{0pt}% -\begin{center} -\begin{boxedverbatim} -\documentclass[]{sagej} - -\begin{document} - -\runninghead{} - -\title{} - -\author{} - -\affiliation{<\affilnum{1}First and third authors' affiliation\\ -\affilnum{2}Second author affiliation>} - -\corrauth{} - -\email{} - -\begin{abstract} - -\end{abstract} - -\keywords{} - -\maketitle - -\section{Introduction} -. -. -. -\end{boxedverbatim} -\end{center} -\caption{Example header text.\label{F1}} -\end{figure*} - -\section{The article header information} -The heading for any file using \textsf{\journalclass} is shown in -Figure~\ref{F1}. You must select options for the trim/text area and -the reference style of the journal you are submitting to. -The choice of \verb+options+ are listed in Table~\ref{T1}. - -\begin{table}[h] -\small\sf\centering -\caption{The choice of options.\label{T1}} -\begin{tabular}{lll} -\toprule -Option&Trim and font size&Columns\\ -\midrule -\texttt{shortAfour}& 210 $\times$ 280 mm, 10pt& Double column\\ -\texttt{Afour} &210 $\times$ 297 mm, 10pt& Double column\\ -\texttt{MCfour} &189 $\times$ 246 mm, 10pt& Double column\\ -\texttt{PCfour} &170 $\times$ 242 mm, 10pt& Double column\\ -\texttt{Royal} &156 $\times$ 234 mm, 10pt& Single column\\ -\texttt{Crown} &7.25 $\times$ 9.5 in, 10pt&Single column\\ -\texttt{Review} & 156 $\times$ 234 mm, 12pt & Single column\\ -\bottomrule -\end{tabular}\\[10pt] -\begin{tabular}{ll} -\toprule -Option&Reference style\\ -\midrule -\texttt{sageh}&SAGE Harvard style (author-year)\\ -\texttt{sagev}&SAGE Vancouver style (superscript numbers)\\ -\texttt{sageapa}&APA style (author-year)\\ -\bottomrule -\end{tabular} -\end{table} - -For example, if your journal is short A4 sized, uses Times fonts and has Harvard style references then you would need\\ -{\small\verb+\documentclass[ShortAfour,times,sageh]{sagej}+} - -Most \textit{SAGE} journals are published using Times fonts but if for any reason you have a problem using Times you can -easily resort to Computer Modern fonts by removing the -\verb"times" option. - -\subsection{`Review' option} -Some journals (for example, \emph{Journal of the Society for Clinical Trials}) require that -papers are set single column and with a larger font size to help with the review process. -If this is a requirement for the journal that you are submitting to, just add the \verb+Review+ option to the \verb+\documenclass[]{sagej}+ line. - -\subsection{Remarks} -\begin{enumerate} -\item[(i)] In \verb"\runninghead" use `\textit{et~al.}' if there -are three or more authors. - -\item[(ii)] For multiple author papers please note the use of \verb"\affilnum" to -link names and affiliations. The corresponding author details need to be included using the -\verb+\corrauth+ and \verb+\email+ commands. - -\item[(iii)] For submitting a double-spaced manuscript, add -\verb"doublespace" as an option to the documentclass line. - -\item[(iv)] The abstract should be capable of standing by itself, -in the absence of the body of the article and of the bibliography. -Therefore, it must not contain any reference citations. - -\item[(v)] Keywords are separated by commas. - -\item[(vi)] If you are submitting to a \textit{SAGE} journal that requires numbered sections (for example, IJRR), please add the command - \verb+\setcounter{secnumdepth}{3}+ just above the \verb+\begin{document}+ line. - -\end{enumerate} - - -\section{The body of the article} - -\subsection{Mathematics} \textsf{\journalclass} makes the full -functionality of \AmS\/\TeX\ available. We encourage the use of -the \verb"align", \verb"gather" and \verb"multline" environments -for displayed mathematics. \textsf{amsthm} is used for setting -theorem-like and proof environments. The usual \verb"\newtheorem" -command needs to be used to set up the environments for your -particular document. - -\subsection{Figures and tables} \textsf{\journalclass} includes the -\textsf{graphicx} package for handling figures. - -Figures are called in as follows: -\begin{verbatim} -\begin{figure} -\centering -\includegraphics{
} -\caption{
} -\end{figure} -\end{verbatim} - -For further details on how to size figures, etc., with the -\textsf{graphicx} package see, for example, \cite{R1} -or \cite{R3}. - -The standard coding for a table is shown in Figure~\ref{F2}. - -\begin{figure} -\setlength{\fboxsep}{0pt}% -\setlength{\fboxrule}{0pt}% -\begin{center} -\begin{boxedverbatim} -\begin{table} -\small\sf\centering -\caption{} -\begin{tabular}{
} -\toprule -\\ -\midrule -
\\ -
\\ -. -. -.\\ -\bottomrule -\end{tabular} -\end{table} -\end{boxedverbatim} -\end{center} -\caption{Example table layout.\label{F2}} -\end{figure} - -\subsection{Cross-referencing} -The use of the \LaTeX\ cross-reference system -for figures, tables, equations, etc., is encouraged -(using \verb"\ref{}" and \verb"\label{}"). - -\subsection{End of paper special sections} -Depending on the requirements of the journal that you are submitting to, -there are macros defined to typeset various special sections. - -The commands available are: -\begin{verbatim} -\begin{acks} -To typeset an - "Acknowledgements" section. -\end{acks} -\end{verbatim} - -\begin{verbatim} -\begin{biog} -To typeset an - "Author biography" section. -\end{biog} -\end{verbatim} - -\begin{verbatim} -\begin{biogs} -To typeset an - "Author Biographies" section. -\end{biogs} -\end{verbatim} - -%\newpage - -\begin{verbatim} -\begin{dci} -To typeset a "Declaration of - conflicting interests" section. -\end{dci} -\end{verbatim} - -\begin{verbatim} -\begin{funding} -To typeset a "Funding" section. -\end{funding} -\end{verbatim} - -\begin{verbatim} -\begin{sm} -To typeset a - "Supplemental material" section. -\end{sm} -\end{verbatim} - -\subsection{Endnotes} -Most \textit{SAGE} journals use endnotes rather than footnotes, so any notes should be coded as \verb+\endnote{}+. -Place the command \verb+\theendnotes+ just above the Reference section to typeset the endnotes. - -To avoid any confusion for papers that use Vancouver style references, footnotes/endnotes should be edited into the text. - -\subsection{References} -Please note that the files \textsf{SageH.bst} and \textsf{SageV.bst} are included with the class file -for those authors using \BibTeX. -The files work in a completely standard way, and you just need to uncomment one of the lines in the below example depending on what style you require: -\begin{verbatim} -%%Harvard (name/date) -%\bibliographystyle{SageH} -%%Vancouver (numbered) -%\bibliographystyle{SageV} -\bibliography{} -\end{verbatim} -and remember to add the relevant option to the \verb+\documentclass[]{sagej}+ line as listed in Table~\ref{T1}. - -%\section{Support for \textsf{\journalclass}} -%We offer on-line support to participating authors. Please contact -%us via e-mail at \dots -% -%We would welcome any feedback, positive or otherwise, on your -%experiences of using \textsf{\journalclass}. - -\section{Copyright statement} -Please be aware that the use of this \LaTeXe\ class file is -governed by the following conditions. - -\subsection{Copyright} -Copyright \copyright\ \volumeyear\ SAGE Publications Ltd, -1 Oliver's Yard, 55 City Road, London, EC1Y~1SP, UK. All -rights reserved. - -\subsection{Rules of use} -This class file is made available for use by authors who wish to -prepare an article for publication in a \textit{SAGE Publications} journal. -The user may not exploit any -part of the class file commercially. - -This class file is provided on an \textit{as is} basis, without -warranties of any kind, either express or implied, including but -not limited to warranties of title, or implied warranties of -merchantablility or fitness for a particular purpose. There will -be no duty on the author[s] of the software or SAGE Publications Ltd -to correct any errors or defects in the software. Any -statutory rights you may have remain unaffected by your -acceptance of these rules of use. - -\begin{acks} -This class file was developed by Sunrise Setting Ltd, -Brixham, Devon, UK.\\ -Website: \url{http://www.sunrise-setting.co.uk} -\end{acks} - -\begin{thebibliography}{99} -\bibitem[Kopka and Daly(2003)]{R1} -Kopka~H and Daly~PW (2003) \textit{A Guide to \LaTeX}, 4th~edn. -Addison-Wesley. - -\bibitem[Lamport(1994)]{R2} -Lamport~L (1994) \textit{\LaTeX: a Document Preparation System}, -2nd~edn. Addison-Wesley. - -\bibitem[Mittelbach and Goossens(2004)]{R3} -Mittelbach~F and Goossens~M (2004) \textit{The \LaTeX\ Companion}, -2nd~edn. Addison-Wesley. - -\end{thebibliography} - -\end{document} diff --git a/journal/iopams.sty b/journal/iopams.sty new file mode 100644 index 0000000..baf2b72 --- /dev/null +++ b/journal/iopams.sty @@ -0,0 +1 @@ +%% %% This is file `iopams.sty' %% File to include AMS fonts and extra definitions for bold greek %% characters for use with iopart.cls %% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{iopams}[1997/02/13 v1.0] \RequirePackage{amsgen}[1995/01/01] \RequirePackage{amsfonts}[1995/01/01] \RequirePackage{amssymb}[1995/01/01] \RequirePackage{amsbsy}[1995/01/01] % \iopamstrue % \newif\ifiopams in iopart.cls & iopbk2e.cls % % allows optional text to be in author guidelines % % Bold lower case Greek letters % \newcommand{\balpha}{\boldsymbol{\alpha}} \newcommand{\bbeta}{\boldsymbol{\beta}} \newcommand{\bgamma}{\boldsymbol{\gamma}} \newcommand{\bdelta}{\boldsymbol{\delta}} \newcommand{\bepsilon}{\boldsymbol{\epsilon}} \newcommand{\bzeta}{\boldsymbol{\zeta}} \newcommand{\bfeta}{\boldsymbol{\eta}} \newcommand{\btheta}{\boldsymbol{\theta}} \newcommand{\biota}{\boldsymbol{\iota}} \newcommand{\bkappa}{\boldsymbol{\kappa}} \newcommand{\blambda}{\boldsymbol{\lambda}} \newcommand{\bmu}{\boldsymbol{\mu}} \newcommand{\bnu}{\boldsymbol{\nu}} \newcommand{\bxi}{\boldsymbol{\xi}} \newcommand{\bpi}{\boldsymbol{\pi}} \newcommand{\brho}{\boldsymbol{\rho}} \newcommand{\bsigma}{\boldsymbol{\sigma}} \newcommand{\btau}{\boldsymbol{\tau}} \newcommand{\bupsilon}{\boldsymbol{\upsilon}} \newcommand{\bphi}{\boldsymbol{\phi}} \newcommand{\bchi}{\boldsymbol{\chi}} \newcommand{\bpsi}{\boldsymbol{\psi}} \newcommand{\bomega}{\boldsymbol{\omega}} \newcommand{\bvarepsilon}{\boldsymbol{\varepsilon}} \newcommand{\bvartheta}{\boldsymbol{\vartheta}} \newcommand{\bvaromega}{\boldsymbol{\varomega}} \newcommand{\bvarrho}{\boldsymbol{\varrho}} \newcommand{\bvarzeta}{\boldsymbol{\varsigma}} %NB really sigma \newcommand{\bvarsigma}{\boldsymbol{\varsigma}} \newcommand{\bvarphi}{\boldsymbol{\varphi}} % % Bold upright capital Greek letters % \newcommand{\bGamma}{\boldsymbol{\Gamma}} \newcommand{\bDelta}{\boldsymbol{\Delta}} \newcommand{\bTheta}{\boldsymbol{\Theta}} \newcommand{\bLambda}{\boldsymbol{\Lambda}} \newcommand{\bXi}{\boldsymbol{\Xi}} \newcommand{\bPi}{\boldsymbol{\Pi}} \newcommand{\bSigma}{\boldsymbol{\Sigma}} \newcommand{\bUpsilon}{\boldsymbol{\Upsilon}} \newcommand{\bPhi}{\boldsymbol{\Phi}} \newcommand{\bPsi}{\boldsymbol{\Psi}} \newcommand{\bOmega}{\boldsymbol{\Omega}} % % Bold versions of miscellaneous symbols % \newcommand{\bpartial}{\boldsymbol{\partial}} \newcommand{\bell}{\boldsymbol{\ell}} \newcommand{\bimath}{\boldsymbol{\imath}} \newcommand{\bjmath}{\boldsymbol{\jmath}} \newcommand{\binfty}{\boldsymbol{\infty}} \newcommand{\bnabla}{\boldsymbol{\nabla}} \newcommand{\bdot}{\boldsymbol{\cdot}} % % Symbols for caption % \renewcommand{\opensquare}{\mbox{$\square$}} \renewcommand{\opentriangle}{\mbox{$\vartriangle$}} \renewcommand{\opentriangledown}{\mbox{$\triangledown$}} \renewcommand{\opendiamond}{\mbox{$\lozenge$}} \renewcommand{\fullsquare}{\mbox{$\blacksquare$}} \newcommand{\fulldiamond}{\mbox{$\blacklozenge$}} \newcommand{\fullstar}{\mbox{$\bigstar$}} \newcommand{\fulltriangle}{\mbox{$\blacktriangle$}} \newcommand{\fulltriangledown}{\mbox{$\blacktriangledown$}} \endinput %% %% End of file `iopams.sty'. \ No newline at end of file diff --git a/journal/SageV.bst b/journal/iopart-num.bst similarity index 58% rename from journal/SageV.bst rename to journal/iopart-num.bst index 41cc7ff..cc46b18 100644 --- a/journal/SageV.bst +++ b/journal/iopart-num.bst @@ -1,14 +1,76 @@ -% This is file `SageV.bst', -%% Created by Sunrise Setting Ltd, Paignton, UK, www.sunrise-setting.co.uk -%% Version 1.00, 27 July 2013 +% iopart-num.bst -- BibTeX style for IOP journals (Harvard-like numeric style) +% M. A. Caprio +% +% DESCRIPTION +% +% Further documenation may be found in iopart-num.pdf. +% +% Available from CTAN as /biblio/bibtex/contrib/iopart-num. +% +% COPYRIGHT/LICENSE +% +% Copyright 2009 M. A. Caprio +% +% 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 the author. +% +% The contents of this work are listed in the README file. +% +% HISTORY +% +% Version 1.0 (2005/07/11) +% Created using custom-bib (merlin.mbs), with following manual modifications: +% -- remove trailing period from predefined volume, page, etc., abbreviations +% -- provide command \newblock to fix incompatibility between natbib +% and iopart (as of iopart version 1996/06/10) +% -- move edition after booktitle +% -- add version identifier to generated output +% -- for incollection and inproceedings, move volume from after publisher to before +% -- for any series with number, number after series +% Version 2.0 (2006/12/21) +% -- define section field for proper formatting of lettered journal sections +% (suggested by Chris Latham) +% -- suppress printing of number for article, but provide issue field +% for periodicals with issue-based page numbering (suggested by Chris Latham) +% -- patch remove.dots to not strip "\." control sequence (bug reported by Kevin Bube) +% -- define epilog field (undocumented) +% -- delete predefined computer science journal names +% -- bring book volume+number or series+number formatting into IOP form +% -- for book, inbook, and proceedings with editors but no author, fix formating of editors +% -- for incollection and inproceedings, put editors in correct location +% -- for journal: use same page formatting even if volume missing +% Version 2.1 (2009/01/22) +% -- for incollection and inproceedings: support title of chapter (not appropriate +% to inbook) +% -- for book, proceedings, etc.: support volumetitle for multivolume book +% +% LIMITATIONS +% +% Still not in IOP form: +% -- for incollection and inproceedings, editors initials should preceed rather +% than follow last name +% Other: +% -- hyphenated first names lose hyphen + +%% This is file `iopart-num.bst', +%% generated with the docstrip utility. %% %% The original source files were: %% -%% merlin.mbs (with options: `seq-no,nm-rvx,ed-rev,jnrlst,nmlm,x3,m3,mcite,mct-3,mct-x3,dt-jnl,xmth,jxper,volp-sp,pp-last,num-xser,numser,ser-vol,ser-ed,jnm-x,add-pub,pre-edn,isbn,doi,edparxc,pp,ed,xedn,and-xcom,eprint,url,url-blk,nfss,') +%% merlin.mbs (with options: `seq-no,nm-rv,dt-beg,yr-blk,xmth,yrp-x,jtit-x,vol-bf,volp-blk,num-xser,jnm-x,add-pub,pub-par,pre-pub,isbn,issn,blk-com,com-blank,fin-bare,pp,ed,abr,ednx,mth-bare,ord,jabr,and-xcom,etal-it,revdata,eprint,url,url-blk') %% ---------------------------------------- -%% *** Sage Vancouver reference style *** +%% *** Institute of Physics (IOP) journals; Harvard-like numeric style *** %% -%% Copyright 1994-2011 Patrick W Daly +%% Copyright 1994-2002 Patrick W Daly % =============================================================== % IMPORTANT NOTICE: % This bibliographic style (bst) file has been generated from one or @@ -20,7 +82,7 @@ % version 1 of the License, or any later version. % =============================================================== % Name and version information of the main mbs file: - % \ProvidesFile{merlin.mbs}[2011/03/28 4.32 (PWD, AO, DPC)] + % \ProvidesFile{merlin.mbs}[2002/10/21 4.05 (PWD, AO, DPC)] % For use with BibTeX version 0.99a or later %------------------------------------------------------------------- % This bibliography style file is intended for texts in ENGLISH @@ -42,7 +104,7 @@ ENTRY author booktitle chapter - doi + collaboration edition editor eid @@ -50,11 +112,13 @@ ENTRY howpublished institution isbn + issn journal key month note number + numpages organization pages publisher @@ -65,9 +129,126 @@ ENTRY url volume year +%mc + issue + section + epilog + volumetitle + transjournal + transsection + transvolume + transnumber + transissue + transpages + transyear } {} { label } + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% mc utilities +% require merlin.mbs logical operators and field.or.null +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% hang -- {hang} suspends execution, for debugging purposes +% Note that not all pending output may have been flushed. +FUNCTION {hang} +{ + {#1} {skip$} while$ +} + +% string.length -- {s string.length} returns the true character length of s +% In contrast, text.length$ gives special treatment to LaTeX +% accents ("special characters") and braces. +% Example: "" string.length -> 0 +% Example: "hello" string.length -> 5 + +STRINGS {string.length.s } +INTEGERS {string.length.i } +FUNCTION {string.length} +{ + 'string.length.s := + #0 'string.length.i := + { + string.length.s #1 #1 substring$ "" = not + } + { + string.length.i #1 + 'string.length.i := + string.length.s #2 global.max$ substring$ 'string.length.s := + } + while$ + string.length.i +} + +% shared working variables for stripping functions +STRINGS { strip.s strip.t } +INTEGERS { strip.i } + +% strip.leading -- {s t strip.leading} strips t from s if it appears +% as an initial substring +% Example: "abcdef" "abc" strip.leading -> "def" +% Example: "abcdef" "xyz" strip.leading -> "abcdef" + +FUNCTION{strip.leading} +{ + 'strip.t := + 'strip.s := + strip.t string.length 'strip.i := + strip.s #1 strip.i substring$ strip.t = + { strip.s strip.i #1 + global.max$ substring$ } + { strip.s } + if$ +} + +% strip.trailing -- {s t strip.trailing} strips t from s if it appears +% as a terminal substring +% Example: "abcdef" "def" strip.trailing -> "abc" +% Example: "abcdef" "xyz" strip.trailing -> "abcdef" +FUNCTION{strip.trailing} +{ + 'strip.t := + 'strip.s := + strip.t string.length 'strip.i := + strip.s #-1 strip.i substring$ strip.t = + { strip.s #-1 strip.i - global.max$ substring$ } + { strip.s } + if$ +} + +% trim -- {s trim} strips any trailing whitespace from s +% Example: "abcdef " trim -> "abcdef" +STRINGS {trim.s trim.t} +FUNCTION{trim} +{ + 'trim.s := + { + trim.s #-1 #1 substring$ 'trim.t := + trim.t empty$ trim.t string.length #0 > and + } + { trim.s #-2 global.max$ substring$ 'trim.s := } + while$ + trim.s +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + INTEGERS { output.state before.all mid.sentence after.sentence after.block } FUNCTION {init.state.consts} { #0 'before.all := @@ -76,10 +257,11 @@ FUNCTION {init.state.consts} #3 'after.block := } STRINGS { s t} + FUNCTION {output.nonnull} { 's := output.state mid.sentence = - { ", " * write$ } + { " " * write$ } { output.state after.block = { add.period$ write$ newline$ @@ -109,9 +291,26 @@ FUNCTION {output.check} 'output.nonnull if$ } + +%mc +FUNCTION {format.epilog} +{ epilog duplicate$ empty$ + { pop$ } + { * } + if$ +} +%mc end + + FUNCTION {fin.entry} -{ add.period$ - write$ +{ +%mc +format.epilog +%mc end + duplicate$ empty$ + 'pop$ + 'write$ + if$ newline$ } @@ -134,51 +333,37 @@ FUNCTION {new.sentence} FUNCTION {add.blank} { " " * before.all 'output.state := } -%AS add.semicolon added -FUNCTION {add.semicolon} -{ - ";" * - add.blank -} + FUNCTION {date.block} { - new.block + add.blank } -FUNCTION {not} -{ { #0 } - { #1 } - if$ -} -FUNCTION {and} -{ 'skip$ - { pop$ #0 } - if$ -} -FUNCTION {or} -{ { pop$ #1 } - 'skip$ - if$ -} -%AS line below added STRINGS {z} FUNCTION {remove.dots} { 'z := - "" - { z empty$ not } - { z #1 #2 substring$ - duplicate$ "\." = - { z #3 global.max$ substring$ 'z := * } - { pop$ - z #1 #1 substring$ - z #2 global.max$ substring$ 'z := - duplicate$ "." = 'pop$ - { * } - if$ - } - if$ - } - while$ + "" + { z empty$ not } + { +%mc patch to preserve the control sequence \. if it appears in a name + z #1 #2 substring$ "\." = + { + % process "\." sequence + z #3 global.max$ substring$ 'z := + "\." * + } + { + % process regular character + z #1 #1 substring$ + z #2 global.max$ substring$ 'z := + duplicate$ "." = 'pop$ + { * } + if$ + } + if$ +%mc + } + while$ } FUNCTION {new.block.checka} { empty$ @@ -217,7 +402,13 @@ FUNCTION {field.or.null} FUNCTION {emphasize} { duplicate$ empty$ { pop$ "" } - { "\emph{" swap$ * "}" * } + { "{\em " swap$ * "\/}" * } + if$ +} +FUNCTION {bolden} +{ duplicate$ empty$ + { pop$ "" } + { "{\bf " swap$ * "}" * } if$ } FUNCTION {tie.or.space.prefix} @@ -243,117 +434,125 @@ FUNCTION {bbl.etal} { "et~al." } FUNCTION {bbl.editors} -{ "eds." } +{ "eds" } FUNCTION {bbl.editor} -{ "ed." } +{ "ed" } FUNCTION {bbl.edby} { "edited by" } -%AS -%FUNCTION {bbl.edition} -%{ "edition" } FUNCTION {bbl.edition} { "ed" } FUNCTION {bbl.volume} -{ "volume" } +{ "vol" } FUNCTION {bbl.of} { "of" } FUNCTION {bbl.number} -{ "number" } +{ "no" } FUNCTION {bbl.nr} -{ "no." } +{ "no" } FUNCTION {bbl.in} { "in" } FUNCTION {bbl.pages} -{ "pp." } +{ "pp" } FUNCTION {bbl.page} -{ "p." } +{ "p" } + +FUNCTION {bbl.eidpp} +{ "pages" } FUNCTION {bbl.chapter} -{ "chapter" } +{ "chap" } FUNCTION {bbl.techrep} -{ "Technical Report" } +{ "Tech. Rep." } FUNCTION {bbl.mthesis} -{ "Master's Thesis" } +{ "Master's thesis" } FUNCTION {bbl.phdthesis} -{ "PhD Thesis" } +{ "Ph.D. thesis" } -MACRO {jan} {"January"} +FUNCTION {bbl.first} +{ "1st" } -MACRO {feb} {"February"} +FUNCTION {bbl.second} +{ "2nd" } -MACRO {mar} {"March"} +FUNCTION {bbl.third} +{ "3rd" } -MACRO {apr} {"April"} +FUNCTION {bbl.fourth} +{ "4th" } + +FUNCTION {bbl.fifth} +{ "5th" } + +FUNCTION {bbl.st} +{ "st" } + +FUNCTION {bbl.nd} +{ "nd" } + +FUNCTION {bbl.rd} +{ "rd" } + +FUNCTION {bbl.th} +{ "th" } + +MACRO {jan} {"Jan."} + +MACRO {feb} {"Feb."} + +MACRO {mar} {"Mar."} + +MACRO {apr} {"Apr."} MACRO {may} {"May"} -MACRO {jun} {"June"} +MACRO {jun} {"Jun."} -MACRO {jul} {"July"} +MACRO {jul} {"Jul."} -MACRO {aug} {"August"} +MACRO {aug} {"Aug."} -MACRO {sep} {"September"} +MACRO {sep} {"Sep."} -MACRO {oct} {"October"} +MACRO {oct} {"Oct."} -MACRO {nov} {"November"} +MACRO {nov} {"Nov."} -MACRO {dec} {"December"} +MACRO {dec} {"Dec."} -MACRO {acmcs} {"ACM Computing Surveys"} +FUNCTION {eng.ord} +{ duplicate$ "1" swap$ * + #-2 #1 substring$ "1" = + { bbl.th * } + { duplicate$ #-1 #1 substring$ + duplicate$ "1" = + { pop$ bbl.st * } + { duplicate$ "2" = + { pop$ bbl.nd * } + { "3" = + { bbl.rd * } + { bbl.th * } + if$ + } + if$ + } + if$ + } + if$ +} -MACRO {acta} {"Acta Informatica"} - -MACRO {cacm} {"Communications of the ACM"} - -MACRO {ibmjrd} {"IBM Journal of Research and Development"} - -MACRO {ibmsj} {"IBM Systems Journal"} - -MACRO {ieeese} {"IEEE Transactions on Software Engineering"} - -MACRO {ieeetc} {"IEEE Transactions on Computers"} - -MACRO {ieeetcad} - {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} - -MACRO {ipl} {"Information Processing Letters"} - -MACRO {jacm} {"Journal of the ACM"} - -MACRO {jcss} {"Journal of Computer and System Sciences"} - -MACRO {scp} {"Science of Computer Programming"} - -MACRO {sicomp} {"SIAM Journal on Computing"} - -MACRO {tocs} {"ACM Transactions on Computer Systems"} - -MACRO {tods} {"ACM Transactions on Database Systems"} - -MACRO {tog} {"ACM Transactions on Graphics"} - -MACRO {toms} {"ACM Transactions on Mathematical Software"} - -MACRO {toois} {"ACM Transactions on Office Information Systems"} - -MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} - -MACRO {tcs} {"Theoretical Computer Science"} FUNCTION {bibinfo.check} { swap$ duplicate$ missing$ @@ -390,31 +589,46 @@ FUNCTION {bibinfo.warn} } if$ } +%% FUNCTION {format.eprint} +%% { eprint duplicate$ empty$ +%% 'skip$ +%% { "\eprint" +%% archive empty$ +%% 'skip$ +%% { "[" * archive * "]" * } +%% if$ +%% "{" * swap$ * "}" * +%% } +%% if$ +%% } FUNCTION {format.eprint} { eprint duplicate$ empty$ 'skip$ - { "\eprint" + { + "(\textit{Preprint} " + swap$ + "\eprint" archive empty$ 'skip$ { "[" * archive * "]" * } if$ "{" * swap$ * "}" * + * + ")" + * } if$ } + FUNCTION {format.url} -{ - url - duplicate$ empty$ - { pop$ "" } - { "\urlprefix\url{" swap$ * "}" * } +{ url empty$ + { "" } + { "\urlprefix\url{" url * "}" * } if$ } -INTEGERS { nameptr namesleft numnames } - - STRINGS { bibinfo} +INTEGERS { nameptr namesleft numnames } FUNCTION {format.names} { 'bibinfo := @@ -426,21 +640,13 @@ FUNCTION {format.names} numnames 'namesleft := { namesleft #0 > } { s nameptr - "{vv~}{ll}{ f{}}{ jj}" + "{vv~}{ll}{ jj}{ f{~}}" format.name$ remove.dots bibinfo bibinfo.check 't := nameptr #1 > { - nameptr #3 - #1 + = - numnames #3 - > and - { "others" 't := - #1 'namesleft := } - 'skip$ - if$ namesleft #1 > { ", " * t * } { @@ -450,7 +656,7 @@ FUNCTION {format.names} if$ t "others" = { - " " * bbl.etal * + " " * bbl.etal emphasize * } { bbl.and @@ -470,10 +676,60 @@ FUNCTION {format.names} } FUNCTION {format.names.ed} { - format.names + 'bibinfo := + duplicate$ empty$ 'skip$ { + 's := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{f{~}~}{vv~}{ll}{ jj}" + format.name$ + remove.dots + bibinfo bibinfo.check + 't := + nameptr #1 > + { + namesleft #1 > + { ", " * t * } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + + " " * bbl.etal emphasize * + } + { + bbl.and + space.word * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + } if$ } FUNCTION {format.authors} { author "author" format.names + duplicate$ empty$ 'skip$ + { collaboration "collaboration" bibinfo.check + duplicate$ empty$ 'skip$ + { " (" swap$ * ")" * } + if$ + * + } + if$ } FUNCTION {get.bbl.editor} { editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ } @@ -481,33 +737,50 @@ FUNCTION {get.bbl.editor} FUNCTION {format.editors} { editor "editor" format.names duplicate$ empty$ 'skip$ { +%% "," * +%% " " * +%% get.bbl.editor +%% * +%mc " " * + "(" * get.bbl.editor - "(" swap$ * ")" * + * + ")" * +%mc end + } + if$ +} +%mc +FUNCTION {format.editors.inline} +{ editor "editor" format.names duplicate$ empty$ 'skip$ + { + bbl.editor " " * + swap$ * } if$ } +%mc end + FUNCTION {format.isbn} { isbn "isbn" bibinfo.check duplicate$ empty$ 'skip$ { - new.block "ISBN " swap$ * } if$ } -FUNCTION {format.doi} -{ doi empty$ - { "" } +FUNCTION {format.issn} +{ issn "issn" bibinfo.check + duplicate$ empty$ 'skip$ { - new.block - %AS "\doi{" doi * "}" * - "\doi{" DOI * "}" * + "ISSN " swap$ * } if$ } + FUNCTION {format.note} { note empty$ @@ -571,7 +844,7 @@ FUNCTION {n.dashify} } FUNCTION {word.in} -{ bbl.in capitalize +{ bbl.in " " * } FUNCTION {format.date} @@ -591,6 +864,14 @@ FUNCTION {format.date} } if$ * + remove.dots + } + if$ + duplicate$ empty$ + 'skip$ + { + before.all 'output.state := + " " swap$ * } if$ } @@ -610,15 +891,42 @@ FUNCTION {either.or.check} } FUNCTION {format.bvolume} { volume empty$ + % no volume: return blank { "" } - { bbl.volume volume tie.or.space.prefix - "volume" bibinfo.check * * +%% { bbl.volume volume tie.or.space.prefix +%% "volume" bibinfo.check * * +%% series "series" bibinfo.check +%% duplicate$ empty$ 'pop$ +%% { swap$ bbl.of space.word * swap$ +%% emphasize * } +%% if$ +%% "volume and number" number either.or.check +%% } +%mc + { series "series" bibinfo.check - duplicate$ empty$ 'pop$ - { emphasize ", " * swap$ * } + empty$ + % no series: must be multivolume book + { + bbl.volume volume tie.or.space.prefix "volume" bibinfo.check * * + volumetitle empty$ + 'skip$ + % volumetitle: book volume has title + { " " volumetitle "volumetitle" bibinfo.check emphasize * * } + if$ + } + % series: format as volume in series + { + "(" + series "series" bibinfo.check emphasize * + " " * bbl.volume * + volume tie.or.space.prefix "volume" bibinfo.check * + ")" * * + } if$ "volume and number" number either.or.check } +%mc end if$ } FUNCTION {format.number.series} @@ -627,25 +935,91 @@ FUNCTION {format.number.series} { series field.or.null } { series empty$ { number "number" bibinfo.check } - { output.state mid.sentence = - { bbl.number } - { bbl.number capitalize } - if$ - number tie.or.space.prefix "number" bibinfo.check * * - bbl.in space.word * - series "series" bibinfo.check * - } - if$ + { + %% output.state mid.sentence = + %% { bbl.number } + %% { bbl.number capitalize } + %% if$ + %% number tie.or.space.prefix "number" bibinfo.check * * + %% bbl.in space.word * + %% series "series" bibinfo.check * + %% " " * bbl.number * + %% number tie.or.space.prefix "number" bibinfo.check * * +%mc + "(" + series "series" bibinfo.check emphasize * + " " * bbl.number * + number tie.or.space.prefix "number" bibinfo.check * + ")" * + * +%mc end } if$ + } + if$ } { "" } if$ } + +FUNCTION {is.num} +{ chr.to.int$ + duplicate$ "0" chr.to.int$ < not + swap$ "9" chr.to.int$ > not and +} + +FUNCTION {extract.num} +{ duplicate$ 't := + "" 's := + { t empty$ not } + { t #1 #1 substring$ + t #2 global.max$ substring$ 't := + duplicate$ is.num + { s swap$ * 's := } + { pop$ "" 't := } + if$ + } + while$ + s empty$ + 'skip$ + { pop$ s } + if$ +} + +FUNCTION {convert.edition} +{ extract.num "l" change.case$ 's := + s "first" = s "1" = or + { bbl.first 't := } + { s "second" = s "2" = or + { bbl.second 't := } + { s "third" = s "3" = or + { bbl.third 't := } + { s "fourth" = s "4" = or + { bbl.fourth 't := } + { s "fifth" = s "5" = or + { bbl.fifth 't := } + { s #1 #1 substring$ is.num + { s eng.ord 't := } + { edition 't := } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + t +} + FUNCTION {format.edition} { edition duplicate$ empty$ 'skip$ { + convert.edition output.state mid.sentence = { "l" } { "t" } @@ -694,53 +1068,77 @@ FUNCTION {format.pages} } FUNCTION {format.journal.pages} { pages duplicate$ empty$ 'pop$ - { swap$ duplicate$ empty$ - { pop$ pop$ format.pages } - { - ": " * +%mc { swap$ duplicate$ empty$ +%mc { pop$ pop$ format.pages } +%mc { +%mc " " * +%mc swap$ +%mc n.dashify +%mc "pages" bibinfo.check +%mc * +%mc } +%mc if$ +%mc } + { swap$ + " " * swap$ n.dashify "pages" bibinfo.check * - } - if$ } if$ } FUNCTION {format.journal.eid} { eid "eid" bibinfo.check - duplicate$ empty$ 'pop$ + duplicate$ empty$ 'skip$ { swap$ duplicate$ empty$ 'skip$ { - ": " * + " " * } if$ - swap$ * + swap$ + numpages empty$ 'skip$ + { bbl.eidpp numpages tie.or.space.prefix + "numpages" bibinfo.check * * + " (" swap$ * ")" * * + } + if$ } - if$ + if$ * } FUNCTION {format.vol.num.pages} { volume field.or.null +%mc section handling + section field.or.null strip.leading + section field.or.null strip.trailing trim +%mc end duplicate$ empty$ 'skip$ { "volume" bibinfo.check } if$ - number "number" bibinfo.check duplicate$ empty$ 'skip$ + bolden +%mc number "number" bibinfo.check duplicate$ empty$ 'skip$ + issue "issue" bibinfo.check duplicate$ empty$ 'skip$ { swap$ duplicate$ empty$ - { "there's a number but no volume in " cite$ * warning$ } +%mc { "there's a number but no volume in " cite$ * warning$ } + { "there's an issue but no volume in " cite$ * warning$ } 'skip$ if$ swap$ "(" swap$ * ")" * } if$ * + eid empty$ + { format.journal.pages } + { format.journal.eid } + if$ } FUNCTION {format.chapter.pages} { chapter empty$ - { "" } + 'format.pages { type empty$ { bbl.chapter } { type "l" change.case$ @@ -750,6 +1148,10 @@ FUNCTION {format.chapter.pages} chapter tie.or.space.prefix "chapter" bibinfo.check * * + pages empty$ + 'skip$ + { ", " * format.pages * } + if$ } if$ } @@ -759,24 +1161,22 @@ FUNCTION {format.booktitle} booktitle "booktitle" bibinfo.check emphasize } -FUNCTION {format.in.ed.booktitle} -{ format.booktitle duplicate$ empty$ 'skip$ - { - format.bvolume duplicate$ empty$ 'pop$ - { ", " swap$ * * } - if$ - editor "editor" format.names.ed duplicate$ empty$ 'pop$ - { - " " * - get.bbl.editor - "(" swap$ * ") " * - * swap$ - * } - if$ - word.in swap$ * - } - if$ -} +%% FUNCTION {format.in.ed.booktitle} +%% { format.booktitle duplicate$ empty$ 'skip$ +%% { +%% editor "editor" format.names.ed duplicate$ empty$ 'pop$ +%% { +%% "," * +%% " " * +%% get.bbl.editor +%% ", " * +%% * swap$ +%% * } +%% if$ +%% word.in swap$ * +%% } +%% if$ +%% } FUNCTION {empty.misc.check} { author empty$ title empty$ howpublished empty$ month empty$ year empty$ note empty$ @@ -826,6 +1226,7 @@ FUNCTION {format.crossref.editor} { pop$ "editor" bibinfo.check " " * bbl.etal + emphasize * } { #2 < @@ -834,6 +1235,7 @@ FUNCTION {format.crossref.editor} { "editor" bibinfo.check " " * bbl.etal + emphasize * } { @@ -848,13 +1250,13 @@ FUNCTION {format.crossref.editor} } if$ } + FUNCTION {format.book.crossref} { volume duplicate$ empty$ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ pop$ word.in } { bbl.volume - capitalize swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word * } if$ @@ -903,6 +1305,7 @@ FUNCTION {format.org.or.pub} address empty$ t empty$ and 'skip$ { + add.blank "(" * address "address" bibinfo.check * t empty$ 'skip$ @@ -913,6 +1316,7 @@ FUNCTION {format.org.or.pub} t * } if$ + ")" * } if$ } @@ -924,46 +1328,48 @@ FUNCTION {format.organization.address} { organization "organization" bibinfo.check format.org.or.pub } + + FUNCTION {article} { output.bibitem format.authors "author" output.check - new.block - format.title "title" output.check - new.block + format.date "year" output.check + date.block crossref missing$ { +%mc add section handling +%mc journal +%mc "journal" bibinfo.check +%mc emphasize +%mc "journal" output.check +%mc add.blank journal - remove.dots "journal" bibinfo.check + section field.or.null strip.trailing trim emphasize "journal" output.check add.blank - format.date "year" output.check - date.block - %AS - add.semicolon + section empty$ + { skip$ } + { section * add.blank} + if$ +%mc end format.vol.num.pages output } { format.article.crossref output.nonnull + format.pages output } if$ - eid empty$ - { format.journal.pages } - { format.journal.eid } - if$ - format.doi output - new.block - format.url output - new.block + format.issn output format.note output format.eprint output + format.url output fin.entry } FUNCTION {book} { output.bibitem author empty$ { format.editors "author and editor" output.check - add.blank } { format.authors output.nonnull crossref missing$ @@ -972,47 +1378,38 @@ FUNCTION {book} if$ } if$ - new.block + format.date "year" output.check + date.block format.btitle "title" output.check + format.edition output crossref missing$ { format.bvolume output - new.block - format.edition output - new.sentence format.number.series output format.publisher.address output } { - new.block format.book.crossref output.nonnull } if$ - format.date "year" output.check + %% format.edition output format.isbn output - format.doi output - new.block - format.url output - new.block format.note output format.eprint output + format.url output fin.entry } FUNCTION {booklet} { output.bibitem format.authors output - new.block + format.date output + date.block format.title "title" output.check - new.block howpublished "howpublished" bibinfo.check output address "address" bibinfo.check output - format.date output format.isbn output - format.doi output - new.block - format.url output - new.block format.note output format.eprint output + format.url output fin.entry } @@ -1028,98 +1425,99 @@ FUNCTION {inbook} if$ } if$ - new.block + format.date "year" output.check + date.block format.btitle "title" output.check crossref missing$ { format.bvolume output - format.chapter.pages "chapter and pages" output.check - new.block - format.edition output - new.sentence - format.number.series output format.publisher.address output + %% format.bvolume output + format.chapter.pages "chapter and pages" output.check + format.number.series output } { format.chapter.pages "chapter and pages" output.check - new.block format.book.crossref output.nonnull } if$ + format.edition output crossref missing$ { format.isbn output } 'skip$ if$ - format.date "year" output.check - date.block - format.pages "pages" output.check - format.doi output - new.block - format.url output - new.block format.note output format.eprint output + format.url output fin.entry } FUNCTION {incollection} { output.bibitem format.authors "author" output.check - new.block + format.date "year" output.check + date.block format.title "title" output.check - new.block crossref missing$ - { format.in.ed.booktitle "booktitle" output.check - format.edition output - format.chapter.pages output - new.sentence + { + %% format.in.ed.booktitle "booktitle" output.check +%mc + format.booktitle "booktitle" output.check + format.bvolume output format.number.series output + format.editors.inline output +%mc end format.publisher.address output + %% format.bvolume output + %% format.number.series output + format.chapter.pages output + format.edition output format.isbn output } { format.incoll.inproc.crossref output.nonnull format.chapter.pages output } if$ - format.date "year" output.check - date.block - format.pages "pages" output.check - format.doi output - new.block - format.url output - new.block format.note output format.eprint output + format.url output fin.entry } FUNCTION {inproceedings} { output.bibitem format.authors "author" output.check - new.block + format.date "year" output.check + date.block format.title "title" output.check - new.block crossref missing$ - { format.in.ed.booktitle "booktitle" output.check - new.sentence + { + + %%format.in.ed.booktitle "booktitle" output.check +%mc + format.booktitle "booktitle" output.check + format.bvolume output format.number.series output + format.editors.inline output +%mc end publisher empty$ { format.organization.address output } { organization "organization" bibinfo.check output format.publisher.address output } if$ + %% format.bvolume output + %% format.number.series output + format.pages output format.isbn output + format.issn output } { format.incoll.inproc.crossref output.nonnull + format.pages output } if$ - format.pages "pages" output.check - format.doi output - new.block - format.url output - new.block format.note output format.eprint output + format.url output fin.entry } FUNCTION {conference} { inproceedings } @@ -1135,88 +1533,70 @@ FUNCTION {manual} } { format.authors output.nonnull } if$ - new.block + format.date output + date.block format.btitle "title" output.check author empty$ { organization empty$ { - address new.block.checka address "address" bibinfo.check output } 'skip$ if$ } { - organization address new.block.checkb organization "organization" bibinfo.check output address "address" bibinfo.check output } if$ format.edition output - format.date output - format.doi output - new.block - format.url output - new.block format.note output format.eprint output + format.url output fin.entry } FUNCTION {mastersthesis} { output.bibitem format.authors "author" output.check - new.block + format.date "year" output.check + date.block format.btitle "title" output.check - new.block bbl.mthesis format.thesis.type output.nonnull school "school" bibinfo.warn output address "address" bibinfo.check output - format.date "year" output.check - format.doi output - new.block - format.url output - new.block format.note output format.eprint output + format.url output fin.entry } FUNCTION {misc} { output.bibitem format.authors output - title howpublished new.block.checkb - format.title output - howpublished new.block.checka - howpublished "howpublished" bibinfo.check output format.date output - format.doi output - new.block - format.url output - new.block + format.title output + howpublished "howpublished" bibinfo.check output format.note output format.eprint output + format.url output fin.entry empty.misc.check } FUNCTION {phdthesis} { output.bibitem format.authors "author" output.check - new.block + format.date "year" output.check + date.block format.btitle "title" output.check - new.block bbl.phdthesis format.thesis.type output.nonnull school "school" bibinfo.warn output address "address" bibinfo.check output - format.date "year" output.check - format.doi output - new.block - format.url output - new.block format.note output format.eprint output + format.url output fin.entry } @@ -1227,76 +1607,62 @@ FUNCTION {proceedings} } { format.editors output.nonnull } if$ - new.block + format.date "year" output.check + date.block format.btitle "title" output.check format.bvolume output + format.number.series output editor empty$ { publisher empty$ - { format.number.series output } + 'skip$ { - new.sentence - format.number.series output format.publisher.address output } if$ } { publisher empty$ { - new.sentence - format.number.series output format.organization.address output } { - new.sentence - format.number.series output organization "organization" bibinfo.check output format.publisher.address output } if$ } if$ - format.date "year" output.check format.isbn output - format.doi output - new.block - format.url output - new.block + format.issn output format.note output format.eprint output + format.url output fin.entry } FUNCTION {techreport} { output.bibitem format.authors "author" output.check - new.block + format.date "year" output.check + date.block format.title "title" output.check - new.block format.tr.number output.nonnull institution "institution" bibinfo.warn output address "address" bibinfo.check output - format.date "year" output.check - format.doi output - new.block - format.url output - new.block format.note output format.eprint output + format.url output fin.entry } FUNCTION {unpublished} { output.bibitem format.authors "author" output.check - new.block - format.title "title" output.check format.date output - format.doi output - new.block - format.url output - new.block + date.block + format.title "title" output.check format.note "note" output.check format.eprint output + format.url output fin.entry } @@ -1326,20 +1692,22 @@ FUNCTION {begin.bib} 'skip$ { preamble$ write$ newline$ } if$ + "\providecommand{\newblock}{}" + write$ newline$ "\begin{thebibliography}{" longest.label * "}" * write$ newline$ - "\providecommand{\url}[1]{\texttt{#1}}" + "\expandafter\ifx\csname url\endcsname\relax" write$ newline$ - "\providecommand{\urlprefix}{URL }" + " \def\url#1{{\tt #1}}\fi" write$ newline$ - "\expandafter\ifx\csname urlstyle\endcsname\relax" - write$ newline$ - " \providecommand{\doi}[1]{DOI:\discretionary{}{}{}#1}\else" - write$ newline$ - " \providecommand{\doi}{DOI:\discretionary{}{}{}\begingroup \urlstyle{rm}\Url}\fi" + "\expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi" write$ newline$ "\providecommand{\eprint}[2][]{\url{#2}}" write$ newline$ + "% Bibliography created with iopart-num v2.1" + write$ newline$ + "% /biblio/bibtex/contrib/iopart-num" + write$ newline$ } EXECUTE {begin.bib} EXECUTE {init.state.consts} @@ -1351,4 +1719,4 @@ FUNCTION {end.bib} EXECUTE {end.bib} %% End of customized bst file %% -%% End of file `SageV.bst'. +%% End of file `iopart-num.bst'. diff --git a/journal/iopart.cls b/journal/iopart.cls new file mode 100644 index 0000000..99bfbe3 --- /dev/null +++ b/journal/iopart.cls @@ -0,0 +1,1107 @@ +%% +%% This is file `iopart.cls' +%% +%% This file is distributed in the hope that it will be useful, +%% but WITHOUT ANY WARRANTY; without even the implied warranty of +%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +%% +%% Licensed under the LPPL: http://www.latex-project.org/lppl.txt +%% Current Maintainer: IOP Publishing Ltd +%% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +\NeedsTeXFormat{LaTeX2e} +\ProvidesClass{iopart}[1996/06/10 v0.0 IOP Journals LaTeX article class] +\newcommand\@ptsize{0} +\newif\if@restonecol +\newif\if@titlepage +\newif\ifiopams +\@titlepagefalse +\DeclareOption{a4paper} + {\setlength\paperheight {297mm}% + \setlength\paperwidth {210mm}} +\DeclareOption{letterpaper} + {\setlength\paperheight {11in}% + \setlength\paperwidth {8.5in}} +\DeclareOption{landscape} + {\setlength\@tempdima {\paperheight}% + \setlength\paperheight {\paperwidth}% + \setlength\paperwidth {\@tempdima}} +\DeclareOption{10pt}{\renewcommand\@ptsize{0}} +\DeclareOption{11pt}{\renewcommand\@ptsize{2}} % No 11pt version +\DeclareOption{12pt}{\renewcommand\@ptsize{2}} +\DeclareOption{draft}{\setlength\overfullrule{5pt}} +\DeclareOption{final}{\setlength\overfullrule{0pt}} +\DeclareOption{titlepage}{\@titlepagetrue} +\DeclareOption{notitlepage}{\@titlepagefalse} +\ExecuteOptions{letterpaper,final} +\ProcessOptions +\DeclareMathAlphabet{\bi}{OML}{cmm}{b}{it} +\DeclareMathAlphabet{\bcal}{OMS}{cmsy}{b}{n} +\input{iopart1\@ptsize.clo} +\setlength\lineskip{1\p@} +\setlength\normallineskip{1\p@} +\renewcommand\baselinestretch{} +\setlength\parskip{0\p@ \@plus \p@} +\@lowpenalty 51 +\@medpenalty 151 +\@highpenalty 301 +\setlength\parindent{2em} +\setcounter{topnumber}{8} +\renewcommand\topfraction{1} +\setcounter{bottomnumber}{3} +\renewcommand\bottomfraction{.99} +\setcounter{totalnumber}{8} +\renewcommand\textfraction{0.01} +\renewcommand\floatpagefraction{.8} +\setcounter{dbltopnumber}{6} +\renewcommand\dbltopfraction{1} +\renewcommand\dblfloatpagefraction{.8} +% +\pretolerance=5000 +\tolerance=8000 +% +% Headings for all pages apart from first +% +\def\ps@headings{\let\@oddfoot\@empty + \let\@evenfoot\@empty + \def\@evenhead{\thepage\hfil\itshape\rightmark}% + \def\@oddhead{{\itshape\leftmark}\hfil\thepage}% + \let\@mkboth\markboth + \let\sectionmark\@gobble + \let\subsectionmark\@gobble} +% +% Headings for first page +% +\def\ps@myheadings{\let\@oddfoot\@empty\let\@evenfoot\@empty + \let\@oddhead\@empty\let\@evenhead\@empty + \let\@mkboth\@gobbletwo + \let\sectionmark\@gobble + \let\subsectionmark\@gobble} +% +% \maketitle just ends page +% +\newcommand\maketitle{\newpage} +% +% Article titles +% +% Usage: \title[Short title]{Full title} +% [Short title] is optional; use where title is too long +% or contains footnotes, 50 characters maximum +% +\renewcommand{\title}{\@ifnextchar[{\@stitle}{\@ftitle}} +\def\@stitle[#1]#2{\markboth{#1}{#1}% + \thispagestyle{myheadings}% + \vspace*{3pc}{\exhyphenpenalty=10000\hyphenpenalty=10000 + \Large\raggedright\noindent + \bf#2\par}} +\def\@ftitle#1{\markboth{#1}{#1}% + \thispagestyle{myheadings}% + \vspace*{3pc}{\exhyphenpenalty=10000\hyphenpenalty=10000 + \Large\raggedright\noindent + \bf#1\par}} +% +% Can use \paper instead of \title +% +\let\paper=\title +% +% Generic title command for articles other than papers +% +% Usage: \article[Short title]{Article Type}{Full title} +% [Short title] is optional; use where title is too long +% or contains footnotes, 50 characters maximum +% +\newcommand{\article}{\@ifnextchar[{\@sarticle}{\@farticle}} +\def\@sarticle[#1]#2#3{\markboth{#1}{#1}% + \thispagestyle{myheadings}% + \vspace*{.5pc}% + {\parindent=\mathindent \bf #2\par}% + \vspace*{1.5pc}% + {\exhyphenpenalty=10000\hyphenpenalty=10000 + \Large\raggedright\noindent + \bf#3\par}}% +\def\@farticle#1#2{\markboth{#2}{#2}% + \thispagestyle{myheadings}% + \vspace*{.5pc}% + {\parindent=\mathindent \bf #1\par}% + \vspace*{1.5pc}% + {\exhyphenpenalty=10000\hyphenpenalty=10000 + \Large\raggedright\noindent + \bf#2\par}}% +% +% Letters to the Editor +% +% Usage \letter{Full title} +% No short title is required for Letters +% +\def\letter#1{\article[Letter to the Editor]{Letter to the Editor}{#1}} +% +% Fast Track Communications (added by sxb 9 March 2011) +% +% Usage \ftc{Full title} - there's no short title +\def\ftc#1{\article[Fast Track Communication]{Fast Track Communication}{#1}} +% +% +% Review articles +% +% Usage: \review[Short title]{Full title} +% [Short title] is optional; use where title is too long +% or contains footnotes, 50 characters maximum +% +\def\review{\@ifnextchar[{\@sreview}{\@freview}} +\def\@sreview[#1]#2{\@sarticle[#1]{Review Article}{#2}} +\def\@freview#1{\@farticle{Review Article}{#1}} +% +% Topical Review +% +% Usage: \topical[Short title]{Full title} +% [Short title] is optional; use where title is too long +% or contains footnotes, 50 characters maximum +% +\def\topical{\@ifnextchar[{\@stopical}{\@ftopical}} +\def\@stopical[#1]#2{\@sarticle[#1]{Topical Review}{#2}} +\def\@ftopical#1{\@farticle{Topical Review}{#1}} +% +% Comments +% +% Usage: \comment[Short title]{Full title} +% [Short title] is optional; use where title is too long +% or contains footnotes, 50 characters maximum +% +\def\comment{\@ifnextchar[{\@scomment}{\@fcomment}} +\def\@scomment[#1]#2{\@sarticle[#1]{Comment}{#2}} +\def\@fcomment#1{\@farticle{Comment}{#1}} +% +% Rapid Communications +% +% Usage: \rapid[Short title]{Full title} +% [Short title] is optional; use where title is too long +% or contains footnotes, 50 characters maximum +% +\def\rapid{\@ifnextchar[{\@srapid}{\@frapid}} +\def\@srapid[#1]#2{\@sarticle[#1]{Rapid Communication}{#2}} +\def\@frapid#1{\@farticle{Rapid Communication}{#1}} +% +% Notes +% +% Usage: \note[Short title]{Full title} +% [Short title] is optional; use where title is too long +% or contains footnotes, 50 characters maximum +% +\def\note{\@ifnextchar[{\@snote}{\@fnote}} +\def\@snote[#1]#2{\@sarticle[#1]{Note}{#2}} +\def\@fnote#1{\@farticle{Note}{#1}} +% +% Preliminary Communications +% +% Usage: \prelim[Short title]{Full title} +% [Short title] is optional; use where title is too long +% or contains footnotes, 50 characters maximum +% +\def\prelim{\@ifnextchar[{\@sprelim}{\@fprelim}} +\def\@sprelim[#1]#2{\@sarticle[#1]{Preliminary Communication}{#2}} +\def\@fprelim#1{\@farticle{Preliminary Communication}{#1}} +% +% List of authors +% +% Usage \author[Short form]{List of all authors} +% The short form excludes footnote symbols linking authors to addresses +% and is used for running heads in printed version (but not on preprints) +% +\renewcommand{\author}{\@ifnextchar[{\@sauthor}{\@fauthor}} +\def\@sauthor[#1]#2{\markright{#1} % for production only + \vspace*{1.5pc}% + \begin{indented}% + \item[]\normalsize\bf\raggedright#2 + \end{indented}% + \smallskip} +\def\@fauthor#1{%\markright{#1} for production only + \vspace*{1.5pc}% + \begin{indented}% + \item[]\normalsize\bf\raggedright#1 + \end{indented}% + \smallskip} +% +% Affiliation (authors address) +% +% Usage: \address{Address of first author} +% \address{Address of second author} +% Use once for each address, use symbols \dag \ddag \S \P $\|$ +% to connect authors with addresses +% +\newcommand{\address}[1]{\begin{indented} + \item[]\rm\raggedright #1 + \end{indented}} +% +% American Mathematical Society Classification Numbers +% Usage: \ams{57.XX, 58.XX} +% +\def\ams#1{\vspace{10pt} + \begin{indented} + \item[]\rm AMS classification scheme numbers: #1\par + \end{indented}} +% +% A single Physics & Astronomy Classification Number +% Usage \pacno{31.10} +% +\def\pacno#1{\vspace{10pt} + \begin{indented} + \item[]\rm PACS number: #1\par + \end{indented}} +% +% Physics & Astronomy Classification Numbers (more than one) +% Usage \pacs{31.10, 31.20T} +% +\def\pacs#1{\vspace{10pt} + \begin{indented} + \item[]\rm PACS numbers: #1\par + \end{indented}} +% +% Submission details. If \jl command used journals name printed +% otherwise Institute of Physics Publishing +% +\def\submitted{\vspace{28pt plus 10pt minus 18pt} + \noindent{\small\rm Submitted to: {\it \journal}\par}} +% +\def\submitto#1{\vspace{28pt plus 10pt minus 18pt} + \noindent{\small\rm Submitted to: {\it #1}\par}} +% +% For articles (other than Letters) not divided into sections +% Usage \nosections Start of text +% +\def\nosections{\vspace{30\p@ plus12\p@ minus12\p@} + \noindent\ignorespaces} +% +% Acknowledgments (no heading if letter) +% Usage \ack for Acknowledgments, \ackn for Acknowledgement +% +\def\ack{\ifletter\bigskip\noindent\ignorespaces\else + \section*{Acknowledgments}\fi} +\def\ackn{\ifletter\bigskip\noindent\ignorespaces\else + \section*{Acknowledgment}\fi} +% +% Footnotes: symbols selected in order \dag (1), \ddag (2), \S (3), +% $\|$ (4), $\P$ (5), $^+$ (6), $^*$ (7), \sharp (8), \dagger\dagger (9) +% unless optional argument of [] use to specify required symbol, +% 1=\dag, 2=\ddag, etc +% Usage: \footnote{Text of footnote} +% \footnote[3]{Text of footnote} +% +\def\footnoterule{}% +\setcounter{footnote}{1} +\long\def\@makefntext#1{\parindent 1em\noindent + \makebox[1em][l]{\footnotesize\rm$\m@th{\fnsymbol{footnote}}$}% + \footnotesize\rm #1} +\def\@makefnmark{\hbox{${\fnsymbol{footnote}}\m@th$}} +\def\@thefnmark{\fnsymbol{footnote}} +\def\footnote{\@ifnextchar[{\@xfootnote}{\stepcounter{\@mpfn}% + \begingroup\let\protect\noexpand + \xdef\@thefnmark{\thempfn}\endgroup + \@footnotemark\@footnotetext}} +\def\@xfootnote[#1]{\setcounter{footnote}{#1}% + \addtocounter{footnote}{-1}\footnote} +\def\@fnsymbol#1{\ifcase#1\or \dagger\or \ddagger\or \S\or + \|\or \P\or ^{+}\or ^{\tsty *}\or \sharp + \or \dagger\dagger \else\@ctrerr\fi\relax} +% +% IOP Journals +% +\newcounter{jnl} +\newcommand{\jl}[1]{\setcounter{jnl}{#1}} +\def\journal{\ifnum\thejnl=0 Institute of Physics Publishing\fi + \ifnum\thejnl=1 J. Phys.\ A: Math.\ Gen.\ \fi + \ifnum\thejnl=2 J. Phys.\ B: At.\ Mol.\ Opt.\ Phys.\ \fi + \ifnum\thejnl=3 J. Phys.:\ Condens. Matter\ \fi + \ifnum\thejnl=4 J. Phys.\ G: Nucl.\ Part.\ Phys.\ \fi + \ifnum\thejnl=5 Inverse Problems\ \fi + \ifnum\thejnl=6 Class. Quantum Grav.\ \fi + \ifnum\thejnl=7 Network: Comput.\ Neural Syst.\ \fi + \ifnum\thejnl=8 Nonlinearity\ \fi + \ifnum\thejnl=9 J. Opt. B: Quantum Semiclass. Opt.\ \fi + \ifnum\thejnl=10 Waves Random Media\ \fi + \ifnum\thejnl=11 J. Opt. A: Pure Appl. Opt.\ \fi + \ifnum\thejnl=12 Phys. Med. Biol.\ \fi + \ifnum\thejnl=13 Modelling Simul.\ Mater.\ Sci.\ Eng.\ \fi + \ifnum\thejnl=14 Plasma Phys. Control. Fusion\ \fi + \ifnum\thejnl=15 Physiol. Meas.\ \fi + \ifnum\thejnl=16 Combust. Theory Modelling\ \fi + \ifnum\thejnl=17 High Perform.\ Polym.\ \fi + \ifnum\thejnl=18 Public Understand. Sci.\ \fi + \ifnum\thejnl=19 Rep.\ Prog.\ Phys.\ \fi + \ifnum\thejnl=20 J.\ Phys.\ D: Appl.\ Phys.\ \fi + \ifnum\thejnl=21 Supercond.\ Sci.\ Technol.\ \fi + \ifnum\thejnl=22 Semicond.\ Sci.\ Technol.\ \fi + \ifnum\thejnl=23 Nanotechnology\ \fi + \ifnum\thejnl=24 Measur.\ Sci.\ Technol.\ \fi + \ifnum\thejnl=25 Plasma.\ Sources\ Sci.\ Technol.\ \fi + \ifnum\thejnl=26 Smart\ Mater.\ Struct.\ \fi + \ifnum\thejnl=27 J.\ Micromech.\ Microeng.\ \fi + \ifnum\thejnl=28 Distrib.\ Syst.\ Engng\ \fi + \ifnum\thejnl=29 Bioimaging\ \fi + \ifnum\thejnl=30 J.\ Radiol. Prot.\ \fi + \ifnum\thejnl=31 Europ. J. Phys.\ \fi + \ifnum\thejnl=32 J. Opt. A: Pure Appl. Opt.\ \fi + \ifnum\thejnl=33 New. J. Phys.\ \fi} +% +% E-mail addresses (to provide links from headers) +% +\def\eads#1{\vspace*{5pt}\address{E-mail: #1}} +\def\ead#1{\vspace*{5pt}\address{E-mail: \mailto{#1}}} +\def\mailto#1{{\tt #1}} +% +% Switches +% +\newif\ifletter +% +\setcounter{secnumdepth}{3} +\newcounter {section} +\newcounter {subsection}[section] +\newcounter {subsubsection}[subsection] +\newcounter {paragraph}[subsubsection] +\newcounter {subparagraph}[paragraph] +\renewcommand\thesection {\arabic{section}} +\renewcommand\thesubsection {\thesection.\arabic{subsection}} +\renewcommand\thesubsubsection {\thesubsection.\arabic{subsubsection}} +\renewcommand\theparagraph {\thesubsubsection.\arabic{paragraph}} +\renewcommand\thesubparagraph {\theparagraph.\arabic{subparagraph}} +\def\@chapapp{Section} + +\newcommand\section{\@startsection {section}{1}{\z@}% + {-3.5ex \@plus -1ex \@minus -.2ex}% + {2.3ex \@plus.2ex}% + {\reset@font\normalsize\bfseries\raggedright}} +\newcommand\subsection{\@startsection{subsection}{2}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\reset@font\normalsize\itshape\raggedright}} +\newcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {-1em \@plus .2em}% + {\reset@font\normalsize\itshape}} +\newcommand\paragraph{\@startsection{paragraph}{4}{\z@}% + {3.25ex \@plus1ex \@minus.2ex}% + {-1em}% + {\reset@font\normalsize\itshape}} +\newcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}% + {3.25ex \@plus1ex \@minus .2ex}% + {-1em}% + {\reset@font\normalsize\itshape}} +\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth + \let\@svsec\@empty\else + \refstepcounter{#1}\edef\@svsec{\csname the#1\endcsname. }\fi + \@tempskipa #5\relax + \ifdim \@tempskipa>\z@ + \begingroup #6\relax + \noindent{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}% + \endgroup + \csname #1mark\endcsname{#7}\addcontentsline + {toc}{#1}{\ifnum #2>\c@secnumdepth \else + \protect\numberline{\csname the#1\endcsname}\fi + #7}\else + \def\@svsechd{#6\hskip #3\relax %% \relax added 2 May 90 + \@svsec #8\csname #1mark\endcsname + {#7}\addcontentsline + {toc}{#1}{\ifnum #2>\c@secnumdepth \else + \protect\numberline{\csname the#1\endcsname}\fi + #7}}\fi + \@xsect{#5}} +% +\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax + \ifdim \@tempskipa>\z@ + \begingroup #4\noindent{\hskip #1}{\interlinepenalty \@M #5\par}\endgroup + \else \def\@svsechd{#4\hskip #1\relax #5}\fi + \@xsect{#3}} + +\setlength\leftmargini{2em} +\setlength\leftmarginii{2em} +\setlength\leftmarginiii{1.8em} +\setlength\leftmarginiv{1.6em} +\setlength\leftmarginv{1em} +\setlength\leftmarginvi{1em} +\setlength\leftmargin{\leftmargini} +\setlength\labelsep{0.5em} +\setlength\labelwidth{\leftmargini} +\addtolength\labelwidth{-\labelsep} +\@beginparpenalty -\@lowpenalty +\@endparpenalty -\@lowpenalty +\@itempenalty -\@lowpenalty +\renewcommand\theenumi{\roman{enumi}} +\renewcommand\theenumii{\alph{enumii}} +\renewcommand\theenumiii{\arabic{enumiii}} +\renewcommand\theenumiv{\Alph{enumiv}} +\newcommand\labelenumi{(\theenumi)} +\newcommand\labelenumii{(\theenumii)} +\newcommand\labelenumiii{\theenumiii.} +\newcommand\labelenumiv{(\theenumiv)} +\renewcommand\p@enumii{(\theenumi)} +\renewcommand\p@enumiii{(\theenumi.\theenumii)} +\renewcommand\p@enumiv{(\theenumi.\theenumii.\theenumiii)} +\newcommand\labelitemi{$\m@th\bullet$} +\newcommand\labelitemii{\normalfont\bfseries --} +\newcommand\labelitemiii{$\m@th\ast$} +\newcommand\labelitemiv{$\m@th\cdot$} +\newenvironment{description} + {\list{}{\labelwidth\z@ \itemindent-\leftmargin + \let\makelabel\descriptionlabel}} + {\endlist} +\newcommand\descriptionlabel[1]{\hspace\labelsep + \normalfont\bfseries #1} +\newenvironment{abstract}{% + \vspace{16pt plus3pt minus3pt} + \begin{indented} + \item[]{\bfseries \abstractname.}\quad\rm\ignorespaces} + {\end{indented}\if@titlepage\newpage\else\vspace{18\p@ plus18\p@}\fi} +\newenvironment{verse} + {\let\\=\@centercr + \list{}{\itemsep \z@ + \itemindent -1.5em% + \listparindent\itemindent + \rightmargin \leftmargin + \advance\leftmargin 1.5em}% + \item[]} + {\endlist} +\newenvironment{quotation} + {\list{}{\listparindent 1.5em% + \itemindent \listparindent + \rightmargin \leftmargin + \parsep \z@ \@plus\p@}% + \item[]} + {\endlist} +\newenvironment{quote} + {\list{}{\rightmargin\leftmargin}% + \item[]} + {\endlist} +\newenvironment{titlepage} + {% + \@restonecolfalse\newpage + \thispagestyle{empty}% + \if@compatibility + \setcounter{page}{0} + \else + \setcounter{page}{1}% + \fi}% + {\newpage\setcounter{page}{1}} +\def\appendix{\@ifnextchar*{\@appendixstar}{\@appendix}} +\def\@appendix{\eqnobysec\@appendixstar} +\def\@appendixstar{\@@par + \ifnumbysec % Added 30/4/94 to get Table A1, + \@addtoreset{table}{section} % Table B1 etc if numbering by + \@addtoreset{figure}{section}\fi % section + \setcounter{section}{0} + \setcounter{subsection}{0} + \setcounter{subsubsection}{0} + \setcounter{equation}{0} + \setcounter{figure}{0} + \setcounter{table}{0} + \def\thesection{Appendix \Alph{section}} + \def\theequation{\ifnumbysec + \Alph{section}.\arabic{equation}\else + \Alph{section}\arabic{equation}\fi} % Comment A\arabic{equation} maybe + \def\thetable{\ifnumbysec % better? 15/4/95 + \Alph{section}\arabic{table}\else + A\arabic{table}\fi} + \def\thefigure{\ifnumbysec + \Alph{section}\arabic{figure}\else + A\arabic{figure}\fi}} +\def\noappendix{\setcounter{figure}{0} + \setcounter{table}{0} + \def\thetable{\arabic{table}} + \def\thefigure{\arabic{figure}}} +\setlength\arraycolsep{5\p@} +\setlength\tabcolsep{6\p@} +\setlength\arrayrulewidth{.4\p@} +\setlength\doublerulesep{2\p@} +\setlength\tabbingsep{\labelsep} +\skip\@mpfootins = \skip\footins +\setlength\fboxsep{3\p@} +\setlength\fboxrule{.4\p@} +\renewcommand\theequation{\arabic{equation}} +\newcounter{figure} +\renewcommand\thefigure{\@arabic\c@figure} +\def\fps@figure{tbp} +\def\ftype@figure{1} +\def\ext@figure{lof} +\def\fnum@figure{\figurename~\thefigure} +\newenvironment{figure}{\footnotesize\rm\@float{figure}}% + {\end@float\normalsize\rm} +\newenvironment{figure*}{\footnotesize\rm\@dblfloat{figure}}{\end@dblfloat} +\newcounter{table} +\renewcommand\thetable{\@arabic\c@table} +\def\fps@table{tbp} +\def\ftype@table{2} +\def\ext@table{lot} +\def\fnum@table{\tablename~\thetable} +\newenvironment{table}{\footnotesize\rm\@float{table}}% + {\end@float\normalsize\rm} +\newenvironment{table*}{\footnotesize\rm\@dblfloat{table}}% + {\end@dblfloat\normalsize\rm} +\newlength\abovecaptionskip +\newlength\belowcaptionskip +\setlength\abovecaptionskip{10\p@} +\setlength\belowcaptionskip{0\p@} +% +% Added redefinition of \@caption so captions are not written to +% aux file therefore less need to \protect fragile commands +% +\long\def\@caption#1[#2]#3{\par\begingroup + \@parboxrestore + \normalsize + \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par + \endgroup} +% +\long\def\@makecaption#1#2{\vskip \abovecaptionskip + \begin{indented} + \item[]{\bf #1.} #2 + \end{indented}\vskip\belowcaptionskip} +\let\@portraitcaption=\@makecaption + +\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} +\ifiopams +\renewcommand{\cal}{\protect\pcal} +\else +\newcommand{\cal}{\protect\pcal} +\fi +\newcommand{\pcal}{\@fontswitch{\relax}{\mathcal}} +\ifiopams +\renewcommand{\mit}{\protect\pmit} +\else +\newcommand{\mit}{\protect\pmit} +\fi +\newcommand{\pmit}{\@fontswitch{\relax}{\mathnormal}} +\newcommand\@pnumwidth{1.55em} +\newcommand\@tocrmarg {2.55em} +\newcommand\@dotsep{4.5} +\setcounter{tocdepth}{3} +\newcommand\tableofcontents{% + \section*{\contentsname + \@mkboth{\uppercase{\contentsname}}{\uppercase{\contentsname}}}% + \@starttoc{toc}% + } +\newcommand\l@part[2]{% + \ifnum \c@tocdepth >-2\relax + \addpenalty{\@secpenalty}% + \addvspace{2.25em \@plus\p@}% + \begingroup + \setlength\@tempdima{3em}% + \parindent \z@ \rightskip \@pnumwidth + \parfillskip -\@pnumwidth + {\leavevmode + \large \bfseries #1\hfil \hbox to\@pnumwidth{\hss #2}}\par + \nobreak + \if@compatibility + \global\@nobreaktrue + \everypar{\global\@nobreakfalse\everypar{}} + \fi + \endgroup + \fi} +\newcommand\l@section[2]{% + \ifnum \c@tocdepth >\z@ + \addpenalty{\@secpenalty}% + \addvspace{1.0em \@plus\p@}% + \setlength\@tempdima{1.5em}% + \begingroup + \parindent \z@ \rightskip \@pnumwidth + \parfillskip -\@pnumwidth + \leavevmode \bfseries + \advance\leftskip\@tempdima + \hskip -\leftskip + #1\nobreak\hfil \nobreak\hbox to\@pnumwidth{\hss #2}\par + \endgroup + \fi} +\newcommand\l@subsection {\@dottedtocline{2}{1.5em}{2.3em}} +\newcommand\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}} +\newcommand\l@paragraph {\@dottedtocline{4}{7.0em}{4.1em}} +\newcommand\l@subparagraph {\@dottedtocline{5}{10em}{5em}} +\newcommand\listoffigures{% + \section*{\listfigurename + \@mkboth{\uppercase{\listfigurename}}% + {\uppercase{\listfigurename}}}% + \@starttoc{lof}% + } +\newcommand\l@figure{\@dottedtocline{1}{1.5em}{2.3em}} +\newcommand\listoftables{% + \section*{\listtablename + \@mkboth{\uppercase{\listtablename}}{\uppercase{\listtablename}}}% + \@starttoc{lot}% + } +\let\l@table\l@figure +\newenvironment{theindex} + {\if@twocolumn + \@restonecolfalse + \else + \@restonecoltrue + \fi + \columnseprule \z@ + \columnsep 35\p@ + \twocolumn[\section*{\indexname}]% + \@mkboth{\uppercase{\indexname}}% + {\uppercase{\indexname}}% + \thispagestyle{plain}\parindent\z@ + \parskip\z@ \@plus .3\p@\relax + \let\item\@idxitem} + {\if@restonecol\onecolumn\else\clearpage\fi} +\newcommand\@idxitem {\par\hangindent 40\p@} +\newcommand\subitem {\par\hangindent 40\p@ \hspace*{20\p@}} +\newcommand\subsubitem{\par\hangindent 40\p@ \hspace*{30\p@}} +\newcommand\indexspace{\par \vskip 10\p@ \@plus5\p@ \@minus3\p@\relax} +\newcommand\contentsname{Contents} +\newcommand\listfigurename{List of Figures} +\newcommand\listtablename{List of Tables} +\newcommand\refname{References} +\newcommand\indexname{Index} +\newcommand\figurename{Figure} +\newcommand\tablename{Table} +\newcommand\partname{Part} +\newcommand\appendixname{Appendix} +\newcommand\abstractname{Abstract} +\newcommand\today{\number\day\space\ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\year} +\setlength\columnsep{10\p@} +\setlength\columnseprule{0\p@} + +\newcommand{\Tables}{\clearpage\section*{Tables and table captions} + \def\fps@table{hp}\noappendix} +\newcommand{\Figures}{\clearpage\section*{Figure captions} + \def\fps@figure{hp}\noappendix} +% +\newcommand{\Figure}[1]{\begin{figure} + \caption{#1} + \end{figure}} +% +\newcommand{\Table}[1]{\begin{table} + \caption{#1} + \begin{indented} + \lineup + \item[]\begin{tabular}{@{}l*{15}{l}}} + +\def\endTable{\end{tabular}\end{indented}\end{table}} +\let\endtab=\endTable +% +\newcommand{\fulltable}[1]{\begin{table} + \caption{#1} + \footnotesize + \lineup + \begin{tabular*}{\textwidth}{@{}l*{15}{@{\extracolsep{0pt plus 12pt}}l}}} +\def\endfulltable{\end{tabular*}\end{table}\normalsize} +% +% +\newcommand{\Bibliography}[1]{\section*{References}\par\numrefs{#1}} +\newcommand{\References}{\section*{References}\par\refs} + +\def\thebibliography#1{\list + {\hfil[\arabic{enumi}]}{\topsep=0\p@\parsep=0\p@ + \partopsep=0\p@\itemsep=0\p@ + \labelsep=5\p@\itemindent=-10\p@ + \settowidth\labelwidth{\footnotesize[#1]}% + \leftmargin\labelwidth + \advance\leftmargin\labelsep + \advance\leftmargin -\itemindent + \usecounter{enumi}}\footnotesize + \def\newblock{\ } + \sloppy\clubpenalty4000\widowpenalty4000 + \sfcode`\.=1000\relax} +\let\endthebibliography=\endlist +\def\numrefs#1{\begin{thebibliography}{#1}} +\def\endnumrefs{\end{thebibliography}} +\let\endbib=\endnumrefs +% +\def\thereferences{\list{}{\topsep=0\p@\parsep=0\p@ + \partopsep=0\p@\itemsep=0\p@\labelsep=0\p@\itemindent=-18\p@ +\labelwidth=0\p@\leftmargin=18\p@ +}\footnotesize\rm +\def\newblock{\ } +\sloppy\clubpenalty4000\widowpenalty4000 +\sfcode`\.=1000\relax +} +% +\let\endthereferences=\endlist +\newlength{\indentedwidth} +\newdimen\mathindent +\indentedwidth=\mathindent +% +% Macro to used for references in the Harvard system +% +\newenvironment{harvard}{\list{}{\topsep=0\p@\parsep=0\p@ +\partopsep=0\p@\itemsep=0\p@\labelsep=0\p@\itemindent=-18\p@ +\labelwidth=0\p@\leftmargin=18\p@ +}\footnotesize\rm +\def\newblock{\ } +\sloppy\clubpenalty4000\widowpenalty4000 +\sfcode`\.=1000\relax}{\endlist} +% +\def\refs{\begin{harvard}} +\def\endrefs{\end{harvard}} +% +\newenvironment{indented}{\begin{indented}}{\end{indented}} +\newenvironment{varindent}[1]{\begin{varindent}{#1}}{\end{varindent}} +% +\def\indented{\list{}{\itemsep=0\p@\labelsep=0\p@\itemindent=0\p@ + \labelwidth=0\p@\leftmargin=\mathindent\topsep=0\p@\partopsep=0\p@ + \parsep=0\p@\listparindent=15\p@}\footnotesize\rm} + +\let\endindented=\endlist + +\def\varindent#1{\setlength{\varind}{#1}% + \list{}{\itemsep=0\p@\labelsep=0\p@\itemindent=0\p@ + \labelwidth=0\p@\leftmargin=\varind\topsep=0\p@\partopsep=0\p@ + \parsep=0\p@\listparindent=15\p@}\footnotesize\rm} + +\let\endvarindent=\endlist + +\def\[{\relax\ifmmode\@badmath\else + \begin{trivlist} + \@beginparpenalty\predisplaypenalty + \@endparpenalty\postdisplaypenalty + \item[]\leavevmode + \hbox to\linewidth\bgroup$ \displaystyle + \hskip\mathindent\bgroup\fi} +\def\]{\relax\ifmmode \egroup $\hfil \egroup \end{trivlist}\else \@badmath \fi} +\def\equation{\@beginparpenalty\predisplaypenalty + \@endparpenalty\postdisplaypenalty +\refstepcounter{equation}\trivlist \item[]\leavevmode + \hbox to\linewidth\bgroup $ \displaystyle +\hskip\mathindent} +\def\endequation{$\hfil \displaywidth\linewidth\@eqnnum\egroup \endtrivlist} +% +\@namedef{equation*}{\[} +\@namedef{endequation*}{\]} +% +\def\eqnarray{\stepcounter{equation}\let\@currentlabel=\theequation +\global\@eqnswtrue +\global\@eqcnt\z@\tabskip\mathindent\let\\=\@eqncr +\abovedisplayskip\topsep\ifvmode\advance\abovedisplayskip\partopsep\fi +\belowdisplayskip\abovedisplayskip +\belowdisplayshortskip\abovedisplayskip +\abovedisplayshortskip\abovedisplayskip +$$\halign to +\linewidth\bgroup\@eqnsel$\displaystyle\tabskip\z@ + {##{}}$&\global\@eqcnt\@ne $\displaystyle{{}##{}}$\hfil + &\global\@eqcnt\tw@ $\displaystyle{{}##}$\hfil + \tabskip\@centering&\llap{##}\tabskip\z@\cr} +\def\endeqnarray{\@@eqncr\egroup + \global\advance\c@equation\m@ne$$\global\@ignoretrue } +\mathindent = 6pc +% +\def\eqalign#1{\null\vcenter{\def\\{\cr}\openup\jot\m@th + \ialign{\strut$\displaystyle{##}$\hfil&$\displaystyle{{}##}$\hfil + \crcr#1\crcr}}\,} +% +\def\eqalignno#1{\displ@y \tabskip\z@skip + \halign to\displaywidth{\hspace{5pc}$\@lign\displaystyle{##}$% + \tabskip\z@skip + &$\@lign\displaystyle{{}##}$\hfill\tabskip\@centering + &\llap{$\@lign\hbox{\rm##}$}\tabskip\z@skip\crcr + #1\crcr}} +% +\newif\ifnumbysec +\def\theequation{\ifnumbysec + \arabic{section}.\arabic{equation}\else + \arabic{equation}\fi} +\def\eqnobysec{\numbysectrue\@addtoreset{equation}{section}} + +\newcounter{eqnval} + +% 2012: if you have an eqn numbered by parts (eg eqn 6a, 6b) this allows +% you to refer to it by just the number (eg eqn 6) if the label is between +% the \multiparteqn and the \numparts +\def\multiparteqn{\addtocounter{equation}{1} +\eqnarray\nonumber +\endeqnarray + +\vspace{-72pt} +} + +\def\numparts{\addtocounter{equation}{1}% + \setcounter{eqnval}{\value{equation}}% + \setcounter{equation}{0}% + \def\theequation{\ifnumbysec + \arabic{section}.\arabic{eqnval}{\it\alph{equation}}% + \else\arabic{eqnval}{\it\alph{equation}}\fi}} + +\def\endnumparts{\def\theequation{\ifnumbysec + \arabic{section}.\arabic{equation}\else + \arabic{equation}\fi}% + \setcounter{equation}{\value{eqnval}}} +% +\def\cases#1{% + \left\{\,\vcenter{\def\\{\cr}\normalbaselines\openup1\jot\m@th% + \ialign{\strut$\displaystyle{##}\hfil$&\tqs + \rm##\hfil\crcr#1\crcr}}\right.}% +% +\newcommand{\e}{\mathrm{e}} +\newcommand{\rme}{\mathrm{e}} +\newcommand{\rmi}{\mathrm{i}} +\newcommand{\rmd}{\mathrm{d}} +\renewcommand{\qquad}{\hspace*{25pt}} +\newcommand{\tdot}[1]{\stackrel{\dots}{#1}} % Added 1/9/94 +\newcommand{\tqs}{\hspace*{25pt}} +\newcommand{\fl}{\hspace*{-\mathindent}} +\newcommand{\Tr}{\mathop{\mathrm{Tr}}\nolimits} +\newcommand{\tr}{\mathop{\mathrm{tr}}\nolimits} +\newcommand{\Or}{\mathord{\mathrm{O}}} %changed from \mathop 20/1/95 +\newcommand{\lshad}{[\![} +\newcommand{\rshad}{]\!]} +\newcommand{\case}[2]{{\textstyle\frac{#1}{#2}}} +\def\pt(#1){({\it #1\/})} +\newcommand{\dsty}{\displaystyle} +\newcommand{\tsty}{\textstyle} +\newcommand{\ssty}{\scriptstyle} +\newcommand{\sssty}{\scriptscriptstyle} +\def\lo#1{\llap{${}#1{}$}} +\def\eql{\llap{${}={}$}} +\def\lsim{\llap{${}\sim{}$}} +\def\lsimeq{\llap{${}\simeq{}$}} +\def\lequiv{\llap{${}\equiv{}$}} +% +\newcommand{\eref}[1]{(\ref{#1})} +\newcommand{\sref}[1]{section~\ref{#1}} +\newcommand{\fref}[1]{figure~\ref{#1}} +\newcommand{\tref}[1]{table~\ref{#1}} +\newcommand{\Eref}[1]{Equation (\ref{#1})} +\newcommand{\Sref}[1]{Section~\ref{#1}} +\newcommand{\Fref}[1]{Figure~\ref{#1}} +\newcommand{\Tref}[1]{Table~\ref{#1}} + +\newcommand{\opencircle}{\mbox{\Large$\circ\,$}} % moved Large outside maths +\newcommand{\opensquare}{\mbox{$\rlap{$\sqcap$}\sqcup$}} +\newcommand{\opentriangle}{\mbox{$\triangle$}} +\newcommand{\opentriangledown}{\mbox{$\bigtriangledown$}} +\newcommand{\opendiamond}{\mbox{$\diamondsuit$}} +\newcommand{\fullcircle}{\mbox{{\Large$\bullet\,$}}} % moved Large outside maths +\newcommand{\fullsquare}{\,\vrule height5pt depth0pt width5pt} +\newcommand{\dotted}{\protect\mbox{${\mathinner{\cdotp\cdotp\cdotp\cdotp\cdotp\cdotp}}$}} +\newcommand{\dashed}{\protect\mbox{-\; -\; -\; -}} +\newcommand{\broken}{\protect\mbox{-- -- --}} +\newcommand{\longbroken}{\protect\mbox{--- --- ---}} +\newcommand{\chain}{\protect\mbox{--- $\cdot$ ---}} +\newcommand{\dashddot}{\protect\mbox{--- $\cdot$ $\cdot$ ---}} +\newcommand{\full}{\protect\mbox{------}} + +\def\;{\protect\psemicolon} +\def\psemicolon{\relax\ifmmode\mskip\thickmuskip\else\kern .3333em\fi} +\def\lineup{\def\0{\hbox{\phantom{\footnotesize\rm 0}}}% + \def\m{\hbox{$\phantom{-}$}}% + \def\-{\llap{$-$}}} +% +%%%%%%%%%%%%%%%%%%%%% +% Tables rules % +%%%%%%%%%%%%%%%%%%%%% + +\newcommand{\boldarrayrulewidth}{1\p@} +% Width of bold rule in tabular environment. + +\def\bhline{\noalign{\ifnum0=`}\fi\hrule \@height +\boldarrayrulewidth \futurelet \@tempa\@xhline} + +\def\@xhline{\ifx\@tempa\hline\vskip \doublerulesep\fi + \ifnum0=`{\fi}} + +% +% Rules for tables with extra space around +% +\newcommand{\br}{\ms\bhline\ms} +\newcommand{\mr}{\ms\hline\ms} +% +\newcommand{\centre}[2]{\multispan{#1}{\hfill #2\hfill}} +\newcommand{\crule}[1]{\multispan{#1}{\hspace*{\tabcolsep}\hrulefill + \hspace*{\tabcolsep}}} +\newcommand{\fcrule}[1]{\ifnum\thetabtype=1\multispan{#1}{\hrulefill + \hspace*{\tabcolsep}}\else\multispan{#1}{\hrulefill}\fi} +% +% Extra spaces for tables and displayed equations +% +\newcommand{\ms}{\noalign{\vspace{3\p@ plus2\p@ minus1\p@}}} +\newcommand{\bs}{\noalign{\vspace{6\p@ plus2\p@ minus2\p@}}} +\newcommand{\ns}{\noalign{\vspace{-3\p@ plus-1\p@ minus-1\p@}}} +\newcommand{\es}{\noalign{\vspace{6\p@ plus2\p@ minus2\p@}}\displaystyle}% +% +\newcommand{\etal}{{\it et al\/}\ } +\newcommand{\dash}{------} +\newcommand{\nonum}{\par\item[]} %\par added 1/9/93 +\newcommand{\mat}[1]{\underline{\underline{#1}}} +% +% abbreviations for IOPP journals +% +\newcommand{\CQG}{{\it Class. Quantum Grav.} } +\newcommand{\CTM}{{\it Combust. Theory Modelling\/} } +\newcommand{\DSE}{{\it Distrib. Syst. Engng.\/} } +\newcommand{\EJP}{{\it Eur. J. Phys.} } +\newcommand{\JNE}{{\it J. Neural Eng.} } %added 30/11/2004 GMD +\newcommand{\PB}{{\it Phys. Biol.} } %added 30/11/2004 GMD +\newcommand{\SMS}{{\it Smart Mater. Struct.} } %added 30/11/2004 GMD +\newcommand{\HPP}{{\it High Perform. Polym.} } % added 4/5/93 +\newcommand{\IP}{{\it Inverse Problems\/} } +\newcommand{\JHM}{{\it J. Hard Mater.} } % added 4/5/93 +\newcommand{\JO}{{\it J. Opt.} } +\newcommand{\JOA}{{\it J. Opt. A: Pure Appl. Opt.} } +\newcommand{\JOB}{{\it J. Opt. B: Quantum Semiclass. Opt.} } +\newcommand{\JPA}{{\it J. Phys. A: Math. Gen.} } % superseded by \jpa below +\newcommand{\JPB}{{\it J. Phys. B: At. Mol. Phys.} } %1968-87 +\newcommand{\jpb}{{\it J. Phys. B: At. Mol. Opt. Phys.} } %1988 and onwards +\newcommand{\JPC}{{\it J. Phys. C: Solid State Phys.} } %1968--1988 +\newcommand{\JPCM}{{\it J. Phys.: Condens. Matter\/} } %1989 and onwards +\newcommand{\JPD}{{\it J. Phys. D: Appl. Phys.} } +\newcommand{\JPE}{{\it J. Phys. E: Sci. Instrum.} } +\newcommand{\JPF}{{\it J. Phys. F: Met. Phys.} } +\newcommand{\JPG}{{\it J. Phys. G: Nucl. Phys.} } %1975--1988 +\newcommand{\jpg}{{\it J. Phys. G: Nucl. Part. Phys.} } %1989 and onwards +\newcommand{\JMM}{{\it J. Micromech. Microeng.\/} } +\newcommand{\MSMSE}{{\it Modelling Simul. Mater. Sci. Eng.} } % sxb changed to 'Simul' 15 Mar 2011 +\newcommand{\MST}{{\it Meas. Sci. Technol.} } %1990 and onwards +\newcommand{\NET}{{\it Network: Comput. Neural Syst.} } +\newcommand{\NJP}{{\it New J. Phys.} } +\newcommand{\NL}{{\it Nonlinearity\/} } +\newcommand{\NT}{{\it Nanotechnology} } +\newcommand{\PAO}{{\it Pure Appl. Optics\/} } +\newcommand{\PM}{{\it Physiol. Meas.} } % added 4/5/93 +\newcommand{\PMB}{{\it Phys. Med. Biol.} } +\newcommand{\PPCF}{{\it Plasma Phys. Control. Fusion\/} } % added 4/5/93 +\newcommand{\PSST}{{\it Plasma Sources Sci. Technol.} } +\newcommand{\PUS}{{\it Public Understand. Sci.} } +\newcommand{\QO}{{\it Quantum Opt.} } +\newcommand{\QSO}{{\em Quantum Semiclass. Opt.} } +\newcommand{\RPP}{{\it Rep. Prog. Phys.} } +\newcommand{\SLC}{{\it Sov. Lightwave Commun.} } % added 4/5/93 +\newcommand{\SST}{{\it Semicond. Sci. Technol.} } +\newcommand{\SUST}{{\it Supercond. Sci. Technol.} } +\newcommand{\WRM}{{\it Waves Random Media\/} } +% +% Other commonly quoted journals +% +\newcommand{\AC}{{\it Acta Crystallogr.} } +\newcommand{\AM}{{\it Acta Metall.} } +\newcommand{\AP}{{\it Ann. Phys., Lpz.} } +\newcommand{\APNY}{{\it Ann. Phys., NY\/} } +\newcommand{\APP}{{\it Ann. Phys., Paris\/} } +\newcommand{\CJP}{{\it Can. J. Phys.} } +\newcommand{\JAP}{{\it J. Appl. Phys.} } +\newcommand{\JCP}{{\it J. Chem. Phys.} } +\newcommand{\JJAP}{{\it Jpn. J. Appl. Phys.} } +\newcommand{\JP}{{\it J. Physique\/} } +\newcommand{\JPhCh}{{\it J. Phys. Chem.} } +\newcommand{\JMMM}{{\it J. Magn. Magn. Mater.} } +\newcommand{\JMP}{{\it J. Math. Phys.} } +\newcommand{\JOSA}{{\it J. Opt. Soc. Am.} } +\newcommand{\JPSJ}{{\it J. Phys. Soc. Jpn.\/} } +\newcommand{\JQSRT}{{\it J. Quant. Spectrosc. Radiat. Transfer\/} } +\newcommand{\NC}{{\it Nuovo Cimento\/} } +\newcommand{\NIM}{{\it Nucl. Instrum. Methods\/} } +\newcommand{\NP}{{\it Nucl. Phys.} } +\newcommand{\PL}{{\it Phys. Lett.} } +\newcommand{\PR}{{\it Phys. Rev.} } +\newcommand{\PRL}{{\it Phys. Rev. Lett.} } +\newcommand{\PRS}{{\it Proc. R. Soc.} } +\newcommand{\PS}{{\it Phys. Scr.} } +\newcommand{\PSS}{{\it Phys. Status Solidi\/} } +\newcommand{\PTRS}{{\it Phil. Trans. R. Soc.} } +\newcommand{\RMP}{{\it Rev. Mod. Phys.} } +\newcommand{\RSI}{{\it Rev. Sci. Instrum.} } +\newcommand{\SSC}{{\it Solid State Commun.} } +\newcommand{\ZP}{{\it Z. Phys.} } +\newcommand{\GRG}{{\it Gen. Rel. Grav.} } +\newcommand{\PF}{{\it Phys. Fluids\/} } +\newcommand{\SPJ}{{\it Sov. Phys.--JETP\/} } +% +% More journals added 8 Mar 2011, below (sxb) +% +\newcommand{\jpa}{{\it J. Phys. A: Math. Theor.} } +\newcommand{\BF}{{\it Biofabrication\/} } +\newcommand{\BB}{{\it Bioinspir. Biomim.} } +\newcommand{\BMM}{{\it Biomed. Mater.} } +\newcommand{\CSD}{{\it Comput. Sci. Disc.} } +\newcommand{\ERL}{{\it Environ. Res. Lett.} } +\newcommand{\JBR}{{\it J. Breath Res.} } +\newcommand{\JGE}{{\it J. Geophys. Eng.} } +\newcommand{\JOPT}{{\it J. Opt.} } +\newcommand{\JRP}{{\it J. Radiol. Prot.} } +\newcommand{\MET}{{\it Metrologia\/} } +\newcommand{\NF}{{\it Nucl. Fusion\/} } +\newcommand{\PED}{{\it Phys. Educ.} } +% +% More journals added 6 Feb 2014, below (sxb) +% +\newcommand{\TDM}{{\it 2D Mater.} } +\newcommand{\MRE}{{\it Mater. Res. Express\/} } +\newcommand{\MAF}{{\it Methods Appl. Fluoresc.} } +\newcommand{\TMR}{{\it Transl. Mater. Res.} } +\newcommand{\STMP}{{\it Surf. Topogr.: Metrol. Prop.} } +% +% The following journals are externally-edited and the usual IOP Publishing +% submission guidelines do *not* apply if you're submitting to them. +% +\newcommand{\AJ}{{\it AJ\/} } +\newcommand{\APJ}{{\it ApJ\/} } +\newcommand{\APJL}{{\it ApJL\/} } +\newcommand{\APJS}{{\it ApJS\/} } +\newcommand{\ANSN}{{\it Adv. Nat. Sci: Nanosci. Nanotechnol.} } +\newcommand{\CJCP}{{\it Chin. J. Chem. Phys.} } +\newcommand{\CPB}{{\it Chinese Phys. B\/} } +\newcommand{\CPC}{{\it Chinese Phys. C\/} } +\newcommand{\CPL}{{\it Chinese Phys. Lett.} } +\newcommand{\CTP}{{\it Commun. Theor. Phys.} } +\newcommand{\EPL}{{\it EPL\/} } +\newcommand{\FDR}{{\it Fluid Dyn. Res.} } +\newcommand{\IZV}{{\it Izv. Math.} } +\newcommand{\JOS}{{\it J. Semicond.} } +\newcommand{\PHU}{{\it Phys.-Usp.} } +\newcommand{\PST}{{\it Plasma Sci. Technol.} } +\newcommand{\QEL}{{\it Quantum Electron.} } +\newcommand{\RAA}{{\it Res. Astron. Astrophys.} } +\newcommand{\RCR}{{\it Russ. Chem. Rev.} } +\newcommand{\RMS}{{\it Russ. Math. Surv.} } +\newcommand{\MSB}{{\it Sb. Math.} } +\newcommand{\SFC}{{\it Science Foundation in China\/} } +\newcommand{\STAM}{{\it Sci. Technol. Adv. Mater.} } +\newcommand{\LP}{{\it Laser Phys.} } +\newcommand{\LPL}{{\it Laser Phys. Lett.} } +\newcommand{\APEX}{{\it Appl. Phys. Express\/} } +% +% SISSA journals +% +\newcommand{\JCAP}{{\it JCAP\/} } +\newcommand{\JHEP}{{\it J. High Energy Phys.\/} } +\newcommand{\JSTAT}{{\it J. Stat. Mech.} } +\newcommand{\JINST}{{\it JINST\/} } +% +% These are the IOP Conference Series journals: again, if you're +% submitting to one of these journals you shouldn't be using iopart.cls +% +\newcommand{\JPCS}{{\it J. Phys.: Conf. Ser.} } +\newcommand{\EES}{{\it IOP Conf. Ser.: Earth Environ. Sci.} } +\newcommand{\MSE}{{\it IOP Conf. Ser.: Mater. Sci. Eng.} } + +% 2012 new option for twocolumn output +\def\ioptwocol{\setlength\hoffset{-0.5in}\setlength\voffset{-0.5in}\setlength\textwidth{6.75in} +\setlength\columnsep{0.2in}\setlength\textheight{9.25in}\mathindent=0in\twocolumn} +% +% +\pagestyle{headings} +\pagenumbering{arabic} % Arabic page numbers +\raggedbottom +\onecolumn +\endinput +%% +%% End of file `iopart.cls'. + diff --git a/journal/iopart10.clo b/journal/iopart10.clo new file mode 100644 index 0000000..1805a0b --- /dev/null +++ b/journal/iopart10.clo @@ -0,0 +1 @@ +%% %% This is file `iopart10.clo' %% %% This file is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. %% %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} \ProvidesFile{iopart10.clo}[1997/01/13 v1.0 IOP Book file (size option)] \renewcommand\normalsize{% \@setfontsize\normalsize\@xpt\@xiipt \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@ \abovedisplayshortskip \z@ \@plus3\p@ \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@ \belowdisplayskip \abovedisplayskip \let\@listi\@listI} \normalsize \newcommand\small{% \@setfontsize\small\@ixpt{11}% \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@ \abovedisplayshortskip \z@ \@plus2\p@ \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@ \def\@listi{\leftmargin\leftmargini \topsep 4\p@ \@plus2\p@ \@minus2\p@ \parsep 2\p@ \@plus\p@ \@minus\p@ \itemsep \parsep}% \belowdisplayskip \abovedisplayskip } \newcommand\footnotesize{% \@setfontsize\footnotesize\@viiipt{9.5}% \abovedisplayskip 6\p@ \@plus2\p@ \@minus4\p@ \abovedisplayshortskip \z@ \@plus\p@ \belowdisplayshortskip 3\p@ \@plus\p@ \@minus2\p@ \def\@listi{\leftmargin\leftmargini \topsep 3\p@ \@plus\p@ \@minus\p@ \parsep 2\p@ \@plus\p@ \@minus\p@ \itemsep \parsep}% \belowdisplayskip \abovedisplayskip } \newcommand\scriptsize{\@setfontsize\scriptsize\@viipt\@viiipt} \newcommand\tiny{\@setfontsize\tiny\@vpt\@vipt} \newcommand\large{\@setfontsize\large\@xiipt{14}} \newcommand\Large{\@setfontsize\Large\@xivpt{18}} \newcommand\LARGE{\@setfontsize\LARGE\@xviipt{22}} \newcommand\huge{\@setfontsize\huge\@xxpt{25}} \newcommand\Huge{\@setfontsize\Huge\@xxvpt{30}} \if@twocolumn \setlength\parindent{12\p@} \else \setlength\parindent{15\p@} \fi \setlength\headheight{12\p@} \setlength\headsep {12\p@} \setlength\topskip {10\p@} \setlength\footskip{20\p@} \setlength\maxdepth{.5\topskip} \setlength\@maxdepth\maxdepth \setlength\textwidth{31pc} \setlength\textheight{49pc} \setlength\oddsidemargin {24\p@} \setlength\evensidemargin {24\p@} \setlength\marginparwidth {72\p@} \setlength\marginparsep {10\p@} \setlength\marginparpush{5\p@} \setlength\topmargin{\z@} \setlength\footnotesep{6.65\p@} \setlength{\skip\footins} {9\p@ \@plus 4\p@ \@minus 2\p@} \setlength\floatsep {12\p@ \@plus 2\p@ \@minus 2\p@} \setlength\textfloatsep {20\p@ \@plus 2\p@ \@minus 4\p@} \setlength\intextsep {12\p@ \@plus 2\p@ \@minus 2\p@} \setlength\dblfloatsep {12\p@ \@plus 2\p@ \@minus 2\p@} \setlength\dbltextfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@} \setlength\@fptop{0\p@} \setlength\@fpsep{8\p@ \@plus 2fil} \setlength\@fpbot{0\p@} \setlength\@dblfptop{0\p@} \setlength\@dblfpsep{8\p@ \@plus 2fil} \setlength\@dblfpbot{0\p@} \setlength\partopsep{2\p@ \@plus 1\p@ \@minus 1\p@} \def\@listI{\leftmargin\leftmargini \parsep=\z@ \topsep=5\p@ \@plus3\p@ \@minus3\p@ \itemsep=3\p@ \@plus2\p@ \@minus\p@} \let\@listi\@listI \@listi \def\@listii {\leftmargin\leftmarginii \labelwidth\leftmarginii \advance\labelwidth-\labelsep \topsep=2\p@ \@plus2\p@ \@minus\p@ \parsep=\z@ \itemsep=\parsep} \def\@listiii{\leftmargin\leftmarginiii \labelwidth\leftmarginiii \advance\labelwidth-\labelsep \topsep=\z@ \parsep=\z@ \partopsep=\z@ \itemsep=\z@} \def\@listiv {\leftmargin\leftmarginiv \labelwidth\leftmarginiv \advance\labelwidth-\labelsep} \def\@listv {\leftmargin\leftmarginv \labelwidth\leftmarginv \advance\labelwidth-\labelsep} \def\@listvi {\leftmargin\leftmarginvi \labelwidth\leftmarginvi \advance\labelwidth-\labelsep} \endinput %% %% End of file `iopart.clo'. \ No newline at end of file diff --git a/journal/iopart12.clo b/journal/iopart12.clo new file mode 100644 index 0000000..48ec5c1 --- /dev/null +++ b/journal/iopart12.clo @@ -0,0 +1 @@ +%% %% This is file `iopart12.clo' %% %% This file is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. %% %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} \ProvidesFile{iopart12.clo}[1997/01/15 v1.0 LaTeX2e file (size option)] \renewcommand\normalsize{% \@setfontsize\normalsize\@xiipt{16}% \abovedisplayskip 12\p@ \@plus3\p@ \@minus7\p@ \abovedisplayshortskip \z@ \@plus3\p@ \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@ \belowdisplayskip \abovedisplayskip \let\@listi\@listI} \normalsize \newcommand\small{% \@setfontsize\small\@xipt{14}% \abovedisplayskip 11\p@ \@plus3\p@ \@minus6\p@ \abovedisplayshortskip \z@ \@plus3\p@ \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@ \def\@listi{\leftmargin\leftmargini \topsep 9\p@ \@plus3\p@ \@minus5\p@ \parsep 4.5\p@ \@plus2\p@ \@minus\p@ \itemsep \parsep}% \belowdisplayskip \abovedisplayskip } \newcommand\footnotesize{% % \@setfontsize\footnotesize\@xpt\@xiipt \@setfontsize\footnotesize\@xpt{13}% \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@ \abovedisplayshortskip \z@ \@plus3\p@ \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@ \def\@listi{\leftmargin\leftmargini \topsep 6\p@ \@plus2\p@ \@minus2\p@ \parsep 3\p@ \@plus2\p@ \@minus\p@ \itemsep \parsep}% \belowdisplayskip \abovedisplayskip } \newcommand\scriptsize{\@setfontsize\scriptsize\@viiipt{9.5}} \newcommand\tiny{\@setfontsize\tiny\@vipt\@viipt} \newcommand\large{\@setfontsize\large\@xivpt{18}} \newcommand\Large{\@setfontsize\Large\@xviipt{22}} \newcommand\LARGE{\@setfontsize\LARGE\@xxpt{25}} \newcommand\huge{\@setfontsize\huge\@xxvpt{30}} \let\Huge=\huge \if@twocolumn \setlength\parindent{14\p@} \else \setlength\parindent{18\p@} \fi \setlength\headheight{14\p@} \setlength\headsep{14\p@} \setlength\topskip{12\p@} \setlength\footskip{24\p@} \setlength\maxdepth{.5\topskip} \setlength\@maxdepth\maxdepth \setlength\textwidth{37.2pc} \setlength\textheight{56pc} \setlength\oddsidemargin {\z@} \setlength\evensidemargin {\z@} \setlength\marginparwidth {72\p@} \setlength\marginparsep{10\p@} \setlength\marginparpush{5\p@} \setlength\topmargin{-12pt} \setlength\footnotesep{8.4\p@} \setlength{\skip\footins} {10.8\p@ \@plus 4\p@ \@minus 2\p@} \setlength\floatsep {14\p@ \@plus 2\p@ \@minus 4\p@} \setlength\textfloatsep {24\p@ \@plus 2\p@ \@minus 4\p@} \setlength\intextsep {16\p@ \@plus 4\p@ \@minus 4\p@} \setlength\dblfloatsep {16\p@ \@plus 2\p@ \@minus 4\p@} \setlength\dbltextfloatsep{24\p@ \@plus 2\p@ \@minus 4\p@} \setlength\@fptop{0\p@} \setlength\@fpsep{10\p@ \@plus 1fil} \setlength\@fpbot{0\p@} \setlength\@dblfptop{0\p@} \setlength\@dblfpsep{10\p@ \@plus 1fil} \setlength\@dblfpbot{0\p@} \setlength\partopsep{3\p@ \@plus 2\p@ \@minus 2\p@} \def\@listI{\leftmargin\leftmargini \parsep=\z@ \topsep=6\p@ \@plus3\p@ \@minus3\p@ \itemsep=3\p@ \@plus2\p@ \@minus1\p@} \let\@listi\@listI \@listi \def\@listii {\leftmargin\leftmarginii \labelwidth\leftmarginii \advance\labelwidth-\labelsep \topsep=3\p@ \@plus2\p@ \@minus\p@ \parsep=\z@ \itemsep=\parsep} \def\@listiii{\leftmargin\leftmarginiii \labelwidth\leftmarginiii \advance\labelwidth-\labelsep \topsep=\z@ \parsep=\z@ \partopsep=\z@ \itemsep=\z@} \def\@listiv {\leftmargin\leftmarginiv \labelwidth\leftmarginiv \advance\labelwidth-\labelsep} \def\@listv{\leftmargin\leftmarginv \labelwidth\leftmarginv \advance\labelwidth-\labelsep} \def\@listvi {\leftmargin\leftmarginvi \labelwidth\leftmarginvi \advance\labelwidth-\labelsep} \endinput %% %% End of file `iopart12.clo'. \ No newline at end of file diff --git a/journal/paper.org b/journal/paper.org new file mode 100644 index 0000000..548c8b0 --- /dev/null +++ b/journal/paper.org @@ -0,0 +1,590 @@ +:DRAWER: +#+LATEX_CLASS: iopart +#+LATEX_CLASS_OPTIONS: [10pt] +#+OPTIONS: toc:nil author:nil title:nil date:nil +#+STARTUP: overview + +#+LATEX_HEADER: \expandafter\let\csname equation*\endcsname\relax +#+LATEX_HEADER: \expandafter\let\csname endequation*\endcsname\relax + +#+LATEX_HEADER: \usepackage{capt-of, subcaption} +#+LATEX_HEADER: \usepackage{hyperref} +#+LATEX_HEADER: \usepackage{amsmath, amssymb, amsfonts, cases, bm} +#+LATEX_HEADER: \usepackage{algorithmic, graphicx, textcomp} +#+LATEX_HEADER: \usepackage{xcolor, import} +#+LATEX_HEADER: \usepackage[USenglish]{babel} +#+LATEX_HEADER: \usepackage{siunitx} +#+LATEX_HEADER: \usepackage{tikz} +#+LATEX_HEADER: \usetikzlibrary{shapes.misc,arrows,arrows.meta} +:END: + +* Build :noexport: +#+name: startblock +#+BEGIN_SRC emacs-lisp :results none :tangle no + (add-to-list 'org-latex-classes + '("iopart" + "\\documentclass{iopart}" + ("\\section{%s}" . "\\section*{%s}") + ("\\subsection{%s}" . "\\subsection*{%s}") + ("\\subsubsection{%s}" . "\\subsubsection*{%s}") + ("\\paragraph{%s}" . "\\paragraph*{%s}") + ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) + ) + (setq org-latex-packages-alist nil) + (setq org-latex-default-packages-alist nil) +#+END_SRC + +* Title Page :ignore: +#+begin_export latex + \title{Active Damping of Rotating Platforms using Integral Force Feedback} + \author{Thomas Dehaeze$^{1,3}$ and Christophe Collette$^{1,2}$} + \address{$^1$ Precision Mechatronics Laboratory, University of Liege, Belgium} + \address{$^2$ BEAMS Department, Free University of Brussels, Belgium} + \address{$^3$ European Synchrotron Radiation Facility, Grenoble, France} + \ead{dehaeze.thomas@gmail.com} + + \vspace{10pt} + \begin{indented} + \item[]November 2020 + \end{indented} +#+end_export + +#+begin_export latex + \begin{abstract} + This paper investigates the use of Integral Force Feedback (IFF) for the active damping of rotating mechanical systems. + Guaranteed stability, typical benefit of IFF, is lost as soon as the system is rotating due to gyroscopic effects. + To overcome this issue, two modifications of the classical IFF control scheme are proposed. + The first consists of slightly modifying the control law while the second consists of adding springs in parallel with the force sensors. + Conditions for stability and optimal parameters are derived. + The results reveal that, despite their different implementations, both modified IFF control scheme have almost identical damping authority on suspension modes. + \end{abstract} + + \vspace{2pc} + \noindent{\it Keywords}: Active Damping, IFF + + \ioptwocol +#+end_export + +* Introduction +<> +There is an increasing need to reduce the undesirable vibration of many sensitive equipment. +A common method to reduce vibration is to mount the sensitive equipment on a suspended platform which attenuates the vibrations above the frequency of the suspension modes. +In order to further decrease the residual vibrations, active damping can be used for reducing the magnification of the response in the vicinity of the resonances. + +In cite:preumont92_activ_dampin_by_local_force, the Integral Force Feedback (IFF) control scheme has been proposed, where a force sensor, a force actuator and an integral controller are used to directly augment the damping of a mechanical system. +When the force sensor is collocated with the actuator, the open-loop transfer function has alternating poles and zeros which facilitate to guarantee the stability of the closed loop system cite:preumont02_force_feedb_versus_accel_feedb. + +However, when the platform is rotating, gyroscopic effects alter the system dynamics and IFF cannot be applied as is. +The purpose of this paper is to study how the IFF strategy can be adapted to deal with these Gyroscopic effects. + +The paper is structured as follows. +Section ref:sec:dynamics presents a simple model of a rotating suspended platform that will be used throughout this study. +Section ref:sec:iff explains how the unconditional stability of IFF is lost due to Gyroscopic effects induced by the rotation. +Section ref:sec:iff_hpf suggests a simple modification of the control law such that damping can be added to the suspension modes in a robust way. +Section ref:sec:iff_kp proposes to add springs in parallel with the force sensors to regain the unconditional stability of IFF. +Section ref:sec:comparison compares both proposed modifications to the classical IFF in terms of damping authority and closed-loop system behavior. + +* Dynamics of Rotating Platforms +<> +** Model of a Rotating Platform :ignore: +In order to study how the rotation does affect the use of IFF, a model of a suspended platform on top of a rotating stage is used. +Figure ref:fig:system represents the model schematically which is the simplest in which gyroscopic forces can be studied. + +#+name: fig:system +#+caption: Schematic of the studied System +#+attr_latex: :width \linewidth +[[file:figs/system.pdf]] + +The rotating stage is supposed to be ideal, meaning it induces a perfect rotation $\theta(t) = \Omega t$ where $\Omega$ is the rotational speed in $\si{\radian\per\second}$. + +The suspended platform consists of two orthogonal actuators represented by three elements in parallel: a spring with a stiffness $k$ in $\si{\newton\per\meter}$, a dashpot with a damping coefficient $c$ in $\si{\newton\per\meter\second}$ and an ideal force source $F_u, F_v$. +A payload with a mass $m$ in $\si{\kilo\gram}$, representing the sensitive equipment, is mounted on the (rotating) suspended platform. + +Two reference frames are used: an inertial frame $(\vec{i}_x, \vec{i}_y, \vec{i}_z)$ and a uniform rotating frame $(\vec{i}_u, \vec{i}_v, \vec{i}_w)$ rigidly fixed on top of the rotating stage with $\vec{i}_w$ aligned with the rotation axis. +The position of the payload is represented by $(d_u, d_v, 0)$ expressed in the rotating frame. + +#+latex: \par + +** Equations of Motion :ignore: +To obtain the equations of motion for the system represented in Figure ref:fig:system, the Lagrangian equations are used: +#+name: eq:lagrangian_equations +\begin{equation} + \frac{d}{dt} \left( \frac{\partial L}{\partial \dot{q}_i} \right) + \frac{\partial D}{\partial \dot{q}_i} - \frac{\partial L}{\partial q_i} = Q_i +\end{equation} +with $L = T - V$ the Lagrangian, $T$ the kinetic coenergy, $V$ the potential energy, $D$ the dissipation function, and $Q_i$ the generalized force associated with the generalized variable $\begin{bmatrix}q_1 & q_2\end{bmatrix} = \begin{bmatrix}d_u & d_v\end{bmatrix}$. +The equation of motion corresponding to the constant rotation in the $(\vec{i}_x, \vec{i}_y)$ plane is disregarded as the motion is considered to be imposed by the rotation stage. +#+name: eq:energy_functions_lagrange +\begin{equation} + \begin{aligned} + T &= \frac{1}{2} m \left( ( \dot{d}_u - \Omega d_v )^2 + ( \dot{d}_v + \Omega d_u )^2 \right), \\ + V &= \frac{1}{2} k \big( {d_u}^2 + {d_v}^2 \big), \ Q_1 = F_u, \\ + D &= \frac{1}{2} c \big( \dot{d}_u{}^2 + \dot{d}_v{}^2 \big), \ Q_2 = F_v + \end{aligned} +\end{equation} + +Substituting equations eqref:eq:energy_functions_lagrange into eqref:eq:lagrangian_equations for both generalized coordinates gives two coupled differential equations +#+name: eq:eom_coupled +\begin{subequations} + \begin{align} + m \ddot{d}_u + c \dot{d}_u + ( k - m \Omega^2 ) d_u &= F_u + 2 m \Omega \dot{d}_v \\ + m \ddot{d}_v + c \dot{d}_v + ( k \underbrace{-\,m \Omega^2}_{\text{Centrif.}} ) d_v &= F_v \underbrace{-\,2 m \Omega \dot{d}_u}_{\text{Coriolis}} + \end{align} +\end{subequations} + +The uniform rotation of the system induces two Gyroscopic effects as shown in eqref:eq:eom_coupled: +- Centrifugal forces: that can been seen as added negative stiffness $- m \Omega^2$ along $\vec{i}_u$ and $\vec{i}_v$ +- Coriolis Forces: that couples the motion in the two orthogonal directions + +One can verify that without rotation ($\Omega = 0$) the system becomes equivalent to two uncoupled one degree of freedom mass-spring-damper systems: +#+name: eq:oem_no_rotation +\begin{subequations} + \begin{align} + m \ddot{d}_u + c \dot{d}_u + k d_u &= F_u \\ + m \ddot{d}_v + c \dot{d}_v + k d_v &= F_v + \end{align} +\end{subequations} + +#+latex: \par + +** Transfer Functions in the Laplace domain :ignore: +To study the dynamics of the system, the differential equations of motions eqref:eq:eom_coupled are transformed in the Laplace domain and the $2 \times 2$ transfer function matrix $\bm{G}_d$ from $\begin{bmatrix}F_u & F_v\end{bmatrix}$ to $\begin{bmatrix}d_u & d_v\end{bmatrix}$ is obtained. + +#+name: eq:Gd_mimo_tf +\begin{equation} + \begin{bmatrix} d_u \\ d_v \end{bmatrix} = \bm{G}_d \begin{bmatrix} F_u \\ F_v \end{bmatrix} +\end{equation} + + +\begin{subequations} +\begin{align} + \bm{G}_{d}(1,1) &= {\frac{ms^2 + cs + k - m \Omega^2}{\left( m s^2 + cs + k - m \Omega^2 \right)^2 + \left( 2 m \Omega s \right)^2}} \\ + &= \bm{G}_{d}(2,2) \nonumber \\ + \bm{G}_{d}(1,2) &= {\frac{2 m \Omega s}{\left( m s^2 + cs + k - m \Omega^2 \right)^2 + \left( 2 m \Omega s \right)^2}} \\ + &= -\bm{G}_{d}(1,2) \nonumber +\end{align} +\end{subequations} + +To simplify the analysis, the undamped natural frequency $\omega_0$ and the damping ratio $\xi$ are used +\begin{equation} + \omega_0 = \sqrt{\frac{k}{m}} \text{ in } \si{\radian\per\second}, \quad \xi = \frac{c}{2 \sqrt{k m}} +\end{equation} + +The transfer function matrix $\bm{G}_d$ becomes equal to +#+name: eq:Gd_w0_xi_k +\begin{subequations} + \begin{align} + \bm{G}_{d}(1,1) &= {\scriptstyle \frac{\frac{1}{k} \left( \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \right)}{\left( \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \right)^2 + \left( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \right)^2} } \\ + \bm{G}_{d}(1,2) &= {\scriptstyle \frac{\frac{1}{k} \left( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \right)}{\left( \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \right)^2 + \left( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \right)^2} } + \end{align} +\end{subequations} + +For all further numerical analysis in this study, we consider $\omega_0 = \SI{1}{\radian\per\second}$, $k = \SI{1}{\newton\per\meter}$ and $\xi = 0.025 = \SI{2.5}{\percent}$. +Even though no system with such parameters will be encountered in practice, conclusions can be drawn relative to these parameters such that they can be generalized to any other set of parameters. + +#+latex: \par + +** System Dynamics and Campbell Diagram :ignore: +The poles of $\bm{G}_d$ are the complex solutions $p$ of eqref:eq:poles. + +#+name: eq:poles +\begin{equation} + \left( \frac{p^2}{{\omega_0}^2} + 2 \xi \frac{p}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \right)^2 + \left( 2 \frac{\Omega}{\omega_0} \frac{p}{\omega_0} \right)^2 = 0 +\end{equation} + +Supposing small damping ($\xi \ll 1$), two pairs of complex conjugate poles are obtained eqref:eq:pole_values. + +#+name: eq:pole_values +\begin{subequations} + \begin{align} + p_{+} &= - \xi \omega_0 \left( 1 + \frac{\Omega}{\omega_0} \right) \pm j \omega_0 \left( 1 + \frac{\Omega}{\omega_0} \right) \\ + p_{-} &= - \xi \omega_0 \left( 1 - \frac{\Omega}{\omega_0} \right) \pm j \omega_0 \left( 1 - \frac{\Omega}{\omega_0} \right) + \end{align} +\end{subequations} + +The real part and complex part of these two pairs of complex conjugate poles are represented in Figure ref:fig:campbell_diagram as a function of the rotational speed $\Omega$. +As the rotational speed increases, $p_{+}$ goes to higher frequencies and $p_{-}$ to lower frequencies. +The system becomes unstable for $\Omega > \omega_0$ as the real part of $p_{-}$ is positive. +Physically, the negative stiffness term $-m\Omega^2$ induced by centrifugal forces exceeds the spring stiffness $k$. + +In the rest of this study, rotational speeds smaller than the undamped natural frequency of the system are assumed ($\Omega < \omega_0$). + +#+name: fig:campbell_diagram +#+caption: Campbell Diagram : Evolution of the complex and real parts of the system's poles as a function of the rotational speed $\Omega$ +#+attr_latex: :environment subfigure :width 0.48\linewidth :align c +| file:figs/campbell_diagram_real.pdf | file:figs/campbell_diagram_imag.pdf | +| <> Real Part | <> Imaginary Part | + +Looking at the transfer function matrix $\bm{G}_d$ in Eq. eqref:eq:Gd_w0_xi_k, one can see that the two diagonal (direct) terms are equal and the two off-diagonal (coupling) terms are opposite. +The bode plot of these two terms are shown in Figure ref:fig:plant_compare_rotating_speed for several rotational speeds $\Omega$. +These plots confirm the expected behavior: the frequency of the two pairs of complex conjugate poles are further separated as $\Omega$ increases. +For $\Omega > \omega_0$, the low frequency pair of complex conjugate poles $p_{-}$ becomes unstable. + +#+name: fig:plant_compare_rotating_speed +#+caption: Bode Plots for $\bm{G}_d$ for several rotational speed $\Omega$ +#+attr_latex: :environment subfigure :width 0.48\linewidth :align c +| file:figs/plant_compare_rotating_speed_direct.pdf | file:figs/plant_compare_rotating_speed_coupling.pdf | +| <> Direct Terms | <> Coupling Terms | + +* Decentralized Integral Force Feedback +<> +** Force Sensors and Control Architecture :ignore: +In order to apply IFF to the system, force sensors are added in series with the two actuators (Figure ref:fig:system_iff). +As this study focuses on decentralized control, two identical controllers $K_F$ are used to feedback each of the sensed force to its associated actuator and no attempt is made to counteract the interactions in the system. +The control diagram is schematically shown in Figure ref:fig:control_diagram_iff. + +#+name: fig:system_iff +#+caption: System with added Force Sensor in series with the actuators +#+attr_latex: :width \linewidth +[[file:figs/system_iff.pdf]] + +#+name: fig:control_diagram_iff +#+caption: Control Diagram for decentralized IFF +#+attr_latex: :scale 1 +[[file:figs/control_diagram_iff.pdf]] + +#+latex: \par + +** Plant Dynamics :ignore: +The forces $\begin{bmatrix}f_u & f_v\end{bmatrix}$ measured by the two force sensors represented in Figure ref:fig:system_iff are equal to +#+name: eq:measured_force +\begin{equation} + \begin{bmatrix} f_{u} \\ f_{v} \end{bmatrix} = + \begin{bmatrix} F_u \\ F_v \end{bmatrix} - (c s + k) + \begin{bmatrix} d_u \\ d_v \end{bmatrix} +\end{equation} + +Inserting eqref:eq:Gd_w0_xi_k into eqref:eq:measured_force yields +#+name: eq:Gf_mimo_tf +\begin{equation} + \begin{bmatrix} f_{u} \\ f_{v} \end{bmatrix} = \bm{G}_{f} \begin{bmatrix} F_u \\ F_v \end{bmatrix} +\end{equation} + +\begin{subequations} +\label{eq:Gf} + \begin{align} + \bm{G}_{f}(1,1) &= {\scriptstyle \frac{\left( \frac{s^2}{{\omega_0}^2} - \frac{\Omega^2}{{\omega_0}^2} \right) \left( \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \right) + \left( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \right)^2}{\left( \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \right)^2 + \left( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \right)^2} } \\ + \bm{G}_{f}(1,2) &= {\scriptstyle \frac{- \left( 2 \xi \frac{s}{\omega_0} + 1 \right) \left( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \right)}{\left( \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \right)^2 + \left( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \right)^2} } + \end{align} +\end{subequations} + +The zeros of the diagonal terms of $\bm{G}_f$ are equal to (neglecting the damping for simplicity) +\begin{subequations} + \begin{align} + z_c &= \pm j \omega_0 \sqrt{\frac{1}{2} \sqrt{8 \frac{\Omega^2}{{\omega_0}^2} + 1} + \frac{\Omega^2}{{\omega_0}^2} + \frac{1}{2} } \label{eq:iff_zero_cc} \\ + z_r &= \pm \omega_0 \sqrt{\frac{1}{2} \sqrt{8 \frac{\Omega^2}{{\omega_0}^2} + 1} - \frac{\Omega^2}{{\omega_0}^2} - \frac{1}{2} } \label{eq:iff_zero_real} + \end{align} +\end{subequations} + +The frequency of the pair of complex conjugate zeros $z_c$ eqref:eq:iff_zero_cc always lies between the frequency of the two pairs of complex conjugate poles $p_{-}$ and $p_{+}$ eqref:eq:pole_values. + +For non-null rotational speeds, two real zeros $z_r$ eqref:eq:iff_zero_real appear in the diagonal terms inducing a non-minimum phase behavior. +This can be seen in the Bode plot of the diagonal terms (Figure ref:fig:plant_iff_compare_rotating_speed) where the low frequency gain is no longer zero while the phase stays at $\SI{180}{\degree}$. + +The low frequency gain of $\bm{G}_f$ increases with the rotational speed $\Omega$ +#+name: eq:low_freq_gain_iff_plan +\begin{equation} + \lim_{\omega \to 0} \left| \bm{G}_f (j\omega) \right| = \begin{bmatrix} + \frac{\Omega^2}{{\omega_0}^2 - \Omega^2} & 0 \\ + 0 & \frac{\Omega^2}{{\omega_0}^2 - \Omega^2} +\end{bmatrix} +\end{equation} + +This can be explained as follows: a constant force $F_u$ induces a small displacement of the mass $d_u = \frac{F_u}{k - m\Omega^2}$, which increases the centrifugal force $m\Omega^2d_u = \frac{\Omega^2}{{\omega_0}^2 - \Omega^2} F_u$ which is then measured by the force sensors. + +#+name: fig:plant_iff_compare_rotating_speed +#+caption: Bode plot of the dynamics from a force actuator to its collocated force sensor ($f_u/F_u$, $f_v/F_v$) for several rotational speeds $\Omega$ +#+attr_latex: :width \linewidth +[[file:figs/plant_iff_compare_rotating_speed.pdf]] + +#+latex: \par + +** Decentralized Integral Force Feedback with Pure Integrators :ignore: +<> +The two IFF controllers $K_F$ consist of a pure integrator +#+name: eq:Kf_pure_int +\begin{equation} +\begin{aligned} + \bm{K}_F(s) &= \begin{bmatrix} K_F(s) & 0 \\ 0 & K_F(s) \end{bmatrix} \\ + K_F(s) &= g \cdot \frac{1}{s} +\end{aligned} +\end{equation} +where $g$ is a scalar representing the gain of the controller. + +In order to see how the IFF affects the poles of the closed loop system, a Root Locus plot (Figure ref:fig:root_locus_pure_iff) is constructed as follows: the poles of the closed-loop system are drawn in the complex plane as the controller gain $g$ varies from $0$ to $\infty$ for the two controllers $K_F$ simultaneously. +As explained in cite:preumont08_trans_zeros_struc_contr_with,skogestad07_multiv_feedb_contr, the closed-loop poles start at the open-loop poles (shown by $\tikz[baseline=-0.6ex] \node[cross out, draw=black, minimum size=1ex, line width=2pt, inner sep=0pt, outer sep=0pt] at (0, 0){};$) for $g = 0$ and coincide with the transmission zeros (shown by $\tikz[baseline=-0.6ex] \draw[line width=2pt, inner sep=0pt, outer sep=0pt] (0,0) circle[radius=3pt];$) as $g \to \infty$. +The direction of increasing gain is indicated by arrows $\tikz[baseline=-0.6ex] \draw[-{Stealth[round]},line width=2pt] (0,0) -- (0.3,0);$. + +#+name: fig:root_locus_pure_iff +#+caption: Root Locus: evolution of the closed-loop poles with increasing controller gains $g$ +#+attr_latex: :scale 1 +[[file:figs/root_locus_pure_iff.pdf]] + +Whereas collocated IFF is usually associated with unconditional stability cite:preumont91_activ, this property is lost as soon as the rotational speed in non-null due to gyroscopic effects. +This can be seen in the Root Locus plot (Figure ref:fig:root_locus_pure_iff) where the poles corresponding to the controller are bound to the right half plane implying closed-loop system instability. + +Physically, this can be explain like so: at low frequency, the loop gain is very large due to the pure integrators in $K_F$. +The control system is thus canceling the spring forces which makes the suspended platform no able to hold the payload against centrifugal forces, hence the instability. + +In order to apply decentralized IFF on rotating platforms, two solutions are proposed to deal with this instability problem. +The first one consists of slightly modifying the control law (Section ref:sec:iff_hpf) while the second one consists of adding springs in parallel with the force sensors (Section ref:sec:iff_kp). + +* Integral Force Feedback with High Pass Filter +<> +** Modification of the Control Law :ignore: +As was explained in the previous section, the instability comes in part from the high gain at low frequency caused by the pure integrators. + +In order to limit this low frequency controller gain, an high pass filter (HPF) can be added to the controller +#+name: eq:IFF_LHF +\begin{equation} + K_{F}(s) = g \cdot \frac{1}{s} \cdot \underbrace{\frac{s/\omega_i}{1 + s/\omega_i}}_{\text{HPF}} = g \cdot \frac{1}{s + \omega_i} +\end{equation} + +This is equivalent to slightly shifting the controller pole to the left along the real axis. + +This modification of the IFF controller is typically done to avoid saturation associated with the pure integrator cite:preumont91_activ. +This is however not the case in this study as it will become clear in the next section. + +#+latex: \par + +** Feedback Analysis :ignore: +The loop gains, $K_F(s)$ times the direct dynamics $f_u/F_u$, with and without the added HPF are shown in Figure ref:fig:loop_gain_modified_iff. +The effect of the added HPF limits the low frequency gain as expected. + +The Root Loci for the decentralized IFF with and without the HPF are displayed in Figure ref:fig:root_locus_modified_iff. +With the added HPF, the poles of the closed loop system are shown to be stable up to some value of the gain $g_\text{max}$ +#+name: eq:gmax_iff_hpf +\begin{equation} + g_{\text{max}} = \omega_i \left( \frac{{\omega_0}^2}{\Omega^2} - 1 \right) +\end{equation} +It is interesting to note that $g_{\text{max}}$ also corresponds to the gain where the low frequency loop gain (Figure ref:fig:loop_gain_modified_iff) reaches one. + +#+name: fig:loop_gain_modified_iff +#+caption: Modification of the loop gain with the added HFP, $g = 2$, $\omega_i = 0.1 \omega_0$ and $\Omega = 0.1 \omega_0$ +#+attr_latex: :width \linewidth +[[file:figs/loop_gain_modified_iff.pdf]] + +#+name: fig:root_locus_modified_iff +#+caption: Modification of the Root Locus with the added HPF, $\omega_i = 0.1 \omega_0$ and $\Omega = 0.1 \omega_0$ +#+attr_latex: :scale 1 +[[file:figs/root_locus_modified_iff.pdf]] + +#+latex: \par + +** Optimal Control Parameters :ignore: +Two parameters can be tuned for the modified controller eqref:eq:IFF_LHF: the gain $g$ and the pole's location $\omega_i$. +The optimal values of $\omega_i$ and $g$ are here considered as the values for which the damping of all the closed-loop poles are simultaneously maximized. + +In order to visualize how $\omega_i$ does affect the attainable damping, the Root Loci for several $\omega_i$ are displayed in Figure ref:fig:root_locus_wi_modified_iff. +It is shown that even though small $\omega_i$ seem to allow more damping to be added to the suspension modes, the control gain $g$ may be limited to small values due to eqref:eq:gmax_iff_hpf. + +#+name: fig:root_locus_wi_modified_iff +#+caption: Root Locus for several HPF cut-off frequencies $\omega_i$, $\Omega = 0.1 \omega_0$ +#+attr_latex: :width \linewidth +[[file:figs/root_locus_wi_modified_iff.pdf]] + +In order to study this trade off, the attainable closed-loop damping ratio $\xi_{\text{cl}}$ is computed as a function of $\omega_i/\omega_0$. +The gain $g_{\text{opt}}$ at which this maximum damping is obtained is also displayed and compared with the gain $g_{\text{max}}$ at which the system becomes unstable (Figure ref:fig:mod_iff_damping_wi). + +#+name: fig:mod_iff_damping_wi +#+caption: Attainable damping ratio $\xi_\text{cl}$ as a function of $\omega_i/\omega_0$. Corresponding control gain $g_\text{opt}$ and $g_\text{max}$ are also shown +#+attr_latex: :width \linewidth +[[file:figs/mod_iff_damping_wi.pdf]] + +Three regions can be observed: +- $\omega_i/\omega_0 < 0.02$: the added damping is limited by the maximum allowed control gain $g_{\text{max}}$ +- $0.02 < \omega_i/\omega_0 < 0.2$: the attainable damping ratio is maximized and is reached for $g \approx 2$ +- $0.2 < \omega_i/\omega_0$: the added damping decreases as $\omega_i/\omega_0$ increases + +* Integral Force Feedback with Parallel Springs +<> +** Stiffness in Parallel with the Force Sensor :ignore: +In this section additional springs in parallel with the force sensors are added to counteract the negative stiffness induced by the rotation. +Such springs are schematically shown in Figure ref:fig:system_parallel_springs where $k_a$ is the stiffness of the actuator and $k_p$ the stiffness in parallel with the actuator and force sensor. + +Amplified piezoelectric stack actuators can also be used for such purpose where a part of the piezoelectric stack is used as an actuator while the rest is used as a force sensor cite:souleille18_concep_activ_mount_space_applic. +The parallel stiffness $k_p$ then corresponds to the amplification structure. +An example of such system is shown in Figure ref:fig:cedrat_xy25xs. + +#+name: fig:system_parallel_springs +#+caption: Studied system with additional springs in parallel with the actuators and force sensors +#+attr_latex: :width \linewidth +[[file:figs/system_parallel_springs.pdf]] + + +#+name: fig:cedrat_xy25xs +#+caption: XY Piezoelectric Stage (XY25XS from Cedrat Technology) +#+attr_latex: :width 0.8\linewidth +[[file:figs/cedrat_xy25xs.png]] + +#+latex: \par + +** Effect of the Parallel Stiffness on the Plant Dynamics :ignore: +The forces $\begin{bmatrix}f_u & f_v\end{bmatrix}$ measured by the two force sensors represented in Figure ref:fig:system_parallel_springs are equal to +#+name: eq:measured_force_kp +\begin{equation} + \begin{bmatrix} f_{u} \\ f_{v} \end{bmatrix} = + \begin{bmatrix} F_u \\ F_v \end{bmatrix} - (c s + k_a) + \begin{bmatrix} d_u \\ d_v \end{bmatrix} +\end{equation} + +In order to keep the overall stiffness $k = k_a + k_p$ constant, thus not modifying the open-loop poles as $k_p$ is changed, a scalar parameter $\alpha$ ($0 \le \alpha < 1$) is defined to describe the fraction of the total stiffness in parallel with the actuator and force sensor +\begin{equation} + k_p = \alpha k, \quad k_a = (1 - \alpha) k +\end{equation} + +The equations of motion are derived and transformed in the Laplace domain +#+name: eq:Gk_mimo_tf +\begin{equation} + \begin{bmatrix} f_u \\ f_v \end{bmatrix} = + \bm{G}_k + \begin{bmatrix} F_u \\ F_v \end{bmatrix} +\end{equation} + +#+name: eq:Gk +\begin{subequations} +\begin{align} +& \bm{G}_{k}(1,1) = \dots \nonumber \\ +& {\scriptstyle \frac{\big( \frac{s^2}{{\omega_0}^2} - \frac{\Omega^2}{{\omega_0}^2} + \alpha \big) \big( \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \big) + \big( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \big)^2}{\big( \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \big)^2 + \big( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \big)^2} } \\ +& \bm{G}_{k}(1,2) = {\scriptscriptstyle \frac{- \left( 2 \xi \frac{s}{\omega_0} + 1 - \alpha \right) \left( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \right)}{\left( \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \right)^2 + \left( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \right)^2} } +\end{align} +\end{subequations} + +Comparing $\bm{G}_k$ eqref:eq:Gk with $\bm{G}_f$ eqref:eq:Gf shows that while the poles of the system are kept the same, the zeros of the diagonal terms have changed. +The two real zeros $z_r$ eqref:eq:iff_zero_real that were inducing non-minimum phase behavior are transformed into complex conjugate zeros if the following condition hold +#+name: eq:kp_cond_cc_zeros +\begin{equation} + \alpha > \frac{\Omega^2}{{\omega_0}^2} \quad \Leftrightarrow \quad k_p > m \Omega^2 +\end{equation} + +Thus, if the added parallel stiffness $k_p$ is higher than the negative stiffness induced by centrifugal forces $m \Omega^2$, the direct dynamics from actuator to force sensor will show minimum phase behavior. +This is confirmed by the Bode plot of the direct dynamics in Figure ref:fig:plant_iff_kp. + +Figure ref:fig:root_locus_iff_kp shows Root Loci plots for $k_p = 0$, $k_p < m \Omega^2$ and $k_p > m \Omega^2$ when $K_F$ is a pure integrator eqref:eq:Kf_pure_int. +It is shown that if the added stiffness is higher than the maximum negative stiffness, the poles of the closed-loop system stay in the (stable) right half-plane, and hence the unconditional stability of IFF is recovered. + +#+name: fig:plant_iff_kp +#+caption: Bode plot of $f_u/F_u$ without parallel spring, with parallel springs with stiffness $k_p < m \Omega^2$ and $k_p > m \Omega^2$, $\Omega = 0.1 \omega_0$ +#+attr_latex: :width \linewidth +[[file:figs/plant_iff_kp.pdf]] + +#+name: fig:root_locus_iff_kp +#+caption: Root Locus for IFF without parallel spring, with parallel springs with stiffness $k_p < m \Omega^2$ and $k_p > m \Omega^2$, $\Omega = 0.1 \omega_0$ +#+attr_latex: :width \linewidth +[[file:figs/root_locus_iff_kp.pdf]] + +#+latex: \par + +** Optimal Parallel Stiffness :ignore: +Even though the parallel stiffness $k_p$ has no impact on the open-loop poles (as the overall stiffness $k$ stays constant), it has a large impact on the transmission zeros. +Moreover, as the attainable damping is generally proportional to the distance between poles and zeros cite:preumont18_vibrat_contr_activ_struc_fourt_edition, the parallel stiffness $k_p$ is foreseen to have a large impact on the attainable damping. + +To study this effect, Root Locus plots for several parallel stiffnesses $k_p > m \Omega^2$ are shown in Figure ref:fig:root_locus_iff_kps. +The frequencies of the transmission zeros of the system are increasing with the parallel stiffness $k_p$ and the associated attainable damping is reduced. +Therefore, even though the parallel stiffness $k_p$ should be larger than $m \Omega^2$ for stability reasons, it should not be taken too high as this would limit the attainable bandwidth. + +This is confirmed in Figure ref:fig:opt_damp_alpha where the attainable closed-loop damping ratio $\xi_{\text{cl}}$ and the associated control gain $g_\text{opt}$ are computed as a function of $\alpha$. + +#+name: fig:root_locus_iff_kps +#+caption: Comparison the Root Locus for three parallel stiffnessses $k_p$ +#+attr_latex: :scale 1 +[[file:figs/root_locus_iff_kps.pdf]] + + +#+name: fig:opt_damp_alpha +#+caption: Optimal Damping Ratio $\xi_\text{opt}$ and the corresponding optimal gain $g_\text{opt}$ as a function of $\alpha$ +#+attr_latex: :width \linewidth +[[file:figs/opt_damp_alpha.pdf]] + +* Comparison and Discussion +<> +** Introduction :ignore: +Two modifications to adapt the IFF control strategy to rotating platforms have been proposed in Sections ref:sec:iff_hpf and ref:sec:iff_kp. +These two methods are now compared in terms of added damping, closed-loop compliance and transmissibility. + +For the following comparisons, the cut-off frequency for the HPF is set to $\omega_i = 0.1 \omega_0$ and the stiffness of the parallel springs is set to $k_p = 5 m \Omega^2$. + +#+latex: \par + +** Comparison of the Attainable Damping :ignore: +Figure ref:fig:comp_root_locus shows the Root Loci for the two proposed IFF modifications. +While the two pairs of complex conjugate open-loop poles are identical for both techniques, the transmission zeros are not. +This means that the closed-loop behavior of both systems will differ when large control gains are used. + +One can observe that the closed loop poles of the system with added springs (in red) are bounded to the left half plane implying unconditional stability. +This is not the case for the system where the controller is augmented with an HPF (in blue). + +It is interesting to note that the maximum added damping is very similar for both techniques and is reached for the same control gain $g_\text{opt} \approx 2 \omega_0$. + +#+name: fig:comp_root_locus +#+caption: Root Locus for the two proposed modifications of decentralized IFF, $\Omega = 0.1 \omega_0$ +#+attr_latex: :scale 1 +[[file:figs/comp_root_locus.pdf]] + +#+latex: \par + +** Comparison Transmissibility and Compliance :ignore: +The two proposed techniques are now compared in terms of closed-loop transmissibility and compliance. + +The transmissibility is defined as the transfer function from the displacement of the rotating stage to the displacement of the payload. +It is used to characterize how much vibration is transmitted through the suspended platform to the payload. + +The compliance describes the displacement response of the payload to external forces applied to it. +This is a useful metric when disturbances are directly applied to the payload. + +The two techniques are also compared with passive damping (Figure ref:fig:system) where the damping coefficient $c$ is tuned to critically damp the resonance when the rotating speed is null. +\begin{equation} + c_\text{crit} = 2 \sqrt{k m} +\end{equation} + +Very similar results are obtained for the two proposed IFF modifications in terms of transmissibility (Figure ref:fig:comp_transmissibility) and compliance (Figure ref:fig:comp_compliance). +It is also confirmed that these two techniques can significantly damp the suspension modes. + +#+name: fig:comp_transmissibility +#+caption: Comparison of the two proposed Active Damping Techniques - Transmissibility +#+attr_latex: :scale 1 +[[file:figs/comp_transmissibility.pdf]] + + +#+name: fig:comp_compliance +#+caption: Comparison of the two proposed Active Damping Techniques - Compliance +#+attr_latex: :scale 1 +[[file:figs/comp_compliance.pdf]] + +On can see in Figure ref:fig:comp_transmissibility that the problem of the degradation of the transmissibility at high frequency when using passive damping techniques is overcome by the use of IFF. + +The addition of the HPF or the use of the parallel stiffness permit to limit the degradation of the compliance as compared with classical IFF (Figure ref:fig:comp_compliance). + +* Conclusion +<> + +Due to gyroscopic effects, decentralized IFF with pure integrators was shown to be unstable when applied to rotating platforms. +Two modifications of the classical IFF control have been proposed to overcome this issue. + +The first modification concerns the controller and consists of adding an high pass filter to the pure integrators. +This is equivalent as to moving the controller pole to the left along the real axis. +This renders the closed loop system stable up to some value of the controller gain $g_\text{max}$. + +The second proposed modification concerns the mechanical system. +Additional springs are added in parallel with the actuators and force sensors. +It was shown that if the stiffness $k_p$ of the additional springs is larger than the negative stiffness $m \Omega^2$ induced by centrifugal forces, the classical decentralized IFF regains its unconditional stability property. + +While having very different implementations, both proposed modifications are very similar when it comes to the attainable damping and the obtained closed loop system behavior. + +Future work will focus on the experimental validation of the proposed active damping techniques. + +The Matlab code that was used for this study is available under a MIT License and archived in Zenodo cite:dehaeze20_activ_dampin_rotat_posit_platf. + +* Acknowledgments +:PROPERTIES: +:UNNUMBERED: t +:END: + +This research benefited from a FRIA grant from the French Community of Belgium. + +* References +:PROPERTIES: +:UNNUMBERED: t +:END: + +\bibliographystyle{iopart-num} +\bibliography{ref.bib} diff --git a/journal/paper.pdf b/journal/paper.pdf index 59b52bb..ce5805b 100644 Binary files a/journal/paper.pdf and b/journal/paper.pdf differ diff --git a/journal/paper.tex b/journal/paper.tex index 4d0cdb6..8fbead3 100644 --- a/journal/paper.tex +++ b/journal/paper.tex @@ -1,32 +1,40 @@ -% Created 2020-10-29 jeu. 12:36 +% Created 2020-11-02 lun. 14:38 % Intended LaTeX compiler: pdflatex -\documentclass[Afour,sagev,times]{sagej} -\usepackage[utf8]{inputenc} -\usepackage[T1]{fontenc} -\usepackage{graphicx} -\usepackage{grffile} -\usepackage[normalem]{ulem} -\usepackage{capt-of} +\documentclass[10pt]{iopart} + +\expandafter\let\csname equation*\endcsname\relax +\expandafter\let\csname endequation*\endcsname\relax +\usepackage{capt-of, subcaption} \usepackage{hyperref} -\usepackage{bm} -\usepackage{amsmath,amssymb,amsfonts, cases} +\usepackage{amsmath, amssymb, amsfonts, cases, bm} \usepackage{algorithmic, graphicx, textcomp} \usepackage{xcolor, import} -\usepackage{subcaption} \usepackage[USenglish, english]{babel} +\usepackage{siunitx} +\usepackage{tikz} +\usetikzlibrary{shapes.misc,arrows,arrows.meta} +\date{} +\hypersetup{ + pdfauthor={Thomas Dehaeze}, + pdftitle={}, + pdfkeywords={}, + pdfsubject={}, + pdfcreator={Emacs 27.1.50 (Org mode 9.4)}, + pdflang={English}} +\begin{document} -\usepackage{natbib} -\bibliographystyle{SageV} +\title{Active Damping of Rotating Platforms using Integral Force Feedback} +\author{Thomas Dehaeze$^{1,3}$ and Christophe Collette$^{1,2}$} +\address{$^1$ Precision Mechatronics Laboratory, University of Liege, Belgium} +\address{$^2$ BEAMS Department, Free University of Brussels, Belgium} +\address{$^3$ European Synchrotron Radiation Facility, Grenoble, France} +\ead{dehaeze.thomas@gmail.com} -\newcommand\BibTeX{{\rmfamily B\kern-.05em \textsc{i\kern-.025em b}\kern-.08em -T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}} +\vspace{10pt} +\begin{indented} +\item[]November 2020 +\end{indented} -\hypersetup{colorlinks,bookmarksopen,bookmarksnumbered,citecolor=red,urlcolor=red} -\author{Dehaeze Thomas\affilnum{1,3} and Collette Christophe\affilnum{1,2}} -\affiliation{\affilnum{1}Precision Mechatronics Laboratory, University of Liege, Belgium\\ -\affilnum{2}BEAMS Department, Free University of Brussels, Belgium\\ -\affilnum{3}European Synchrotron Radiation Facility, Grenoble, France} -\email{dehaeze.thomas@gmail.com} \begin{abstract} This paper investigates the use of Integral Force Feedback (IFF) for the active damping of rotating mechanical systems. Guaranteed stability, typical benefit of IFF, is lost as soon as the system is rotating due to gyroscopic effects. @@ -35,15 +43,14 @@ The first consists of slightly modifying the control law while the second consis Conditions for stability and optimal parameters are derived. The results reveal that, despite their different implementations, both modified IFF control scheme have almost identical damping authority on suspension modes. \end{abstract} -\keywords{Active damping, IFF, Rotating platform} -\date{} -\title{Active Damping of Rotating Platforms using Integral Force Feedback} -\begin{document} -\maketitle +\vspace{2pc} +\noindent{\it Keywords}: Active Damping, IFF + +\ioptwocol \section{Introduction} -\label{sec:org6f081c2} +\label{sec:orgcbd1527} \label{sec:introduction} There is an increasing need to reduce the undesirable vibration of many sensitive equipment. A common method to reduce vibration is to mount the sensitive equipment on a suspended platform which attenuates the vibrations above the frequency of the suspension modes. @@ -63,21 +70,21 @@ Section \ref{sec:iff_kp} proposes to add springs in parallel with the force sens Section \ref{sec:comparison} compares both proposed modifications to the classical IFF in terms of damping authority and closed-loop system behavior. \section{Dynamics of Rotating Platforms} -\label{sec:org42fff77} +\label{sec:org90939ec} \label{sec:dynamics} In order to study how the rotation does affect the use of IFF, a model of a suspended platform on top of a rotating stage is used. Figure \ref{fig:system} represents the model schematically which is the simplest in which gyroscopic forces can be studied. \begin{figure}[htbp] \centering -\includegraphics[width=0.8\linewidth]{system.pdf} +\includegraphics[width=\linewidth]{figs/system.pdf} \caption{\label{fig:system}Schematic of the studied System} \end{figure} -The rotating stage is supposed to be ideal, meaning it induces a perfect rotation \(\theta(t) = \Omega t\) where \(\Omega\) is the rotational speed in rad/s. +The rotating stage is supposed to be ideal, meaning it induces a perfect rotation \(\theta(t) = \Omega t\) where \(\Omega\) is the rotational speed in \(\si{\radian\per\second}\). -The suspended platform consists of two orthogonal actuators represented by three elements in parallel: a spring with a stiffness \(k\) in N/m, a dashpot with a damping coefficient \(c\) in N/(m/s) and an ideal force source \(F_u, F_v\). -A payload with a mass \(m\) in kg, representing the sensitive equipment, is mounted on the (rotating) suspended platform. +The suspended platform consists of two orthogonal actuators represented by three elements in parallel: a spring with a stiffness \(k\) in \(\si{\newton\per\meter}\), a dashpot with a damping coefficient \(c\) in \(\si{\newton\per\meter\second}\) and an ideal force source \(F_u, F_v\). +A payload with a mass \(m\) in \(\si{\kilo\gram}\), representing the sensitive equipment, is mounted on the (rotating) suspended platform. Two reference frames are used: an inertial frame \((\vec{i}_x, \vec{i}_y, \vec{i}_z)\) and a uniform rotating frame \((\vec{i}_u, \vec{i}_v, \vec{i}_w)\) rigidly fixed on top of the rotating stage with \(\vec{i}_w\) aligned with the rotation axis. The position of the payload is represented by \((d_u, d_v, 0)\) expressed in the rotating frame. @@ -93,9 +100,9 @@ The equation of motion corresponding to the constant rotation in the \((\vec{i}_ \begin{equation} \label{eq:energy_functions_lagrange} \begin{aligned} - T &= \frac{1}{2} m \left( \left( \dot{d}_u - \Omega d_v \right)^2 + \left( \dot{d}_v + \Omega d_u \right)^2 \right), \\ - V &= \frac{1}{2} k \left( {d_u}^2 + {d_v}^2 \right), \\ - D &= \frac{1}{2} c \left( \dot{d}_u{}^2 + \dot{d}_v{}^2 \right), \quad Q_1 = F_u, \quad Q_2 = F_v + T &= \frac{1}{2} m \left( ( \dot{d}_u - \Omega d_v )^2 + ( \dot{d}_v + \Omega d_u )^2 \right), \\ + V &= \frac{1}{2} k \big( {d_u}^2 + {d_v}^2 \big), \ Q_1 = F_u, \\ + D &= \frac{1}{2} c \big( \dot{d}_u{}^2 + \dot{d}_v{}^2 \big), \ Q_2 = F_v \end{aligned} \end{equation} @@ -124,27 +131,29 @@ One can verify that without rotation (\(\Omega = 0\)) the system becomes equival \end{subequations} \par -To study the dynamics of the system, the differential equations of motions \eqref{eq:eom_coupled} are transformed in the Laplace domain and the \(2 \times 2\) transfer function matrix \(\bm{G}_d\) from \(\begin{bmatrix}F_u & F_v\end{bmatrix}\) to \(\begin{bmatrix}d_u & d_v\end{bmatrix}\) is obtained +To study the dynamics of the system, the differential equations of motions \eqref{eq:eom_coupled} are transformed in the Laplace domain and the \(2 \times 2\) transfer function matrix \(\bm{G}_d\) from \(\begin{bmatrix}F_u & F_v\end{bmatrix}\) to \(\begin{bmatrix}d_u & d_v\end{bmatrix}\) is obtained. + \begin{equation} \label{eq:Gd_mimo_tf} \begin{bmatrix} d_u \\ d_v \end{bmatrix} = \bm{G}_d \begin{bmatrix} F_u \\ F_v \end{bmatrix} \end{equation} + \begin{subequations} - \begin{align} - \bm{G}_{d}(1,1) &= \frac{ms^2 + cs + k - m \Omega^2}{\left( m s^2 + cs + k - m \Omega^2 \right)^2 + \left( 2 m \Omega s \right)^2} \\ - &= \bm{G}_{d}(2,2) \nonumber \\ - \bm{G}_{d}(1,2) &= \frac{2 m \Omega s}{\left( m s^2 + cs + k - m \Omega^2 \right)^2 + \left( 2 m \Omega s \right)^2} \\ - &= -\bm{G}_{d}(1,2) \nonumber - \end{align} +\begin{align} + \bm{G}_{d}(1,1) &= {\frac{ms^2 + cs + k - m \Omega^2}{\left( m s^2 + cs + k - m \Omega^2 \right)^2 + \left( 2 m \Omega s \right)^2}} \\ + &= \bm{G}_{d}(2,2) \nonumber \\ + \bm{G}_{d}(1,2) &= {\frac{2 m \Omega s}{\left( m s^2 + cs + k - m \Omega^2 \right)^2 + \left( 2 m \Omega s \right)^2}} \\ + &= -\bm{G}_{d}(1,2) \nonumber +\end{align} \end{subequations} To simplify the analysis, the undamped natural frequency \(\omega_0\) and the damping ratio \(\xi\) are used \begin{equation} - \omega_0 = \sqrt{\frac{k}{m}} \text{ in rad/s}, \quad \xi = \frac{c}{2 \sqrt{k m}} + \omega_0 = \sqrt{\frac{k}{m}} \text{ in } \si{\radian\per\second}, \quad \xi = \frac{c}{2 \sqrt{k m}} \end{equation} -The elements of the transfer function matrix \(\bm{G}_d\) become equal to +The transfer function matrix \(\bm{G}_d\) becomes equal to \begin{subequations} \label{eq:Gd_w0_xi_k} \begin{align} @@ -153,16 +162,19 @@ The elements of the transfer function matrix \(\bm{G}_d\) become equal to \end{align} \end{subequations} -For all further numerical analysis in this study, we consider \(\omega_0 = 1\,\text{rad}/s\), \(k = 1\,N/m\) and \(\xi = 0.025 = 2.5\,\%\). +For all further numerical analysis in this study, we consider \(\omega_0 = \SI{1}{\radian\per\second}\), \(k = \SI{1}{\newton\per\meter}\) and \(\xi = 0.025 = \SI{2.5}{\percent}\). Even though no system with such parameters will be encountered in practice, conclusions can be drawn relative to these parameters such that they can be generalized to any other set of parameters. \par -The poles of \(\bm{G}_d\) are the complex solutions \(p\) of +The poles of \(\bm{G}_d\) are the complex solutions \(p\) of \eqref{eq:poles}. + \begin{equation} +\label{eq:poles} \left( \frac{p^2}{{\omega_0}^2} + 2 \xi \frac{p}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \right)^2 + \left( 2 \frac{\Omega}{\omega_0} \frac{p}{\omega_0} \right)^2 = 0 \end{equation} -Supposing small damping (\(\xi \ll 1\)), two pairs of complex conjugate poles are obtained: +Supposing small damping (\(\xi \ll 1\)), two pairs of complex conjugate poles are obtained \eqref{eq:pole_values}. + \begin{subequations} \label{eq:pole_values} \begin{align} @@ -179,13 +191,13 @@ Physically, the negative stiffness term \(-m\Omega^2\) induced by centrifugal fo In the rest of this study, rotational speeds smaller than the undamped natural frequency of the system are assumed (\(\Omega < \omega_0\)). \begin{figure}[htbp] -\begin{subfigure}[c]{0.45\linewidth} -\includegraphics[width=\linewidth]{campbell_diagram_real.pdf} +\begin{subfigure}[c]{0.48\linewidth} +\includegraphics[width=\linewidth]{figs/campbell_diagram_real.pdf} \caption{\label{fig:campbell_diagram_real} Real Part} \end{subfigure} \hfill -\begin{subfigure}[c]{0.45\linewidth} -\includegraphics[width=\linewidth]{campbell_diagram_imag.pdf} +\begin{subfigure}[c]{0.48\linewidth} +\includegraphics[width=\linewidth]{figs/campbell_diagram_imag.pdf} \caption{\label{fig:campbell_diagram_imag} Imaginary Part} \end{subfigure} \hfill @@ -199,14 +211,14 @@ These plots confirm the expected behavior: the frequency of the two pairs of com For \(\Omega > \omega_0\), the low frequency pair of complex conjugate poles \(p_{-}\) becomes unstable. \begin{figure}[htbp] -\begin{subfigure}[c]{0.49\linewidth} -\includegraphics[width=\linewidth]{plant_compare_rotating_speed_direct.pdf} -\caption{\label{fig:plant_compare_rotating_speed_direct} Direct Terms \(d_u/F_u\) and \(d_v/F_v\)} +\begin{subfigure}[c]{0.48\linewidth} +\includegraphics[width=\linewidth]{figs/plant_compare_rotating_speed_direct.pdf} +\caption{\label{fig:plant_compare_rotating_speed_direct} Direct Terms} \end{subfigure} \hfill -\begin{subfigure}[c]{0.49\linewidth} -\includegraphics[width=\linewidth]{plant_compare_rotating_speed_coupling.pdf} -\caption{\label{fig:plant_compare_rotating_speed_coupling} Coupling Terms \(d_v/F_u\) and -\(d_u/F_v\)} +\begin{subfigure}[c]{0.48\linewidth} +\includegraphics[width=\linewidth]{figs/plant_compare_rotating_speed_coupling.pdf} +\caption{\label{fig:plant_compare_rotating_speed_coupling} Coupling Terms} \end{subfigure} \hfill \caption{\label{fig:plant_compare_rotating_speed}Bode Plots for \(\bm{G}_d\) for several rotational speed \(\Omega\)} @@ -214,7 +226,7 @@ For \(\Omega > \omega_0\), the low frequency pair of complex conjugate poles \(p \end{figure} \section{Decentralized Integral Force Feedback} -\label{sec:org955ee19} +\label{sec:orgabd3121} \label{sec:iff} In order to apply IFF to the system, force sensors are added in series with the two actuators (Figure \ref{fig:system_iff}). As this study focuses on decentralized control, two identical controllers \(K_F\) are used to feedback each of the sensed force to its associated actuator and no attempt is made to counteract the interactions in the system. @@ -222,13 +234,13 @@ The control diagram is schematically shown in Figure \ref{fig:control_diagram_if \begin{figure}[htbp] \centering -\includegraphics[width=0.8\linewidth]{system_iff.pdf} +\includegraphics[width=\linewidth]{figs/system_iff.pdf} \caption{\label{fig:system_iff}System with added Force Sensor in series with the actuators} \end{figure} \begin{figure}[htbp] \centering -\includegraphics[scale=1]{control_diagram_iff.pdf} +\includegraphics[scale=1]{figs/control_diagram_iff.pdf} \caption{\label{fig:control_diagram_iff}Control Diagram for decentralized IFF} \end{figure} @@ -266,7 +278,7 @@ The zeros of the diagonal terms of \(\bm{G}_f\) are equal to (neglecting the dam The frequency of the pair of complex conjugate zeros \(z_c\) \eqref{eq:iff_zero_cc} always lies between the frequency of the two pairs of complex conjugate poles \(p_{-}\) and \(p_{+}\) \eqref{eq:pole_values}. For non-null rotational speeds, two real zeros \(z_r\) \eqref{eq:iff_zero_real} appear in the diagonal terms inducing a non-minimum phase behavior. -This can be seen in the Bode plot of the diagonal terms (Figure \ref{fig:plant_iff_compare_rotating_speed}) where the low frequency gain is no longer zero while the phase stays at \(180\,\text{deg}\). +This can be seen in the Bode plot of the diagonal terms (Figure \ref{fig:plant_iff_compare_rotating_speed}) where the low frequency gain is no longer zero while the phase stays at \(\SI{180}{\degree}\). The low frequency gain of \(\bm{G}_f\) increases with the rotational speed \(\Omega\) \begin{equation} @@ -281,7 +293,7 @@ This can be explained as follows: a constant force \(F_u\) induces a small displ \begin{figure}[htbp] \centering -\includegraphics[scale=1]{plant_iff_compare_rotating_speed.pdf} +\includegraphics[width=\linewidth]{figs/plant_iff_compare_rotating_speed.pdf} \caption{\label{fig:plant_iff_compare_rotating_speed}Bode plot of the dynamics from a force actuator to its collocated force sensor (\(f_u/F_u\), \(f_v/F_v\)) for several rotational speeds \(\Omega\)} \end{figure} @@ -290,17 +302,20 @@ This can be explained as follows: a constant force \(F_u\) induces a small displ The two IFF controllers \(K_F\) consist of a pure integrator \begin{equation} \label{eq:Kf_pure_int} - \bm{K}_F(s) = \begin{bmatrix} K_F(s) & 0 \\ 0 & K_F(s) \end{bmatrix}, \quad K_F(s) = g \cdot \frac{1}{s} +\begin{aligned} + \bm{K}_F(s) &= \begin{bmatrix} K_F(s) & 0 \\ 0 & K_F(s) \end{bmatrix} \\ + K_F(s) &= g \cdot \frac{1}{s} +\end{aligned} \end{equation} where \(g\) is a scalar representing the gain of the controller. In order to see how the IFF affects the poles of the closed loop system, a Root Locus plot (Figure \ref{fig:root_locus_pure_iff}) is constructed as follows: the poles of the closed-loop system are drawn in the complex plane as the controller gain \(g\) varies from \(0\) to \(\infty\) for the two controllers \(K_F\) simultaneously. -As explained in \cite{preumont08_trans_zeros_struc_contr_with,skogestad07_multiv_feedb_contr}, the closed-loop poles start at the open-loop poles (shown by crosses) for \(g = 0\) and coincide with the transmission zeros (shown by circles) as \(g \to \infty\). -The direction of increasing gain is indicated by arrows. +As explained in \cite{preumont08_trans_zeros_struc_contr_with,skogestad07_multiv_feedb_contr}, the closed-loop poles start at the open-loop poles (shown by \(\tikz[baseline=-0.6ex] \node[cross out, draw=black, minimum size=1ex, line width=2pt, inner sep=0pt, outer sep=0pt] at (0, 0){};\)) for \(g = 0\) and coincide with the transmission zeros (shown by \(\tikz[baseline=-0.6ex] \draw[line width=2pt, inner sep=0pt, outer sep=0pt] (0,0) circle[radius=3pt];\)) as \(g \to \infty\). +The direction of increasing gain is indicated by arrows \(\tikz[baseline=-0.6ex] \draw[-{Stealth[round]},line width=2pt] (0,0) -- (0.3,0);\). \begin{figure}[htbp] \centering -\includegraphics[scale=1]{root_locus_pure_iff.pdf} +\includegraphics[scale=1]{figs/root_locus_pure_iff.pdf} \caption{\label{fig:root_locus_pure_iff}Root Locus: evolution of the closed-loop poles with increasing controller gains \(g\)} \end{figure} @@ -314,7 +329,7 @@ In order to apply decentralized IFF on rotating platforms, two solutions are pro The first one consists of slightly modifying the control law (Section \ref{sec:iff_hpf}) while the second one consists of adding springs in parallel with the force sensors (Section \ref{sec:iff_kp}). \section{Integral Force Feedback with High Pass Filter} -\label{sec:orgeb779c5} +\label{sec:orgb936693} \label{sec:iff_hpf} As was explained in the previous section, the instability comes in part from the high gain at low frequency caused by the pure integrators. @@ -343,13 +358,13 @@ It is interesting to note that \(g_{\text{max}}\) also corresponds to the gain w \begin{figure}[htbp] \centering -\includegraphics[scale=1]{loop_gain_modified_iff.pdf} +\includegraphics[width=\linewidth]{figs/loop_gain_modified_iff.pdf} \caption{\label{fig:loop_gain_modified_iff}Modification of the loop gain with the added HFP, \(g = 2\), \(\omega_i = 0.1 \omega_0\) and \(\Omega = 0.1 \omega_0\)} \end{figure} \begin{figure}[htbp] \centering -\includegraphics[scale=1]{root_locus_modified_iff.pdf} +\includegraphics[scale=1]{figs/root_locus_modified_iff.pdf} \caption{\label{fig:root_locus_modified_iff}Modification of the Root Locus with the added HPF, \(\omega_i = 0.1 \omega_0\) and \(\Omega = 0.1 \omega_0\)} \end{figure} @@ -362,7 +377,7 @@ It is shown that even though small \(\omega_i\) seem to allow more damping to be \begin{figure}[htbp] \centering -\includegraphics[scale=1]{root_locus_wi_modified_iff.pdf} +\includegraphics[width=\linewidth]{figs/root_locus_wi_modified_iff.pdf} \caption{\label{fig:root_locus_wi_modified_iff}Root Locus for several HPF cut-off frequencies \(\omega_i\), \(\Omega = 0.1 \omega_0\)} \end{figure} @@ -371,7 +386,7 @@ The gain \(g_{\text{opt}}\) at which this maximum damping is obtained is also di \begin{figure}[htbp] \centering -\includegraphics[scale=1]{mod_iff_damping_wi.pdf} +\includegraphics[width=\linewidth]{figs/mod_iff_damping_wi.pdf} \caption{\label{fig:mod_iff_damping_wi}Attainable damping ratio \(\xi_\text{cl}\) as a function of \(\omega_i/\omega_0\). Corresponding control gain \(g_\text{opt}\) and \(g_\text{max}\) are also shown} \end{figure} @@ -383,7 +398,7 @@ Three regions can be observed: \end{itemize} \section{Integral Force Feedback with Parallel Springs} -\label{sec:org41af864} +\label{sec:org9c04fb0} \label{sec:iff_kp} In this section additional springs in parallel with the force sensors are added to counteract the negative stiffness induced by the rotation. Such springs are schematically shown in Figure \ref{fig:system_parallel_springs} where \(k_a\) is the stiffness of the actuator and \(k_p\) the stiffness in parallel with the actuator and force sensor. @@ -394,14 +409,14 @@ An example of such system is shown in Figure \ref{fig:cedrat_xy25xs}. \begin{figure}[htbp] \centering -\includegraphics[width=0.8\linewidth]{system_parallel_springs.pdf} +\includegraphics[width=\linewidth]{figs/system_parallel_springs.pdf} \caption{\label{fig:system_parallel_springs}Studied system with additional springs in parallel with the actuators and force sensors} \end{figure} \begin{figure}[htbp] \centering -\includegraphics[width=0.8\linewidth]{cedrat_xy25xs.pdf} +\includegraphics[width=0.8\linewidth]{figs/cedrat_xy25xs.png} \caption{\label{fig:cedrat_xy25xs}XY Piezoelectric Stage (XY25XS from Cedrat Technology)} \end{figure} @@ -430,8 +445,9 @@ The equations of motion are derived and transformed in the Laplace domain \begin{subequations} \label{eq:Gk} \begin{align} -\bm{G}_{k}(1,1) &= {\scriptstyle \frac{\left( \frac{s^2}{{\omega_0}^2} - \frac{\Omega^2}{{\omega_0}^2} + \alpha \right) \left( \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \right) + \left( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \right)^2}{\left( \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \right)^2 + \left( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \right)^2} } \\ -\bm{G}_{k}(1,2) &= {\scriptstyle \frac{- \left( 2 \xi \frac{s}{\omega_0} + 1 - \alpha \right) \left( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \right)}{\left( \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \right)^2 + \left( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \right)^2} } +& \bm{G}_{k}(1,1) = \dots \nonumber \\ +& {\scriptstyle \frac{\big( \frac{s^2}{{\omega_0}^2} - \frac{\Omega^2}{{\omega_0}^2} + \alpha \big) \big( \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \big) + \big( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \big)^2}{\big( \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \big)^2 + \big( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \big)^2} } \\ +& \bm{G}_{k}(1,2) = {\scriptscriptstyle \frac{- \left( 2 \xi \frac{s}{\omega_0} + 1 - \alpha \right) \left( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \right)}{\left( \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \right)^2 + \left( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \right)^2} } \end{align} \end{subequations} @@ -450,13 +466,13 @@ It is shown that if the added stiffness is higher than the maximum negative stif \begin{figure}[htbp] \centering -\includegraphics[scale=1]{plant_iff_kp.pdf} -\caption{\label{fig:plant_iff_kp}Bode Plot of \(f_u/F_u\) without parallel spring, with parallel springs with stiffness \(k_p < m \Omega^2\) and \(k_p > m \Omega^2\), \(\Omega = 0.1 \omega_0\)} +\includegraphics[width=\linewidth]{figs/plant_iff_kp.pdf} +\caption{\label{fig:plant_iff_kp}Bode plot of \(f_u/F_u\) without parallel spring, with parallel springs with stiffness \(k_p < m \Omega^2\) and \(k_p > m \Omega^2\), \(\Omega = 0.1 \omega_0\)} \end{figure} \begin{figure}[htbp] \centering -\includegraphics[scale=1]{root_locus_iff_kp.pdf} +\includegraphics[width=\linewidth]{figs/root_locus_iff_kp.pdf} \caption{\label{fig:root_locus_iff_kp}Root Locus for IFF without parallel spring, with parallel springs with stiffness \(k_p < m \Omega^2\) and \(k_p > m \Omega^2\), \(\Omega = 0.1 \omega_0\)} \end{figure} @@ -472,19 +488,19 @@ This is confirmed in Figure \ref{fig:opt_damp_alpha} where the attainable closed \begin{figure}[htbp] \centering -\includegraphics[scale=1]{root_locus_iff_kps.pdf} +\includegraphics[scale=1]{figs/root_locus_iff_kps.pdf} \caption{\label{fig:root_locus_iff_kps}Comparison the Root Locus for three parallel stiffnessses \(k_p\)} \end{figure} \begin{figure}[htbp] \centering -\includegraphics[scale=1]{opt_damp_alpha.pdf} +\includegraphics[width=\linewidth]{figs/opt_damp_alpha.pdf} \caption{\label{fig:opt_damp_alpha}Optimal Damping Ratio \(\xi_\text{opt}\) and the corresponding optimal gain \(g_\text{opt}\) as a function of \(\alpha\)} \end{figure} \section{Comparison and Discussion} -\label{sec:org2279161} +\label{sec:org6e6cf51} \label{sec:comparison} Two modifications to adapt the IFF control strategy to rotating platforms have been proposed in Sections \ref{sec:iff_hpf} and \ref{sec:iff_kp}. These two methods are now compared in terms of added damping, closed-loop compliance and transmissibility. @@ -503,7 +519,7 @@ It is interesting to note that the maximum added damping is very similar for bot \begin{figure}[htbp] \centering -\includegraphics[scale=1]{comp_root_locus.pdf} +\includegraphics[scale=1]{figs/comp_root_locus.pdf} \caption{\label{fig:comp_root_locus}Root Locus for the two proposed modifications of decentralized IFF, \(\Omega = 0.1 \omega_0\)} \end{figure} @@ -526,14 +542,14 @@ It is also confirmed that these two techniques can significantly damp the suspen \begin{figure}[htbp] \centering -\includegraphics[scale=1]{comp_transmissibility.pdf} +\includegraphics[scale=1]{figs/comp_transmissibility.pdf} \caption{\label{fig:comp_transmissibility}Comparison of the two proposed Active Damping Techniques - Transmissibility} \end{figure} \begin{figure}[htbp] \centering -\includegraphics[scale=1]{comp_compliance.pdf} +\includegraphics[scale=1]{figs/comp_compliance.pdf} \caption{\label{fig:comp_compliance}Comparison of the two proposed Active Damping Techniques - Compliance} \end{figure} @@ -542,7 +558,7 @@ On can see in Figure \ref{fig:comp_transmissibility} that the problem of the deg The addition of the HPF or the use of the parallel stiffness permit to limit the degradation of the compliance as compared with classical IFF (Figure \ref{fig:comp_compliance}). \section{Conclusion} -\label{sec:org40ed087} +\label{sec:org0fc9335} \label{sec:conclusion} Due to gyroscopic effects, decentralized IFF with pure integrators was shown to be unstable when applied to rotating platforms. @@ -562,9 +578,12 @@ Future work will focus on the experimental validation of the proposed active dam The Matlab code that was used for this study is available under a MIT License and archived in Zenodo \cite{dehaeze20_activ_dampin_rotat_posit_platf}. -\section*{Acknowledgment} -\label{sec:org7ba6f08} -This research benefited from a FRIA grant (grant number: FC 31597) from the French Community of Belgium. +\section*{Acknowledgments} +\label{sec:org45730f8} +This research benefited from a FRIA grant from the French Community of Belgium. +\section*{References} +\label{sec:org676de81} +\bibliographystyle{iopart-num} \bibliography{ref.bib} \end{document} diff --git a/journal/sagej.cls b/journal/sagej.cls deleted file mode 100644 index 3e17ec7..0000000 --- a/journal/sagej.cls +++ /dev/null @@ -1,584 +0,0 @@ -%--------------------------------------------------------------------------- -%Please be aware that the use of this LaTeX class file is governed by the -%following conditions: -% -% based on the original LaTeX ARTICLE DOCUMENT STYLE -% Copyright (C) 1988, 1989 by Leslie Lamport -% -% Copyright (c) 2013 SAGE Publications. All rights reserved. -% -%Rules of Use -% -%% You are NOT ALLOWED to change this file. -% -% -%This class file is made available for use by authors who wish to prepare an -%article for publication in a SAGE Publications journal. -%The user may not exploit any part of the class file commercially. -% -%This class file is provided on an `as is' basis, without warranties of any -%kind, either expressed or implied, including but not limited to warranties of -%title, or implied warranties of merchantablility or fitness for a -%particular purpose. There will be no duty on the author[s] of the software -%or SAGE Publications to correct any errors or defects in the software. -%Any statutory rights you may have remain unaffected by your acceptance of -%these rules of use. -%--------------------------------------------------------------------------- -% -% Created by Alistair Smith, Sunrise Setting Ltd, 27 July 2013 -% -% sagej.cls --- For SAGE Publications -% -% 9/6/15 Endnote bug fix. -% 24/6/15 Add "comma" to vancouver natbib line; remove figure extension; Review option added. -% 14/1/17 SAGE graphic removed and replaced by drawn box. - -\def\update{2017/01/17 v1.20} - -\newcommand{\journalclass}{sagej.cls} -\newcommand{\journalclassshort}{sagej} -%\newcommand{\DOI}{XXX} - -\NeedsTeXFormat{LaTeX2e} -\ProvidesClass{sagej}[\update\ \journalclass] - -%\newcommand\hmmax{0} - -\newif\if@timesfont -\DeclareOption{times}{% -\@timesfonttrue} - -\newif\if@doublespace -\DeclareOption{doublespace}{% -\@doublespacetrue} - -\newif\if@sageh -\DeclareOption{sageh}{% -\@sagehtrue} - -\newif\if@sagev -\DeclareOption{sagev}{% -\@sagevtrue} - -\newif\if@sageapa -\DeclareOption{sageapa}{% -\@sageapatrue} - -%Setup the trim and text areas -\newif\if@shortAfour -\DeclareOption{shortAfour}{% -\@shortAfourtrue} - -\newif\if@Afour -\DeclareOption{Afour}{% -\@Afourtrue} - -\newif\if@MCfour -\DeclareOption{MCfour}{% -\@MCfourtrue} - -\newif\if@PCfour -\DeclareOption{PCfour}{% -\@PCfourtrue} - -\newif\if@Royal -\DeclareOption{Royal}{% -\@Royaltrue} - -\newif\if@Crown -\DeclareOption{Crown}{% -\@Crowntrue} - -\newif\if@Review -\DeclareOption{Review}{% -\@Reviewtrue} - -\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} -\ProcessOptions -\LoadClass{article} - -\if@timesfont -\RequirePackage{times} -\usepackage[scaled=.95]{helvet} -\fi -\if@doublespace -\RequirePackage[onehalfspacing]{setspace} -\fi - -\RequirePackage{graphicx} -\RequirePackage{latexsym,ifthen,rotating,calc,textcase,booktabs,color,endnotes} -\RequirePackage{amsfonts,amssymb,amsbsy,amsmath,amsthm} -%\RequirePackage{bm} -\RequirePackage[errorshow]{tracefnt} - -\@twosidetrue -\flushbottom -\frenchspacing - -\let\sagesf\sf -\if@PCfour -\let\sagesf\rm -\fi - -%papersize={width,height} -\if@shortAfour -\usepackage[text={170.5mm,226mm},% -papersize={210mm,280mm},% -columnsep=12pt,% -headsep=21pt,% -centering]{geometry} -\usepackage{ftnright} -\fi - -%papersize={width,height} -\if@Afour -\usepackage[text={174mm,258mm},% -papersize={210mm,297mm},% -columnsep=12pt,% -headsep=21pt,% -centering]{geometry} -\usepackage{ftnright} -\fi - -%papersize={width,height} -\if@MCfour -\usepackage[text={151.5mm,196mm},% -papersize={189mm,246mm},% -columnsep=12pt,% -headsep=21pt,% -centering]{geometry} -\usepackage{ftnright} -\fi - -%papersize={width,height} -\if@PCfour -\usepackage[text={138mm,198mm},% -papersize={170mm,242mm},% -columnsep=12pt,% -headsep=21pt,% -centering]{geometry} -\usepackage{ftnright} -\fi - -%papersize={width,height}%single column -\if@Royal -\usepackage[text={124mm,185mm},% -papersize={156mm,234mm},% -columnsep=12pt,% -headsep=21pt,% -centering]{geometry} -\fi - -%papersize={width,height}%single column -\if@Crown -\usepackage[text={146.5mm,183mm},% -papersize={7.25in,9.5in},% -columnsep=12pt,% -headsep=21pt,% -centering]{geometry} -\fi - -%For Review Single column, 12pt -\if@Review -\usepackage[text={124mm,185mm},% -papersize={156mm,234mm},% -columnsep=12pt,% -headsep=21pt,% -centering]{geometry} -\renewcommand{\normalsize}{\fontsize{12}{14pt}\selectfont} -\fi - -\parindent 1em - -\hyphenpenalty=1000 -\pretolerance=8000 -\tolerance=9500 -\hbadness=8000 -\vbadness=9000 -\displaywidowpenalty=0 -\clubpenalty=10000 -\widowpenalty=10000 -\lefthyphenmin=3% -\righthyphenmin=3% -\brokenpenalty=10000% - -\thinmuskip = 3mu -\medmuskip = 4mu -\thickmuskip = 5mu - -\setcounter{topnumber}{10} -\def\topfraction{1} -\setcounter{bottomnumber}{10} -\def\bottomfraction{0.8} -\setcounter{totalnumber}{10} -\def\textfraction{0} -\renewcommand{\floatpagefraction}{0.95} -\setcounter{dbltopnumber}{10} -\renewcommand{\dblfloatpagefraction}{0.95} -\renewcommand{\dbltopfraction}{1} - -\renewcommand\small{% - \@setfontsize\small\@ixpt{10.5}% - \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@ - \abovedisplayshortskip \z@ \@plus2\p@ - \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@ - \def\@listi{\leftmargin\leftmargini - \topsep 4\p@ \@plus2\p@ \@minus2\p@ - %\parsep 2\p@ \@plus\p@ \@minus\p@ - \itemsep \parsep}% - \belowdisplayskip \abovedisplayskip -} -\newcommand{\refsize}{\fontsize{9}{12pt}\selectfont} -\renewcommand{\footnotesize}{\fontsize{8}{10pt}\selectfont} -\renewcommand{\scriptsize}{\fontsize{7.0}{8.5pt}\selectfont} -\renewcommand{\large}{\fontsize{12}{14pt}\selectfont} -\newcommand{\titlesize}{\fontsize{18.0}{20pt}\selectfont} - -\newbox\absbox -\def\abstract{\lrbox\absbox\minipage{\textwidth}% - \sagesf\normalsize% - \section*{\normalsize Abstract}\vskip -1.5mm% - } -\def\endabstract{\endminipage\endlrbox} - -\def\keywords#1{% - \gdef\@keywords{\begin{minipage}{\textwidth}{\normalsize\sagesf \textbf{Keywords}}\\ \parbox[t]{\textwidth}{#1}\end{minipage}}} -\let\@keywords\@empty - -\skip\footins 20pt plus 8pt -%\gdef\footnoterule{} -\def\footnoterule{\kern-3\p@ - \hrule \@width \columnwidth \kern 3mm} - -\renewcommand{\thefootnote}{\fnsymbol{footnote}} -\long\def\@makefntext#1{\parindent 1em% -\noindent{$\m@th^{\@thefnmark}$}#1} - -\newcommand{\email}[1]{% - \gdef\@email{% -\footnotetext[0]{\sagesf Email: #1}}} -\let\@email\@empty - -\def\corrauth#1{\gdef\@corrauth{% -\footnotetext[0]{\par\vskip-3pt\sagesf\noindent\textbf{Corresponding author:}\\ #1}}} -\let\@corrauth\@empty - -\def\affiliation#1{% - \gdef\@affiliation{% - \footnotetext[0]{\sagesf #1}}} -\let\@affiliation\@empty - -\def\affilnum#1{${}^{\text{{#1}}}$} - -\renewcommand\maketitle{\par - \begingroup - \if@twocolumn - \ifnum \col@number=\@ne - \@maketitle - \else - \twocolumn[\@maketitle]% - \fi - \else - \newpage - \global\@topnum\z@ % Prevents figures from going at top of page. - \@maketitle - \fi - \thispagestyle{title}\label{FirstPage}\@affiliation\@corrauth\@email% - \endgroup - %\setcounter{footnote}{0}% - \global\let\affiliation\relax - \global\let\thanks\relax - \global\let\maketitle\relax - \global\let\@maketitle\relax - \global\let\@thanks\@empty - \global\let\@author\@empty - \global\let\@date\@empty - \global\let\@title\@empty - \global\let\@affiliation\@empty - \global\let\title\relax - \global\let\author\relax - \global\let\date\relax - \global\let\and\relax -} -\def\@maketitle{% -\if@Royal -\vspace*{-20pt} -\fi -\if@Crown -\vspace*{-20pt} -\fi -\vspace*{-34pt}% -\null% -\begin{center} -\if@PCfour -\begin{rm} -\else -\begin{sf} -\fi -\begin{minipage}[t]{\textwidth-57.625mm} - \vskip 12.5pt% - {\raggedright\titlesize\textbf{\@title} \par}% - \vskip 1.5em% - \vskip 12.5mm% - \end{minipage}\hspace{15mm}\begin{minipage}[t]{42.625mm} -\hbox{}\scriptsize\journalname\\ -\hbox{}\volumenumber(\issuenumber):\startpage--\endpage\\ -\hbox{}\copyright The Author(s) \volumeyear\\ -\hbox{}Reprints and permission:\\ -\hbox{}sagepub.co.uk/journalsPermissions.nav\\ -\hbox{}DOI: 10.1177/ToBeAssigned\\ -\hbox{}www.sagepub.com/\\[2.3pt] -%\hbox{}\includegraphics[height=4mm]{SAGE_Logo} -\hbox{}{\fboxsep 1.5pt\framebox[14mm]{{\normalsize SAGE}}} -\end{minipage} -{\par\large% -\if@Royal - \vspace*{6mm} - \fi - \if@Crown - \vspace*{6mm} - \fi% - \lineskip .5em% - {\raggedright\textbf{\@author} - \par}} - \vskip 40pt% - {\noindent\usebox\absbox\par} - {\vspace{20pt}% - % - {\noindent\normalsize\@keywords}\par} - \if@PCfour - \end{rm} - \else - \end{sf} - \fi - \end{center} - \if@Royal - \vspace*{-4.5mm} - \fi - \if@Crown - \vspace*{-4.5mm} - \fi - \vspace{22pt} - \par% - } - -\def\startpage{\pageref{FirstPage}} -\def\endpage{\pageref{LastPage}} -\def\volumeyear{0000} -\def\volumenumber{XX} -\def\issuenumber{X} -\def\journalname{Journal Title} - -\def\runninghead#1{\markboth{{#1}}{}} - -\def\ps@title{% -\def\@oddhead{\parbox{\textwidth}{\mbox{}\\[-1pt]% -\noindent\rule{\textwidth}{0.5pt}% -}}% -\let\@evenhead\@oddhead -\def\@oddfoot{\parbox[t]{\textwidth}{% -{\scriptsize{\it Prepared using \textsf{\journalclass} [Version: \update]}}}} -\let\@evenfoot\@oddfoot} - -\def\ps@sagepage{% -\let\@mkboth\@gobbletwo -\def\@evenhead{\parbox{\textwidth}{% -\normalsize\sagesf\thepage\hfill\itshape\journalname\ \volumenumber(\issuenumber)\\[-6pt] -\noindent\rule{\textwidth}{0.25pt}}} -\def\@oddhead{\parbox{\textwidth}{% -\normalsize\sagesf{\itshape{\leftmark}}\hfill\thepage\\[-6pt] -\noindent\rule{\textwidth}{0.25pt}}} -\def\@evenfoot{\parbox[t]{\textwidth}{% -\scriptsize{\it Prepared using \textsf{\journalclass}}}} -\def\@oddfoot{\@evenfoot} -} - -%\renewcommand{\@seccntformat}[1]{{\csname the#1\endcsname.}\hspace{0.5em}} -\setcounter{secnumdepth}{-2} - -\newdimen\@bls -\@bls=\baselineskip - -\renewcommand\section{\@startsection {section}{1}{\z@}% - {1.2\@bls plus .3\@bls minus .1\@bls}% - {5pt\@afterindentfalse}% - {\sagesf\large\bfseries\raggedright}} -\renewcommand\subsection{\@startsection{subsection}{2}{\z@}% - {0.9\@bls plus .3\@bls minus .1\@bls}% - {4pt\@afterindentfalse}% - {\sagesf\large\itshape\raggedright}} -\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% - {0.5\@bls plus .3\@bls minus .1\@bls}% - {-0.5em\@afterindentfalse}% - {\sagesf\normalsize\itshape}} -\renewcommand\paragraph{\@startsection{paragraph}{4}{1em}% - {0.3\@bls plus .3\@bls minus .1\@bls}% - {-0.5em\@afterindentfalse}% - {\sagesf\normalsize\itshape}} - -\def\enumerate{\ifnum \@enumdepth >3 \@toodeep\else - \advance\@enumdepth \@ne - \edef\@enumctr{enum\romannumeral\the\@enumdepth}\list - {\csname label\@enumctr\endcsname}{\usecounter - {\@enumctr}\itemsep 0pt\parsep 0pt - \def\makelabel##1{\hss\llap{##1}}}\fi} - -\let\endenumerate =\endlist - -\def\itemize{\ifnum \@itemdepth >3 \@toodeep\else \advance\@itemdepth \@ne -\edef\@itemitem{labelitem\romannumeral\the\@itemdepth}% -\list{\csname\@itemitem\endcsname}{\itemsep 0pt\parsep 0pt -\def\makelabel##1{\hss\llap{##1}}}\fi} - -\let\enditemize =\endlist - -\RequirePackage{caption} -\DeclareCaptionLabelSeparator{sageperiod}{.\hspace*{1ex}} -\captionsetup[figure]{font=small,labelfont={sf,bf},textfont=sf,labelsep=sageperiod,justification=raggedright,singlelinecheck=false} -\captionsetup[table]{position=top,labelsep=sageperiod,font=small,labelfont={sf,bf},textfont=sf,justification=raggedright,skip=2pt,singlelinecheck=false} - -\def\@begintheorem#1#2[#3]{% - \deferred@thm@head{\the\thm@headfont \thm@indent - \@ifempty{#1}{\let\thmname\@gobble}{\let\thmname\@iden}% - \@ifempty{#2}{\let\thmnumber\@gobble}{\let\thmnumber\@iden}% - \@ifempty{#3}{\let\thmnote\@gobble}{\let\thmnote\@iden}% - \thm@swap\swappedhead\thmhead{#1}{#2\the\thm@headpunct}{#3}% - %\the\thm@headpunct - \thmheadnl % possibly a newline. - \hskip\thm@headsep - }% - \ignorespaces} - -\def\thmhead@plain#1#2#3{% - \thmname{#1}\thmnumber{\@ifnotempty{#1}{ }{#2}}% - \thmnote{ {\the\thm@notefont #3. }}} - -\newenvironment{acks}[1]% -{\subsection*{\normalsize\sagesf\bfseries Acknowledgements}\begin{refsize}\noindent #1}% -{\end{refsize}} - -\newenvironment{funding}[1]% -{\subsection*{\normalsize\sagesf\bfseries Funding}\begin{refsize}\noindent #1}% -{\end{refsize}} - -\newenvironment{sm}[1]% -{\subsection*{\normalsize\sagesf\bfseries Supplemental material}\begin{refsize}\noindent #1}% -{\end{refsize}} - -\newenvironment{dci}[1]% -{\subsection*{\normalsize\sagesf\bfseries Declaration of conflicting interests}\begin{refsize}\noindent #1}% -{\end{refsize}} - -\newenvironment{biog}[1]% -{\subsection*{\normalsize\sagesf\bfseries Author biography}\begin{refsize}\noindent #1}% -{\end{refsize}} - -\newenvironment{biogs}[1]% -{\subsection*{\normalsize\sagesf\bfseries Author Biographies}\begin{refsize}\noindent #1}% -{\end{refsize}} - -%Endnotes -\def\enotesize{\refsize} - -\def\enoteheading{\subsection*{\normalsize\sagesf\bfseries\notesname}% - \mbox{}\par\vskip-\baselineskip} - -%\renewcommand\makeenmark{\theenmark.\hspace{0.75em}} - -\renewcommand{\enoteformat}{% - \rightskip\z@ \leftskip15pt \parindent=0pt - \leavevmode{\makebox[0cm][r]{% - \hbox to15pt{\@theenmark.\hfill}}}} - - -\newtheoremstyle{sage} -{6pt plus 2pt minus 2pt}% space above -{6pt plus 2pt minus 2pt}% space below -{\it}% Body font -{}% Indent amount -{\bfseries}% Theorem head font -{.}% Punctuation after theorem head -{0.75em}% Space after theorem head -{}% Theorem head spec - -\theoremstyle{sage} - -\renewenvironment{proof}[1][\proofname]{\par - %AS\pushQED{\qed}% - \normalfont \topsep6\p@\@plus6\p@\relax - \trivlist - \item[\hskip\labelsep - \bfseries - #1\@addpunct{.}]\ignorespaces -}{% - %AS\popQED - \endtrivlist\@endpefalse -} - -%\renewenvironment{thebibliography}{% -%\section*{\normalsize\refname} -%\list{}{\topsep=0\p@\parsep=0\p@ -%\partopsep=0\p@\itemsep=1\p@\labelsep=0\p@\itemindent=-20\p@ -%\labelwidth=0\p@\leftmargin=20\p@ -%}\refsize\rm -%\def\newblock{\ } -%\sloppy\clubpenalty4000\widowpenalty4000 -%\sfcode`\.=1000\relax}{\endlist} - -\if@sageh -\usepackage{natbib} -\bibpunct{(}{)}{;}{}{}{,} -\setlength{\bibsep}{1pt} -\setlength{\bibhang}{16pt} -\renewcommand{\bibfont}{\refsize} -\renewcommand\refname{{\normalsize References}} -\fi - -\if@sagev -\usepackage[super,sort&compress,comma]{natbib} -%\bibpunct{(}{)}{;}{}{}{,} -\renewcommand{\bibnumfmt}[1]{#1.} -\setlength{\bibsep}{0pt} -%\setlength{\bibhang}{20pt} -\renewcommand{\bibfont}{\refsize} -\renewcommand\refname{{\normalsize References}} -\fi - -\if@sageapa -%\usepackage{apalike} -\usepackage{mslapa} -\setlength{\bibhang}{16pt} -\@ifundefined{chapter}{\def\thebibliography#1{\section*{\refname}\list - {\relax}{\setlength{\labelsep}{0em} - \setlength{\itemindent}{-\bibhang} - \setlength{\leftmargin}{\bibhang} - \setlength{\itemsep}{0pt} - \parsep 0pt}%AS - \def\newblock{\hskip .11em plus .33em minus .07em} - \sloppy\clubpenalty4000\widowpenalty4000 - \sfcode`\.=1000\relax}}% -\fi - -\AtEndDocument{% -\label{LastPage}} - -\pagestyle{sagepage} - -\if@shortAfour -\twocolumn -\fi - -\if@Afour -\twocolumn -\fi - -\if@MCfour -\twocolumn -\fi - -\if@PCfour -\twocolumn -\fi - -\normalsize -\sloppy