SHARE
TWEET

Untitled

a guest Aug 20th, 2017 475 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. %%
  2. %% This is file `achemso.bst',
  3. %% generated with the docstrip utility.
  4. %%
  5. %% The original source files were:
  6. %%
  7. %% achemso.dtx  (with options: `bst')
  8. %% ----------------------------------------------------------------
  9. %% achemso --- Support for submissions to American Chemical Society
  10. %%   journals
  11. %% E-mail: joseph.wright@morningstar2.co.uk
  12. %% Released under the LaTeX Project Public License v1.3c or later
  13. %% See http://www.latex-project.org/lppl.txt
  14. %% ----------------------------------------------------------------
  15. %%
  16.  
  17. ENTRY
  18.   {
  19.     address
  20.     author
  21.     booktitle
  22.     chapter
  23.     ctrl-article-title
  24.     ctrl-chapter-title
  25.     ctrl-doi
  26.     ctrl-etal-firstonly
  27.     ctrl-etal-number
  28.     ctrl-use-title
  29.     doi
  30.     edition
  31.     editor
  32.     howpublished
  33.     institution
  34.     journal
  35.     key
  36.     maintitle
  37.     note
  38.     number
  39.     organization
  40.     pages
  41.     publisher
  42.     school
  43.     series
  44.     title
  45.     type
  46.     url
  47.     version
  48.     volume
  49.     year
  50.   }
  51.   { }
  52.   {
  53.     label
  54.     short.names
  55.   }
  56.  
  57.  
  58. FUNCTION { and } {
  59.     { }
  60.     {
  61.       pop$
  62.       #0
  63.     }
  64.   if$
  65. }
  66.  
  67. FUNCTION { not } {
  68.     { #0 }
  69.     { #1 }
  70.   if$
  71. }
  72.  
  73. FUNCTION { or } {
  74.     {
  75.       pop$
  76.       #1
  77.     }
  78.     { }
  79.   if$
  80. }
  81.  
  82. FUNCTION { xor } {
  83.     { not }
  84.     { }
  85.   if$
  86. }
  87.  
  88.  
  89. FUNCTION { chr.to.value.error } {
  90.   #48 +
  91.   int.to.chr$
  92.   "'" swap$ *
  93.   "'" *
  94.   " is not a number: treated as zero." *
  95.   warning$
  96.   #0
  97. }
  98.  
  99. FUNCTION { chr.to.value } {
  100.   chr.to.int$ #48 -
  101.   duplicate$
  102.   #0 <
  103.     { chr.to.value.error }
  104.     {
  105.       duplicate$
  106.       #9 >
  107.         { chr.to.value.error }
  108.         { }
  109.       if$
  110.     }
  111.   if$
  112. }
  113.  
  114. STRINGS {
  115.   extract.input.str
  116.   extract.output.str
  117. }
  118.  
  119. FUNCTION { is.a.digit } {
  120.   duplicate$
  121.   "" =
  122.     {
  123.       pop$
  124.       #0
  125.     }
  126.     {
  127.       chr.to.int$
  128.       #48 -
  129.       duplicate$
  130.      #0 < swap$ #9 > or not
  131.    }
  132.   if$
  133. }
  134.  
  135. FUNCTION{ is.a.number } {
  136.   {
  137.     duplicate$
  138.     #1 #1 substring$
  139.     is.a.digit
  140.   }
  141.     { #2 global.max$ substring$ }
  142.   while$
  143.   "" =
  144. }
  145.  
  146. FUNCTION { extract.number } {
  147.   duplicate$
  148.   'extract.input.str :=
  149.   "" 'extract.output.str :=
  150.   { extract.input.str empty$ not }
  151.     {
  152.       extract.input.str #1 #1 substring$
  153.       extract.input.str #2 global.max$ substring$ 'extract.input.str :=
  154.       duplicate$
  155.       is.a.number
  156.         { extract.output.str swap$ * 'extract.output.str := }
  157.         {
  158.           pop$
  159.           "" 'extract.input.str :=
  160.         }
  161.       if$
  162.     }
  163.   while$
  164.   extract.output.str empty$
  165.     { }
  166.     {
  167.       pop$
  168.       extract.output.str
  169.     }
  170.   if$
  171. }
  172.  
  173. FUNCTION { field.or.null } {
  174.   duplicate$
  175.   empty$
  176.     {
  177.       pop$
  178.       ""
  179.     }
  180.     { }
  181.   if$
  182. }
  183.  
  184. INTEGERS {
  185.   multiply.a.int
  186.   multiply.b.int
  187. }
  188.  
  189. FUNCTION { multiply } {
  190.   'multiply.a.int :=
  191.   'multiply.b.int :=
  192.   multiply.b.int #0 <
  193.     {
  194.       #-1
  195.       #0 multiply.b.int - 'multiply.b.int :=
  196.     }
  197.     { #1 }
  198.   if$
  199.   #0
  200.   { multiply.b.int #0 > }
  201.     {
  202.       multiply.a.int +
  203.       multiply.b.int #1 - 'multiply.b.int :=
  204.     }
  205.   while$
  206.   swap$
  207.     { }
  208.     { #0 swap$ - }
  209.   if$
  210. }
  211.  
  212. INTEGERS { str.conversion.int }
  213.  
  214. FUNCTION { str.to.int.aux.ii } {
  215.   {
  216.     duplicate$
  217.     empty$ not
  218.   }
  219.     {
  220.       swap$
  221.       #10 multiply 'str.conversion.int :=
  222.       duplicate$
  223.       #1 #1 substring$
  224.       chr.to.value
  225.       str.conversion.int +
  226.       swap$
  227.       #2 global.max$ substring$
  228.     }
  229.   while$
  230.   pop$
  231. }
  232.  
  233. FUNCTION { str.to.int.aux.i } {
  234.   duplicate$
  235.   #1 #1 substring$
  236.   "-" =
  237.    {
  238.       #1 swap$
  239.       #2 global.max$ substring$
  240.     }
  241.     {
  242.       #0 swap$
  243.     }
  244.   if$
  245.   #0
  246.   swap$
  247.   str.to.int.aux.ii
  248.   swap$
  249.     { #0 swap$ - }
  250.     { }
  251.   if$
  252. }
  253.  
  254. FUNCTION { str.to.int } {
  255.   duplicate$
  256.   empty$
  257.     {
  258.       pop$
  259.       #0
  260.     }
  261.     { str.to.int.aux.i }
  262.   if$
  263. }
  264.  
  265. FUNCTION { tie.or.space.connect } {
  266.  duplicate$
  267.  text.length$ #3 <
  268.     { "~" }
  269.     { " " }
  270.   if$
  271.   swap$ * *
  272. }
  273.  
  274. FUNCTION { yes.no.to.bool } {
  275.   duplicate$
  276.   empty$
  277.     {
  278.       pop$
  279.       #0
  280.     }
  281.     {
  282.       "l" change.case$
  283.       "yes" =
  284.         { #1 }
  285.         { #0 }
  286.       if$
  287.     }
  288.   if$
  289. }
  290.  
  291.  
  292. FUNCTION { bold } {
  293.   duplicate$
  294.   empty$
  295.     {
  296.       pop$
  297.       ""
  298.     }
  299.     { "\textbf{" swap$ * "}" * }
  300.   if$
  301. }
  302.  
  303. FUNCTION { emph } {
  304.   duplicate$
  305.   empty$
  306.     {
  307.       pop$
  308.       ""
  309.     }
  310.     { "\emph{" swap$ * "}" * }
  311.   if$
  312. }
  313.  
  314. FUNCTION { paren } {
  315.   duplicate$
  316.   empty$
  317.     {
  318.       pop$
  319.       ""
  320.     }
  321.     { "(" swap$ * ")" * }
  322.   if$
  323. }
  324.  
  325.  
  326. FUNCTION { add.comma } { ", " * }
  327.  
  328. FUNCTION { add.colon } {  ": " * }
  329.  
  330. FUNCTION { add.period } { add.period$ " " * }
  331.  
  332. FUNCTION { add.semicolon } { "; " * }
  333.  
  334. FUNCTION { add.space } { " " * }
  335.  
  336.  
  337. FUNCTION { bbl.and }     { "and" }
  338.  
  339. FUNCTION { bbl.chapter } { "Chapter" }
  340.  
  341. FUNCTION { bbl.doi }     { "DOI:" }
  342.  
  343. FUNCTION { bbl.editor }  { "Ed." }
  344.  
  345. FUNCTION { bbl.editors } { "Eds." }
  346.  
  347. FUNCTION { bbl.edition } { "ed." }
  348.  
  349. FUNCTION { bbl.etal }    { "\latin{et~al.}" }
  350.  
  351. FUNCTION { bbl.in }      { "In" }
  352.  
  353. FUNCTION { bbl.inpress } { "in press" }
  354.  
  355. FUNCTION { bbl.msc }     { "M.Sc.\ thesis" }
  356.  
  357. FUNCTION { bbl.page }    { "p" }
  358.  
  359. FUNCTION { bbl.pages }   { "pp" }
  360.  
  361. FUNCTION { bbl.phd }     { "Ph.D.\ thesis" }
  362.  
  363. FUNCTION { bbl.version } { "version" }
  364.  
  365. FUNCTION { bbl.volume }  { "Vol." }
  366.  
  367.  
  368. STRINGS { pages.str }
  369.  
  370. FUNCTION { hyphen.to.dash } {
  371.   'pages.str :=
  372.   ""
  373.   { pages.str empty$ not }
  374.     {
  375.       pages.str #1 #1 substring$
  376.       "-" =
  377.         {
  378.           "--" *
  379.           {
  380.             pages.str #1 #1 substring$
  381.             "-" =
  382.           }
  383.             { pages.str #2 global.max$ substring$ 'pages.str := }
  384.           while$
  385.         }
  386.         {
  387.           pages.str #1 #1 substring$
  388.           *
  389.           pages.str #2 global.max$ substring$ 'pages.str :=
  390.         }
  391.       if$
  392.     }
  393.   while$
  394. }
  395.  
  396. INTEGERS { multiresult.bool }
  397.  
  398. FUNCTION { multi.page.check } {
  399.   'pages.str :=
  400.   #0 'multiresult.bool :=
  401.   {
  402.     multiresult.bool not
  403.     pages.str empty$ not
  404.     and
  405.   }
  406.     {
  407.       pages.str #1 #1 substring$
  408.       duplicate$
  409.       "-" = swap$ duplicate$
  410.       "," = swap$
  411.       "+" =
  412.       or or
  413.         { #1 'multiresult.bool := }
  414.         { pages.str #2 global.max$ substring$ 'pages.str := }
  415.       if$
  416.     }
  417.   while$
  418.   multiresult.bool
  419. }
  420.  
  421.  
  422. INTEGERS {
  423.   current.name.int
  424.   names.separate.comma
  425.   names.separate.semicolon
  426.   names.separate.comma.bool
  427.   remaining.names.int
  428.   total.names.int
  429. }
  430.  
  431. STRINGS {
  432.   current.name.str
  433.   names.str
  434. }
  435.  
  436. FUNCTION { full.format.names } {
  437.   'names.str :=
  438.   #1 'current.name.int :=
  439.   names.str num.names$ 'remaining.names.int :=
  440.   { remaining.names.int #0 > }
  441.     {
  442.       names.str current.name.int "{vv~}{ll}" format.name$
  443.       current.name.int #1 >
  444.         {
  445.           swap$ add.comma swap$
  446.           remaining.names.int #1 >
  447.             { }
  448.             {
  449.               duplicate$
  450.               "others" =
  451.                 { bbl.etal }
  452.                 { bbl.and }
  453.               if$
  454.               add.space swap$ *
  455.             }
  456.           if$
  457.           *
  458.         }
  459.         { }
  460.       if$
  461.       remaining.names.int #1 - 'remaining.names.int :=
  462.       current.name.int #1 + 'current.name.int :=
  463.     }
  464.   while$
  465. }
  466.  
  467. FUNCTION { full.author } {
  468.   author empty$
  469.     { "" }
  470.     { author full.format.names }
  471.   if$
  472. }
  473.  
  474. FUNCTION { full.author.editor } {
  475.   author empty$
  476.     {
  477.       editor empty$
  478.         { "" }
  479.         { editor full.format.names }
  480.       if$
  481.     }
  482.     { author full.format.names }
  483.   if$
  484. }
  485.  
  486. FUNCTION { full.editor } {
  487.   editor empty$
  488.     { "" }
  489.     { editor full.format.names }
  490.   if$
  491. }
  492.  
  493. FUNCTION { short.format.names } {
  494.   'names.str :=
  495.   names.str #1 "{vv~}{ll}" format.name$
  496.   names.str num.names$
  497.   duplicate$
  498.   #2 >
  499.     {
  500.       pop$
  501.       add.space bbl.etal *
  502.     }
  503.     {
  504.       #2 <
  505.         { }
  506.         {
  507.           names.str #2 "{ff }{vv }{ll}{ jj}" format.name$
  508.           "others" =
  509.             { add.space bbl.etal * }
  510.             {
  511.               add.space
  512.               bbl.and add.space
  513.               *
  514.               names.str #2 "{vv~}{ll}" format.name$
  515.               *
  516.             }
  517.           if$
  518.         }
  519.       if$
  520.     }
  521.   if$
  522. }
  523.  
  524. FUNCTION { short.author.key } {
  525.   author empty$
  526.     {
  527.       key empty$
  528.         { cite$ #1 #3 substring$ }
  529.         { key }
  530.       if$
  531.     }
  532.     { author short.format.names }
  533.   if$
  534. }
  535.  
  536. FUNCTION { short.author.editor.key } {
  537.   author empty$
  538.     {
  539.       editor empty$
  540.         {
  541.           key empty$
  542.             { cite$ #1 #3 substring$ }
  543.             { key }
  544.           if$
  545.         }
  546.         { editor short.format.names }
  547.       if$
  548.     }
  549.     { author short.format.names }
  550.   if$
  551. }
  552.  
  553. FUNCTION { short.author.key.organization } {
  554.   author empty$
  555.     {
  556.       key empty$
  557.         {
  558.           organization empty$
  559.             { cite$ #1 #3 substring$ }
  560.             {
  561.               organization #1 #4 substring$
  562.               "The " =
  563.                 { organization }
  564.                 { organization #5 global.max$ substring$ }
  565.               if$
  566.               #3 text.prefix$
  567.             }
  568.           if$
  569.         }
  570.         { key }
  571.       if$
  572.     }
  573.     { author short.format.names }
  574.   if$
  575. }
  576.  
  577. FUNCTION { short.editor.key.organization } {
  578.   editor empty$
  579.     {
  580.       key empty$
  581.         {
  582.           organization empty$
  583.             { cite$ #1 #3 substring$ }
  584.             {
  585.               organization #1 #4 substring$
  586.               "The " =
  587.                 { organization }
  588.                 { organization #5 global.max$ substring$ }
  589.               if$
  590.               #3 text.prefix$
  591.             }
  592.           if$
  593.         }
  594.         { key }
  595.       if$
  596.     }
  597.     { editor short.format.names }
  598.   if$
  599. }
  600.  
  601. FUNCTION { calculate.full.names } {
  602.   type$ "book" =
  603.   type$ "inbook" =
  604.   or
  605.     { full.author.editor }
  606.     {
  607.       type$ "proceedings" =
  608.         { full.editor }
  609.         { full.author }
  610.       if$
  611.     }
  612.   if$
  613. }
  614.  
  615. FUNCTION { calculate.short.names } {
  616.   type$ "book" =
  617.   type$ "inbook" =
  618.   or
  619.     { short.author.editor.key }
  620.     {
  621.       type$ "proceedings" =
  622.         { short.editor.key.organization }
  623.         {
  624.           type$ "manual" =
  625.             { short.author.key.organization }
  626.             { short.author.key }
  627.           if$
  628.         }
  629.       if$
  630.     }
  631.   if$
  632.   'short.names :=
  633. }
  634.  
  635. FUNCTION { calculate.names } {
  636.   calculate.short.names
  637.   short.names
  638.   year empty$
  639.     { "()" }
  640.     { "(" year * ")" * }
  641.   if$
  642.   *
  643.   'label :=
  644. }
  645.  
  646.  
  647. INTEGERS { entries.int }
  648.  
  649. FUNCTION { initialize.count.entries } {
  650.   #0 'entries.int  :=
  651. }
  652.  
  653. FUNCTION { count.entries } {
  654.   entries.int #1 + 'entries.int  :=
  655. }
  656.  
  657.  
  658. FUNCTION { begin.bib } {
  659.   "achemso 2017/05/18 v3.10i" top$
  660.   preamble$ empty$
  661.     { }
  662.     {
  663.       preamble$ write$
  664.       newline$
  665.     }
  666.   if$
  667.   "\providecommand{\latin}[1]{#1}" write$
  668.   newline$
  669.   "\makeatletter" write$
  670.   newline$
  671.   "\providecommand{\doi}" write$
  672.   newline$
  673.   "  {\begingroup\let\do\@makeother\dospecials" write$
  674.   newline$
  675.   "  \catcode`\{=1 \catcode`\}=2 \doi@aux}" write$
  676.   newline$
  677.   "\providecommand{\doi@aux}[1]{\endgroup\texttt{#1}}" write$
  678.    newline$
  679.   "\makeatother" write$
  680.   newline$
  681.   "\providecommand*\mcitethebibliography{\thebibliography}" write$
  682.   newline$
  683.   "\csname @ifundefined\endcsname{endmcitethebibliography}" write$
  684.   "  {\let\endmcitethebibliography\endthebibliography}{}" write$
  685.   newline$
  686.   "\begin{mcitethebibliography}{"
  687.     entries.int int.to.str$  * "}" * write$
  688.   newline$
  689.   "\providecommand*\natexlab[1]{#1}" write$
  690.   newline$
  691.   "\providecommand*\mciteSetBstSublistMode[1]{}" write$
  692.   newline$
  693.   "\providecommand*\mciteSetBstMaxWidthForm[2]{}" write$
  694.   newline$
  695.   "\providecommand*\mciteBstWouldAddEndPuncttrue" write$
  696.   newline$
  697.   "  {\def\EndOfBibitem{\unskip.}}" write$
  698.   newline$
  699.   "\providecommand*\mciteBstWouldAddEndPunctfalse" write$
  700.   newline$
  701.   "  {\let\EndOfBibitem\relax}" write$
  702.   newline$
  703.   "\providecommand*\mciteSetBstMidEndSepPunct[3]{}" write$
  704.   newline$
  705.   "\providecommand*\mciteSetBstSublistLabelBeginEnd[3]{}" write$
  706.   newline$
  707.   "\providecommand*\EndOfBibitem{}" write$
  708.   newline$
  709.   "\mciteSetBstSublistMode{f}" write$
  710.   newline$
  711.   "\mciteSetBstMaxWidthForm{subitem}{(\alph{mcitesubitemcount})}" write$
  712.   newline$
  713.   "\mciteSetBstSublistLabelBeginEnd" write$
  714.   newline$
  715.   "  {\mcitemaxwidthsubitemform\space}" write$
  716.   newline$
  717.   "  {\relax}" write$
  718.   newline$
  719.   "  {\relax}" write$
  720.   newline$
  721. }
  722.  
  723. FUNCTION { end.bib } {
  724.   newline$
  725.   "\end{mcitethebibliography}" write$
  726.   newline$
  727. }
  728.  
  729.  
  730. INTEGERS {
  731.   ctrl.article.title.bool
  732.   ctrl.chapter.title.bool
  733.   ctrl.doi.bool
  734.   ctrl.etal.firstonly.bool
  735.   ctrl.etal.number.int
  736.   link.doi
  737. }
  738.  
  739. FUNCTION { initialize.control.values } {
  740.   #1 'link.doi :=
  741.   #1 'ctrl.article.title.bool :=
  742.   #0 'ctrl.chapter.title.bool :=
  743.   #1 'ctrl.doi.bool :=
  744.   #1 'ctrl.etal.firstonly.bool :=
  745.   #15 'ctrl.etal.number.int :=
  746. }
  747.  
  748. FUNCTION { control } {
  749.   ctrl-article-title  yes.no.to.bool 'ctrl.article.title.bool  :=
  750.   ctrl-chapter-title  yes.no.to.bool 'ctrl.chapter.title.bool  :=
  751.   ctrl-doi            yes.no.to.bool 'ctrl.doi.bool            :=
  752.   ctrl-etal-firstonly yes.no.to.bool 'ctrl.etal.firstonly.bool :=
  753.   ctrl-etal-number    str.to.int     'ctrl.etal.number.int     :=
  754.   ctrl-use-title empty$
  755.     'skip$
  756.     { ctrl-use-title yes.no.to.bool 'ctrl.article.title.bool  := }
  757.   if$
  758. }
  759.  
  760.  
  761. INTEGERS {
  762.   next.punct.comma
  763.   next.punct.period
  764.   next.punct.semicolon
  765.   next.punct.space
  766. }
  767.  
  768. FUNCTION { initialize.tracker } {
  769.   #0 'next.punct.comma     :=
  770.   #1 'next.punct.period    :=
  771.   #2 'next.punct.semicolon :=
  772.   #3 'next.punct.space     :=
  773. }
  774.  
  775. INTEGERS { next.punct.int }
  776.  
  777. FUNCTION { output } {
  778.   swap$
  779.   duplicate$ empty$
  780.     { pop$ }
  781.     {
  782.       next.punct.int next.punct.space =
  783.         { add.space }
  784.         {
  785.           next.punct.int next.punct.comma =
  786.             { add.comma }
  787.             {
  788.               next.punct.int next.punct.semicolon =
  789.                 { add.semicolon }
  790.                 { add.period }
  791.               if$
  792.             }
  793.           if$
  794.         }
  795.       if$
  796.       write$
  797.     }
  798.   if$
  799.   next.punct.comma 'next.punct.int :=
  800. }
  801.  
  802.  
  803. FUNCTION { begin.bibitem } {
  804.   newline$
  805.   "\bibitem" write$
  806.   label
  807.   calculate.full.names
  808.   duplicate$
  809.   short.names =
  810.     { pop$ }
  811.     { * }
  812.   if$
  813.   "[" swap$ * "]" * write$
  814.   "{" cite$ * "}" * write$
  815.   newline$
  816.   ""
  817.   next.punct.comma 'next.punct.int :=
  818. }
  819.  
  820. INTEGERS { add.period.length.int }
  821.  
  822. FUNCTION { would.add.period } {
  823.   duplicate$
  824.   add.period$
  825.   text.length$ 'add.period.length.int :=
  826.   duplicate$
  827.   text.length$
  828.   add.period.length.int =
  829.     { #0 }
  830.     { #1 }
  831.   if$
  832. }
  833.  
  834. FUNCTION { end.bibitem } {
  835.   would.add.period
  836.     {
  837.       "\relax" * write$
  838.       newline$
  839.       "\mciteBstWouldAddEndPuncttrue" write$
  840.       newline$
  841.       "\mciteSetBstMidEndSepPunct{\mcitedefaultmidpunct}" write$
  842.       newline$
  843.       "{\mcitedefaultendpunct}{\mcitedefaultseppunct}\relax"
  844.     }
  845.     {
  846.       "\relax" * write$
  847.       newline$
  848.       "\mciteBstWouldAddEndPunctfalse" write$
  849.        newline$
  850.       "\mciteSetBstMidEndSepPunct{\mcitedefaultmidpunct}" write$
  851.       newline$
  852.       "{}{\mcitedefaultseppunct}\relax"
  853.     }
  854.   if$
  855.   write$
  856.   newline$
  857.   "\EndOfBibitem" write$
  858. }
  859.  
  860.  
  861. FUNCTION { initialize.name.separator } {
  862.   #1 'names.separate.comma     :=
  863.   #0 'names.separate.semicolon :=
  864. }
  865.  
  866. FUNCTION { format.names.loop } {
  867.   { remaining.names.int #0 > }
  868.     {
  869.       names.str current.name.int "{vv~}{ll,}{~f.}{,~jj}" format.name$
  870.       duplicate$
  871.       'current.name.str :=
  872.       current.name.int #1 >
  873.         {
  874.           duplicate$
  875.           "others," =
  876.             {
  877.               bbl.etal
  878.               add.space
  879.               remaining.names.int #1 - 'remaining.names.int :=
  880.             }
  881.             {
  882.               swap$
  883.               names.separate.comma.bool
  884.                 { add.comma }
  885.                 { add.semicolon }
  886.               if$
  887.               swap$
  888.               *
  889.             }
  890.           if$
  891.         }
  892.         { }
  893.       if$
  894.       remaining.names.int #1 - 'remaining.names.int :=
  895.       current.name.int #1 + 'current.name.int :=
  896.     }
  897.   while$
  898. }
  899.  
  900. FUNCTION { format.names.all } {
  901.   total.names.int 'remaining.names.int :=
  902.   format.names.loop
  903. }
  904.  
  905. FUNCTION { format.names.etal } {
  906.   ctrl.etal.firstonly.bool
  907.     { #1 'remaining.names.int := }
  908.     { ctrl.etal.number.int 'remaining.names.int := }
  909.   if$
  910.   format.names.loop
  911.   current.name.str "others," =
  912.     { }
  913.     {
  914.       add.space
  915.       bbl.etal
  916.       add.space
  917.       *
  918.     }
  919.   if$
  920. }
  921.  
  922. FUNCTION { format.names } {
  923.   'names.separate.comma.bool :=
  924.   'names.str :=
  925.   #1 'current.name.int :=
  926.   names.str num.names$ 'total.names.int :=
  927.   total.names.int ctrl.etal.number.int >
  928.     {
  929.       ctrl.etal.number.int #0 =
  930.         { format.names.all }
  931.         { format.names.etal }
  932.       if$
  933.     }
  934.     { format.names.all }
  935.   if$
  936. }
  937.  
  938.  
  939. FUNCTION { bbl.first }  { "1st" }
  940.  
  941. FUNCTION { bbl.second } { "2nd" }
  942.  
  943. FUNCTION { bbl.third }  { "3rd" }
  944.  
  945. FUNCTION { bbl.fourth } { "4th" }
  946.  
  947. FUNCTION { bbl.fifth }  { "5th" }
  948.  
  949. FUNCTION { bbl.st }     { "st" }
  950.  
  951. FUNCTION { bbl.nd }     { "nd" }
  952.  
  953. FUNCTION { bbl.rd }     { "rd" }
  954.  
  955. FUNCTION { bbl.th }     { "th" }
  956.  
  957. STRINGS {
  958.   ord.input.str
  959.   ord.output.str
  960. }
  961.  
  962. FUNCTION { make.ordinal } {
  963.   duplicate$
  964.   "1" swap$
  965.   *
  966.   #-2 #1 substring$
  967.   "1" =
  968.     {
  969.       bbl.th *
  970.     }
  971.     {
  972.       duplicate$
  973.       #-1 #1 substring$
  974.       duplicate$
  975.       "1" =
  976.         {
  977.           pop$
  978.           bbl.st *
  979.         }
  980.         {
  981.           duplicate$
  982.           "2" =
  983.             {
  984.               pop$
  985.               bbl.nd *
  986.             }
  987.             {
  988.               "3" =
  989.                 { bbl.rd * }
  990.                 { bbl.th * }
  991.               if$
  992.             }
  993.           if$
  994.         }
  995.       if$
  996.     }
  997.   if$
  998. }
  999.  
  1000. FUNCTION { convert.to.ordinal } {
  1001.   extract.number
  1002.   "l" change.case$ 'ord.input.str :=
  1003.   ord.input.str "first" = ord.input.str "1" = or
  1004.     { bbl.first 'ord.output.str := }
  1005.     {
  1006.       ord.input.str "second" = ord.input.str "2" = or
  1007.         { bbl.second 'ord.output.str := }
  1008.         {
  1009.           ord.input.str "third" = ord.input.str "3" = or
  1010.             { bbl.third 'ord.output.str := }
  1011.             {
  1012.               ord.input.str "fourth" = ord.input.str "4" = or
  1013.                 { bbl.fourth 'ord.output.str := }
  1014.                 {
  1015.                   ord.input.str "fifth" = ord.input.str "5" = or
  1016.                     { bbl.fifth 'ord.output.str := }
  1017.                     {
  1018.                       ord.input.str #1 #1 substring$
  1019.                       is.a.number
  1020.                         { ord.input.str make.ordinal }
  1021.                         { ord.input.str }
  1022.                       if$
  1023.                       'ord.output.str :=
  1024.                     }
  1025.                    if$
  1026.                 }
  1027.               if$
  1028.             }
  1029.           if$
  1030.         }
  1031.       if$
  1032.     }
  1033.   if$
  1034.   ord.output.str
  1035. }
  1036.  
  1037.  
  1038. FUNCTION { format.address } {
  1039.   address empty$
  1040.     { }
  1041.     {
  1042.       address
  1043.       output
  1044.     }
  1045.   if$
  1046. }
  1047.  
  1048. FUNCTION { format.authors } {
  1049.   author empty$
  1050.     { }
  1051.     {
  1052.       author names.separate.semicolon format.names
  1053.       output
  1054.       next.punct.space 'next.punct.int :=
  1055.     }
  1056.   if$
  1057. }
  1058.  
  1059. FUNCTION { format.editors } {
  1060.   editor empty$
  1061.     { }
  1062.     {
  1063.       editor names.separate.comma format.names
  1064.       add.comma
  1065.       editor num.names$ #1 >
  1066.         { bbl.editors }
  1067.         { bbl.editor }
  1068.       if$
  1069.       *
  1070.       output
  1071.       next.punct.semicolon 'next.punct.int :=
  1072.     }
  1073.   if$
  1074. }
  1075.  
  1076. FUNCTION { format.authors.or.editors } {
  1077.   author empty$
  1078.     { format.editors }
  1079.     { format.authors }
  1080.   if$
  1081.   next.punct.space 'next.punct.int :=
  1082. }
  1083.  
  1084. FUNCTION { format.chapter } {
  1085.   chapter empty$
  1086.     { }
  1087.     {
  1088.       bbl.chapter add.space
  1089.       chapter
  1090.       *
  1091.       output
  1092.     }
  1093.   if$
  1094. }
  1095.  
  1096. % FUNCTION { format.doi } {
  1097. %   doi empty$
  1098. %     'skip$
  1099. %     {
  1100. %       bbl.doi add.space
  1101. %       "\doi{" * doi * "}" *
  1102. %       output
  1103. %     }
  1104. %   if$
  1105. % }
  1106.  
  1107. FUNCTION {format.doi}
  1108. { ctrl.doi.bool
  1109.     { doi empty$
  1110.         'skip$
  1111.         {
  1112.           link.doi
  1113.             {
  1114.               "\href{http://dx.doi.org/"
  1115.               doi *
  1116.               "}{" *
  1117.               bbl.doi doi tie.or.space.connect *
  1118.               "}" *
  1119.             }
  1120.             { bbl.doi doi tie.or.space.connect }
  1121.           if$
  1122.           output
  1123.         }
  1124.       if$
  1125.     }
  1126.     'skip$
  1127.   if$
  1128. }
  1129.  
  1130. FUNCTION { format.edition } {
  1131.   edition empty$
  1132.     { }
  1133.     {
  1134.       edition convert.to.ordinal
  1135.       add.space bbl.edition *
  1136.       output
  1137.     }
  1138.   if$
  1139.   next.punct.semicolon 'next.punct.int :=
  1140. }
  1141.  
  1142. FUNCTION { format.group.address } {
  1143.   duplicate$
  1144.   empty$
  1145.     { pop$ }
  1146.     {
  1147.       address empty$
  1148.         { }
  1149.         {
  1150.           add.colon
  1151.           address
  1152.           *
  1153.         }
  1154.       if$
  1155.       output
  1156.     }
  1157.   if$
  1158. }
  1159.  
  1160. FUNCTION { format.howpublished } {
  1161.   howpublished empty$
  1162.     { }
  1163.     {
  1164.       howpublished
  1165.       output
  1166.     }
  1167.   if$
  1168. }
  1169.  
  1170. FUNCTION { format.journal } {
  1171.   journal emph
  1172.   output
  1173.   next.punct.space 'next.punct.int :=
  1174. }
  1175.  
  1176. FUNCTION { format.journal.unpub } {
  1177.   journal emph
  1178.   output
  1179. }
  1180.  
  1181. FUNCTION { format.note } {
  1182.   note empty$
  1183.     { }
  1184.     {
  1185.       note
  1186.       output
  1187.     }
  1188.   if$
  1189. }
  1190.  
  1191. FUNCTION { format.number.series } {
  1192.   series empty$
  1193.     { }
  1194.     {
  1195.       series
  1196.       number empty$
  1197.         { }
  1198.         {
  1199.           add.space
  1200.           number *
  1201.         }
  1202.       if$
  1203.       output
  1204.       next.punct.semicolon 'next.punct.int :=
  1205.     }
  1206.   if$
  1207. }
  1208.  
  1209. FUNCTION { format.organization } {
  1210.   organization empty$
  1211.     { }
  1212.     {
  1213.       organization paren
  1214.       output
  1215.       next.punct.period 'next.punct.int :=
  1216.     }
  1217.   if$
  1218. }
  1219.  
  1220. FUNCTION { format.organization.address } {
  1221.   organization format.group.address
  1222. }
  1223.  
  1224. FUNCTION { format.pages } {
  1225.   pages empty$
  1226.     { }
  1227.     {
  1228.       pages multi.page.check
  1229.         {
  1230.           bbl.pages
  1231.           pages hyphen.to.dash
  1232.         }
  1233.         { bbl.page pages }
  1234.       if$
  1235.       tie.or.space.connect
  1236.       output
  1237.     }
  1238.   if$
  1239.   ctrl.doi.bool
  1240.     { format.doi }
  1241.     'skip$
  1242.   if$
  1243. }
  1244.  
  1245. FUNCTION { format.pages.article } {
  1246.   pages empty$
  1247.     { }
  1248.     {
  1249.       pages hyphen.to.dash
  1250.       output
  1251.     }
  1252.   if$
  1253.   ctrl.doi.bool
  1254.     { format.doi }
  1255.     'skip$
  1256.   if$
  1257. }
  1258.  
  1259. FUNCTION { format.publisher.address } {
  1260.   publisher format.group.address
  1261. }
  1262.  
  1263. FUNCTION { format.school.address } {
  1264.   school
  1265.   duplicate$
  1266.   empty$
  1267.     { pop$ }
  1268.     {
  1269.       address empty$
  1270.         { }
  1271.         {
  1272.           add.comma
  1273.           address
  1274.           *
  1275.         }
  1276.       if$
  1277.       output
  1278.     }
  1279.   if$
  1280. }
  1281.  
  1282. FUNCTION { format.title } {
  1283.   title empty$
  1284.     { }
  1285.     {
  1286.       title
  1287.       output
  1288.       next.punct.period 'next.punct.int :=
  1289.     }
  1290.   if$
  1291. }
  1292.  
  1293. FUNCTION { format.title.article } {
  1294.   ctrl.article.title.bool
  1295.     {
  1296.       title empty$
  1297.         { }
  1298.         {
  1299.           title
  1300.           output
  1301.           next.punct.period 'next.punct.int :=
  1302.         }
  1303.       if$
  1304.     }
  1305.     { }
  1306.   if$
  1307. }
  1308.  
  1309. FUNCTION { format.title.techreport } {
  1310.   title empty$
  1311.     { }
  1312.     {
  1313.       title emph
  1314.       output
  1315.       next.punct.semicolon 'next.punct.int :=
  1316.     }
  1317.   if$
  1318. }
  1319.  
  1320. FUNCTION { format.title.booktitle } {
  1321.   title empty$
  1322.     { }
  1323.     {
  1324.       title
  1325.       output
  1326.       next.punct.period 'next.punct.int :=
  1327.     }
  1328.   if$
  1329.   booktitle empty$
  1330.     { }
  1331.     {
  1332.       booktitle
  1333.       output
  1334.       next.punct.period 'next.punct.int :=
  1335.     }
  1336.   if$
  1337. }
  1338.  
  1339. STRINGS {
  1340.   book.title
  1341.   chapter.title
  1342. }
  1343.  
  1344. FUNCTION { format.title.booktitle.book } {
  1345.   "" 'chapter.title :=
  1346.   booktitle empty$
  1347.     {
  1348.       "" 'chapter.title :=
  1349.       title 'book.title :=
  1350.     }
  1351.     {
  1352.       ctrl.chapter.title.bool
  1353.         {
  1354.           title empty$
  1355.             'skip$
  1356.             { title 'chapter.title := }
  1357.           if$
  1358.         }
  1359.         'skip$
  1360.       if$
  1361.       maintitle empty$
  1362.         { booktitle 'book.title := }
  1363.         { maintitle add.period booktitle * 'book.title := }
  1364.       if$
  1365.     }
  1366.   if$
  1367.   chapter.title empty$
  1368.     { }
  1369.     {
  1370.       chapter.title
  1371.       output
  1372.       next.punct.period 'next.punct.int :=
  1373.     }
  1374.   if$
  1375.   book.title emph
  1376.   chapter.title empty$
  1377.     {
  1378.       author empty$
  1379.         { }
  1380.         {
  1381.           editor empty$
  1382.             { }
  1383.             { bbl.in add.space swap$ * }
  1384.           if$
  1385.         }
  1386.       if$
  1387.     }
  1388.     { bbl.in add.space swap$ * }
  1389.   if$
  1390.   output
  1391. }
  1392.  
  1393. FUNCTION { format.type } {
  1394.   type empty$
  1395.     { }
  1396.     {
  1397.       pop$
  1398.       type
  1399.     }
  1400.   if$
  1401.   output
  1402. }
  1403.  
  1404. FUNCTION { format.type.number } {
  1405.   type empty$
  1406.     { }
  1407.     {
  1408.       type
  1409.       number empty$
  1410.         { }
  1411.         { number tie.or.space.connect }
  1412.       if$
  1413.       output
  1414.     }
  1415.   if$
  1416. }
  1417.  
  1418. FUNCTION { format.url } {
  1419.   url empty$
  1420.     { }
  1421.     {
  1422.       "\url{" url * "}" *
  1423.       output
  1424.     }
  1425.   if$
  1426. }
  1427.  
  1428. FUNCTION { format.year } {
  1429.   year empty$
  1430.     { }
  1431.     {
  1432.       year
  1433.       output
  1434.       next.punct.semicolon 'next.punct.int :=
  1435.     }
  1436.   if$
  1437. }
  1438.  
  1439. FUNCTION { format.year.article } {
  1440.   year empty$
  1441.     { }
  1442.     {
  1443.       year bold
  1444.       output
  1445.     }
  1446.   if$
  1447. }
  1448.  
  1449. FUNCTION { format.version } {
  1450.   version empty$
  1451.     { }
  1452.     {
  1453.       bbl.version add.space
  1454.       version
  1455.       *
  1456.       output
  1457.     }
  1458.   if$
  1459. }
  1460.  
  1461. FUNCTION { format.volume.article } {
  1462.   volume emph
  1463.   output
  1464. }
  1465.  
  1466. FUNCTION { format.volume } {
  1467.   volume empty$
  1468.     { }
  1469.     {
  1470.       bbl.volume
  1471.       volume
  1472.       tie.or.space.connect
  1473.       output
  1474.       next.punct.semicolon 'next.punct.int :=
  1475.     }
  1476.   if$
  1477. }
  1478.  
  1479.  
  1480. FUNCTION { article } {
  1481.   begin.bibitem
  1482.   format.authors
  1483.   format.title.article
  1484.   format.journal
  1485.   format.year.article
  1486.   format.volume.article
  1487.   format.pages.article
  1488.   format.note
  1489.   end.bibitem
  1490. }
  1491.  
  1492. FUNCTION { book } {
  1493.   begin.bibitem
  1494.   format.authors.or.editors
  1495.   format.title.booktitle.book
  1496.   format.edition
  1497.   author empty$
  1498.     { }
  1499.     { format.editors }
  1500.   if$
  1501.   format.number.series
  1502.   format.publisher.address
  1503.   format.year
  1504.   format.volume
  1505.   format.chapter
  1506.   format.pages
  1507.   format.note
  1508.   end.bibitem
  1509. }
  1510.  
  1511. FUNCTION { inbook } { book }
  1512.  
  1513. FUNCTION { booklet } {
  1514.   begin.bibitem
  1515.   format.authors
  1516.   format.title
  1517.   format.howpublished
  1518.   format.address
  1519.   format.year
  1520.   format.note
  1521.   end.bibitem
  1522. }
  1523.  
  1524. FUNCTION { collection } { book }
  1525.  
  1526. FUNCTION { incollection } { book }
  1527.  
  1528. FUNCTION { inpress } {
  1529.   begin.bibitem
  1530.   format.authors
  1531.   format.journal.unpub
  1532.   doi empty$
  1533.     {
  1534.       bbl.inpress
  1535.       output
  1536.     }
  1537.     {
  1538.       format.year.article
  1539.       next.punct.comma 'next.punct.int :=
  1540.       format.doi
  1541.     }
  1542.   if$
  1543.   format.note
  1544.   end.bibitem
  1545. }
  1546.  
  1547. FUNCTION { inproceedings } {
  1548.   begin.bibitem
  1549.   format.authors
  1550.   format.title.booktitle
  1551.   format.address
  1552.   format.year
  1553.   format.pages
  1554.   format.note
  1555.   end.bibitem
  1556. }
  1557.  
  1558. FUNCTION { manual } {
  1559.   begin.bibitem
  1560.   format.authors
  1561.   format.title
  1562.   format.version
  1563.   format.organization.address
  1564.   format.year
  1565.   format.note
  1566.   end.bibitem
  1567. }
  1568.  
  1569. FUNCTION { mastersthesis } {
  1570.   begin.bibitem
  1571.   format.authors
  1572.   format.title
  1573.   bbl.msc format.type
  1574.   format.school.address
  1575.   format.year
  1576.   format.note
  1577.   end.bibitem
  1578. }
  1579.  
  1580. FUNCTION { misc } {
  1581.   begin.bibitem
  1582.   format.authors
  1583.   format.title
  1584.   format.howpublished
  1585.   format.year
  1586.   format.url
  1587.   format.note
  1588.   end.bibitem
  1589. }
  1590.  
  1591. FUNCTION { patent } {
  1592.   begin.bibitem
  1593.   format.authors
  1594.   format.organization
  1595.   format.title
  1596.   format.type.number
  1597.   format.year
  1598.   format.note
  1599.   end.bibitem
  1600. }
  1601.  
  1602. FUNCTION { phdthesis } {
  1603.   begin.bibitem
  1604.   format.authors
  1605.   format.title
  1606.   bbl.phd format.type
  1607.   format.school.address
  1608.   format.year
  1609.   format.note
  1610.   end.bibitem
  1611. }
  1612.  
  1613. FUNCTION { proceeding } {
  1614.   begin.bibitem
  1615.   format.title
  1616.   format.address
  1617.   format.year
  1618.   format.pages
  1619.   format.note
  1620.   end.bibitem
  1621. }
  1622.  
  1623. FUNCTION { techreport } {
  1624.   begin.bibitem
  1625.   format.authors.or.editors
  1626.   format.title.techreport
  1627.   format.type.number
  1628.   format.organization.address
  1629.   format.year
  1630.   format.volume
  1631.   format.pages
  1632.   format.note
  1633.   end.bibitem
  1634. }
  1635.  
  1636. FUNCTION { unpublished } {
  1637.   begin.bibitem
  1638.   format.authors
  1639.   format.journal.unpub
  1640.   doi empty$
  1641.     { format.howpublished }
  1642.     {
  1643.       format.year
  1644.       next.punct.comma 'next.punct.int :=
  1645.       format.doi
  1646.     }
  1647.   if$
  1648.   format.note
  1649.   end.bibitem
  1650. }
  1651.  
  1652. FUNCTION { default.type } { misc }
  1653.  
  1654.  
  1655. MACRO { jan } { "Jan." }
  1656. MACRO { feb } { "Feb." }
  1657. MACRO { mar } { "Mar." }
  1658. MACRO { apr } { "Apr." }
  1659. MACRO { may } { "May" }
  1660. MACRO { jun } { "June" }
  1661. MACRO { jul } { "July" }
  1662. MACRO { aug } { "Aug." }
  1663. MACRO { sep } { "Sept." }
  1664. MACRO { oct } { "Oct." }
  1665. MACRO { nov } { "Nov." }
  1666. MACRO { dec } { "Dec." }
  1667.  
  1668. MACRO { acbcct } { "ACS Chem.\ Biol." }
  1669. MACRO { achre4 } { "Acc.\ Chem.\ Res." }
  1670. MACRO { acncdm } { "ACS Chem.\ Neurosci." }
  1671. MACRO { ancac3 } { "ACS Nano" }
  1672. MACRO { ancham } { "Anal.\ Chem." }
  1673. MACRO { bichaw } { "Biochemistry" }
  1674. MACRO { bcches } { "Bioconjugate Chem." }
  1675. MACRO { bomaf6 } { "Biomacromolecules" }
  1676. MACRO { bipret } { "Biotechnol.\ Prog." }
  1677. MACRO { crtoec } { "Chem.\ Res.\ Toxicol." }
  1678. MACRO { chreay } { "Chem.\ Rev." }
  1679. MACRO { cmatex } { "Chem.\ Mater." }
  1680. MACRO { cgdefu } { "Cryst.\ Growth Des." }
  1681. MACRO { enfuem } { "Energy Fuels" }
  1682. MACRO { esthag } { "Environ.\ Sci.\ Technol." }
  1683. MACRO { iechad } { "Ind.\ Eng.\ Chem.\ Res." }
  1684. MACRO { inoraj } { "Inorg.\ Chem." }
  1685. MACRO { jafcau } { "J.~Agric.\ Food Chem." }
  1686. MACRO { jceaax } { "J.~Chem.\ Eng.\ Data" }
  1687. MACRO { jceda8 } { "J.~Chem.\ Ed." }
  1688. MACRO { jcisd8 } { "J.~Chem.\ Inf.\ Model." }
  1689. MACRO { jctcce } { "J.~Chem.\ Theory Comput." }
  1690. MACRO { jcchff } { "J. Comb. Chem." }
  1691. MACRO { jmcmar } { "J. Med. Chem." }
  1692. MACRO { jnprdf } { "J. Nat. Prod." }
  1693. MACRO { joceah } { "J.~Org.\ Chem." }
  1694. MACRO { jpcafh } { "J.~Phys.\ Chem.~A" }
  1695. MACRO { jpcbfk } { "J.~Phys.\ Chem.~B" }
  1696. MACRO { jpccck } { "J.~Phys.\ Chem.~C" }
  1697. MACRO { jpclcd } { "J.~Phys.\ Chem.\ Lett." }
  1698. MACRO { jprobs } { "J.~Proteome Res." }
  1699. MACRO { jacsat } { "J.~Am.\ Chem.\ Soc." }
  1700. MACRO { langd5 } { "Langmuir" }
  1701. MACRO { mamobx } { "Macromolecules" }
  1702. MACRO { mpohbp } { "Mol.\ Pharm." }
  1703. MACRO { nalefd } { "Nano Lett." }
  1704. MACRO { orlef7 } { "Org.\ Lett." }
  1705. MACRO { oprdfk } { "Org.\ Proc.\ Res.\ Dev." }
  1706. MACRO { orgnd7 } { "Organometallics" }
  1707.  
  1708.  
  1709. READ
  1710.  
  1711. EXECUTE { initialize.control.values }
  1712.  
  1713. EXECUTE { initialize.count.entries }
  1714.  
  1715. EXECUTE { initialize.name.separator }
  1716.  
  1717. EXECUTE { initialize.tracker }
  1718.  
  1719. ITERATE { calculate.names }
  1720.  
  1721. ITERATE { count.entries }
  1722.  
  1723. EXECUTE { begin.bib }
  1724.  
  1725. ITERATE { call.type$ }
  1726.  
  1727. EXECUTE { end.bib }
  1728. %%
  1729. %% Originally developed by Mats Dahlgren
  1730. %% Copyright (C) 1996-1998 by Mats Dahlgren
  1731. %% Copyright (C) 2008-2017 by
  1732. %%   Joseph Wright <joseph.wright@morningstar2.co.uk>
  1733. %%
  1734. %% Part of this bundle is derived from cite.sty, to which the
  1735. %% following license applies:
  1736. %%   Copyright (C) 1989-2009 by Donald Arseneau
  1737. %%   These macros may be freely transmitted, reproduced, or
  1738. %%   modified provided that this notice is left intact.
  1739. %%
  1740. %% It may be distributed and/or modified under the conditions of
  1741. %% the LaTeX Project Public License (LPPL), either version 1.3c of
  1742. %% this license or (at your option) any later version.  The latest
  1743. %% version of this license is in the file:
  1744. %%
  1745. %%    http://www.latex-project.org/lppl.txt
  1746. %%
  1747. %% This work is "maintained" (as per LPPL maintenance status) by
  1748. %%   Joseph Wright.
  1749. %%
  1750. %% This work consists of the files achemso.dtx,
  1751. %%                                 achemso-demo.bib and
  1752. %%                                 achemso-demo.tex,
  1753. %%           and the derived files achemso.cls,
  1754. %%                                 achemso.ins,
  1755. %%                                 achemso.pdf,
  1756. %%                                 achemso.sty,
  1757. %%                                 natmove.sty and
  1758. %%                                 a number of configuration files.
  1759. %%
  1760. %%
  1761. %% End of file `achemso.bst'.
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top