3

I've downloaded a biochemistry journal .bst.

It works phenomenally great, except that it italicizes the volume number in entries of type @article - I want the volume number to be unitalicized, but bolded.

I have really no clue what I'm doing (Just started using LaTeX less than 2 weeks ago).

%%% biochemistry.bst
%%% BibTeX-style-file for references according to the standard of
%%% "Biochemistry"
%%% Sonja M. Schwarzl, July 2005
%%% based on:
%%% pnas.bst
%%% ====================================================================
%%%  @BibTeX-style-file{
%%%     author          = "Alan R. Rogers",
%%%     version         = "1.0",
%%%     date            = "12 November 1992",
%%%     time            = "16:07:20 MST",
%%%     filename        = "pnas.bst",
%%%     address         = "Department of Anthropology
%%%                        University of Utah
%%%                        Salt Lake City, UT 84112
%%%                        USA",
%%%     telephone       = "+1 801 581 5529",
%%%     FAX             = "+1 801 581 6252",
%%%     checksum        = "37034 967 2316 17724",
%%%     email           = "rogers@anthro.utah.edu (Internet)",
%%%     codetable       = "ISO/ASCII",
%%%     keywords        = "",
%%%     supported       = "yes",
%%%     abstract        = "",
%%%     docstring       = "This file produces bibliographies in the
%%%                format of ``Proceedings of the National
%%%                Academy of Sciences, USA.''",
%%%  }
%%% ====================================================================
% This is "pnas.bst", modified from "unsrt.bst"
% BibTeX standard bibliography style `unsrt'
    % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
    % Copyright (C) 1985, all rights reserved.
    % Copying of this file is authorized only if either
    % (1) you make absolutely no changes to your copy, including name, or
    % (2) if you do make changes, you name it something other than
    % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
    % This restriction helps ensure that all standard styles are identical.
    % The file btxbst.doc has the documentation for this style.

ENTRY
  { address
    author
    booktitle
    chapter
    edition
    editor
    howpublished
    institution
    journal
    key
    month
    note
    number
    organization
    pages
    publisher
    school
    series
    title
    type
    volume
    year
  }
  {}
  { label }

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$ }
    { " " * write$ }
    { output.state after.block =
    { add.period$ write$
      newline$
      "\newblock " write$
    }
    { output.state before.all =
        'write$
%       { add.period$ " " * write$ }
        { ", " * 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 {output.bibitem}
{ newline$
  "\bibitem{" write$
  cite$ write$
  "}" write$
  newline$
  ""
  before.all 'output.state :=
}

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 {not}
{   { #0 }
    { #1 }
  if$
}

FUNCTION {and}
{   'skip$
    { pop$ #0 }
  if$
}

FUNCTION {or}
{   { pop$ #1 }
    'skip$
  if$
}

FUNCTION {new.block.checka}
{ empty$
    'skip$
    'new.block
  if$
}

FUNCTION {new.block.checkb}
{ empty$
  swap$ empty$
  and
    'skip$
    'new.block
  if$
}

FUNCTION {new.sentence.checka}
{ empty$
    'skip$
    'new.sentence
  if$
}

FUNCTION {new.sentence.checkb}
{ empty$
  swap$ empty$
  and
    'skip$
    'new.sentence
  if$
}

FUNCTION {field.or.null}
{ duplicate$ empty$
    { pop$ "" }
    'skip$
  if$
}

FUNCTION {emphasize}
{ duplicate$ empty$
    { pop$ "" }
    { "{\em " swap$ * "}" * }
  if$
}

FUNCTION {parenthesize}
{ duplicate$ empty$
    { pop$ "" }
    { "(" swap$ * ")" * }
  if$
}

FUNCTION {boldface}
{ duplicate$ empty$
    { pop$ "" }
    { "{\bf " swap$ * "}" * }
  if$
}

INTEGERS { nameptr namesleft numnames }

FUNCTION {format.names}
{ 's :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't :=
      nameptr #1 >
    { namesleft #1 >
        { ", " * t * }
        { numnames #2 >
        { ", " * }
        'skip$
          if$
          t "others" =
        { " et~al." * }
        { " and " * t * }
          if$
        }
      if$
    }
    't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

FUNCTION {format.publisher}
{ publisher empty$
    { address empty$
      { "" }
      { address }
      if$
    }
    { address empty$
      { publisher}
      { publisher ", " * address * }
      if$
    }
  if$
}

FUNCTION {format.editors.as.authors}
{ editor empty$
    { organization }
    { editor format.names
      editor num.names$ #1 >
        {  ", eds." * }
        {  ", ed." * }
      if$
    }
  if$
}

FUNCTION {format.authors}
{ author empty$
    { editor empty$
        { "" }
        { editor format.names
          editor num.names$ #1 >
           {  ", eds." * }
           {  ", ed." * }
          if$
        }
      if$
    }
    { author format.names }
  if$
}

FUNCTION {format.editors}
{ editor empty$
    { "" }
    { author empty$ %in this case, see format.authors
        { "" }
        {  editor num.names$ #1 >
         { "eds.{} " }
         { "ed.{} " }
           if$
           editor format.names *
        }
      if$
    }
  if$
}

FUNCTION {format.title}
{ title "t" change.case$
}

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 {format.date}
{ year empty$
    { "year?" parenthesize    }
    { year parenthesize }
  if$
}

FUNCTION {format.btitle.series}
{ title empty$
    { "" }
    { title emphasize }
  if$
  series empty$
    { "" * }
    { ", " * series * }
  if$
}

FUNCTION {tie.or.space.connect}
{ duplicate$ text.length$ #3 <
    { "~" }
    { " " }
  if$
  swap$ * *
}

FUNCTION {comma.connect}
{ duplicate$ empty$
    { pop$ }
    { swap$
      duplicate$ empty$
        { pop$ }
        { swap$  ", " swap$ * * }
      if$
    }
  if$
}

FUNCTION {either.or.check}
{ empty$
    'pop$
    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  if$
}

FUNCTION {format.bvolume.number}
{ volume empty$
    { number empty$
        { "" }
        { "No.{}" number tie.or.space.connect }
      if$
    }
    { "Vol.{}" volume tie.or.space.connect
      "volume and number" number either.or.check
    }
  if$
}

FUNCTION {format.number}
{ volume empty$
    { number empty$
    { "" }
    { "No.{}" number tie.or.space.connect   }
      if$
    }
    { "" }
  if$
}

FUNCTION {format.edition}
{ edition empty$
    { "" }
    { output.state mid.sentence =
    { edition "l" change.case$ " edition" * }
    { edition "t" change.case$ " edition" * }
      if$
    }
  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 empty$
    { "" }
    { pages multi.page.check
    { "pp." pages n.dashify tie.or.space.connect }
    { "p." pages tie.or.space.connect }
      if$
    }
  if$
}

FUNCTION {format.vol.num.pages}
{ volume emphasize 
  pages empty$
    'skip$
    { duplicate$ empty$
    { pop$ format.pages }
    { ", " * pages n.dashify * }
      if$
    }
  if$
}

FUNCTION {format.chapter.pages}
{ chapter empty$
    'format.pages
    { type empty$
    { "chapter" }
    { type "l" change.case$ }
      if$
      chapter tie.or.space.connect
      pages empty$
    'skip$
    { ", " * format.pages * }
      if$
    }
  if$
}

FUNCTION {format.in.ed.booktitle}
{ booktitle empty$
    { "" }
    { "in " booktitle emphasize * }
  if$
  series empty$
    { "" * }
    { booktitle empty$
        { "XXmissing booktitle \& seriesXX" * }
        { ", " * }
      if$
      series *
    }
  if$
}

FUNCTION {empty.misc.check}
{ author empty$ title empty$ howpublished empty$
  month empty$ year empty$ note empty$
  and and and and and
    { "all relevant fields are empty in " cite$ * warning$ }
    'skip$
  if$
}

FUNCTION {format.thesis.type}
{ type empty$
    'skip$
    { pop$
      type "t" change.case$
    }
  if$
}

FUNCTION {format.tr.number}
{ type empty$
    { "Technical Report" }
    'type
  if$
  number empty$
    { "t" change.case$ }
    { number tie.or.space.connect }
  if$
}

FUNCTION {format.article.crossref}
{ key empty$
    { journal empty$
    { "need key or journal for " cite$ * " to crossref " * crossref *
      warning$
      ""
    }
    { "In {\em " journal * "\/}" * }
      if$
    }
    { "In " key * }
  if$
  " \cite{" * crossref * "}" *
}

FUNCTION {format.crossref.editor}
{ editor #1 "{vv~}{ll}" format.name$
  editor num.names$ duplicate$
  #2 >
    { pop$ " et~al." * }
    { #2 <
    'skip$
    { editor #2 "{vv }{ll}{ jj}{, f}" format.name$ "others" =
        { " et~al." * }
        { " and " * editor #2 "{vv~}{ll}" format.name$ * }
      if$
    }
      if$
    }
  if$
}

FUNCTION {format.book.crossref}
{ volume empty$
    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
      "In "
    }
    { "Vol.{}" volume tie.or.space.connect
      " of " *
    }
  if$
  editor empty$
  editor field.or.null author field.or.null =
  or
    { key empty$
    { series empty$
        { "need editor, key, or series for " cite$ * " to crossref " *
          crossref * warning$
          "" *
        }
        { "{\em " * series * "\/}" * }
      if$
    }
    { key * }
      if$
    }
    { format.crossref.editor * }
  if$
  " \cite{" * crossref * "}" *
}

FUNCTION {format.incoll.inproc.crossref}
{ editor empty$
  editor field.or.null author field.or.null =
  or
    { key empty$
    { booktitle empty$
        { "need editor, key, or booktitle for " cite$ * " to crossref " *
          crossref * warning$
          ""
        }
        { "in {\em " booktitle * "\/}" * }
      if$
    }
    { "in " key * }
      if$
    }
    { "in " format.crossref.editor * }
  if$
  " \cite{" * crossref * "}" *
}

FUNCTION {article}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.date "year" output.check
  format.title "title" output.check
  new.block
  crossref missing$
    { journal emphasize "journal" output.check
      format.vol.num.pages output
    }
    { format.article.crossref output.nonnull
      format.pages output
    }
  if$
  new.block
  note output
  fin.entry
}

FUNCTION {book}
{ output.bibitem
  format.authors output.nonnull
  crossref missing$
    { "author and editor" editor either.or.check }
    'skip$
  if$
  new.block
  format.date "year" output.check
  format.btitle.series "title" output.check
  crossref missing$
    { format.editors output
      new.block
      format.publisher parenthesize output
      format.bvolume.number output
      new.sentence
    }
    { new.block
      format.book.crossref output.nonnull
    }
  if$
  format.edition output
  new.sentence
  format.pages output
  new.block
  note output
  fin.entry
}

FUNCTION {booklet}
{ output.bibitem
  format.authors output
  new.block
  format.date output
  format.title "title" output.check
  howpublished address comma.connect parenthesize output
  new.block
  note output
  fin.entry
}

FUNCTION {inbook}
{ output.bibitem
  format.authors output.nonnull
  new.block
  format.date "year" output.check
  format.btitle.series "title" output.check
  new.sentence
  crossref missing$
    { format.editors output
      new.block
      format.publisher parenthesize output
      format.bvolume.number output
      new.sentence
    }
    { format.chapter.pages "chapter and pages" output.check
      new.block
      format.book.crossref output.nonnull
    }
  if$
  format.edition output
  new.sentence
  format.pages output
  new.block
  note output
  fin.entry
}

FUNCTION {incollection}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.date "year" output.check
  format.in.ed.booktitle "title" output.check
  new.sentence
  crossref missing$
    { format.editors output
      new.block
      format.publisher parenthesize output
      format.bvolume.number output
      new.sentence
    }
    { format.incoll.inproc.crossref output.nonnull
      format.chapter.pages output
    }
  if$
  format.edition output
  new.sentence
  format.pages output
  new.block
  note output
  fin.entry
}

FUNCTION {inproceedings}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.date "year" output.check
  crossref missing$
    { format.btitle.series "title" output.check
      format.editors output
      new.block
      organization publisher comma.connect
      address comma.connect
      parenthesize output
      new.sentence
      format.bvolume.number output
      new.sentence
    }
    { format.incoll.inproc.crossref output.nonnull
    }
  if$
  format.pages output
  new.block
  note output
  fin.entry
}

FUNCTION {conference} { inproceedings }

FUNCTION {manual}
{ output.bibitem
  author empty$
    { organization empty$
    'skip$
    { organization output.nonnull }
      if$
    }
    { format.authors output.nonnull }
  if$
  new.block
  format.date "year" output.check
  format.btitle.series "title" output.check
  author empty$
    { ""  }
    { organization }
  if$
  publisher comma.connect address comma.connect parenthesize output
  new.sentence
  format.edition output
  new.block
  note output
  fin.entry
}

FUNCTION {mastersthesis}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.date "year" output.check
  "Master's thesis" format.thesis.type output.nonnull
  school address comma.connect parenthesize output
  new.block
  note output
  fin.entry
}

FUNCTION {misc}
{ output.bibitem
  format.authors output
  new.block
  format.date output
  format.title output
  howpublished parenthesize output
  new.block
  note output
  fin.entry
  empty.misc.check
}

FUNCTION {phdthesis}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.date "year" output.check
  "Ph.D. thesis" format.thesis.type output.nonnull
  school address comma.connect parenthesize output
  new.block
  note output
  fin.entry
}

FUNCTION {proceedings}
{ output.bibitem
  format.editors.as.authors output
  new.block
  format.date output
  format.btitle.series "title" output.check
  organization publisher comma.connect
  address comma.connect parenthesize output
  format.bvolume.number output
  new.sentence
  format.pages output
  new.block
  note output
  fin.entry
}

FUNCTION {techreport}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.date output
  format.title "title" output.check
  new.sentence
  institution address comma.connect parenthesize output
  new.sentence
  format.tr.number output.nonnull
  new.block
  note output
  fin.entry
}

FUNCTION {unpublished}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.date output
  format.title "title" output.check
  new.block
  note "note" output.check
  fin.entry
}

FUNCTION {default.type} { misc }

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"}

READ

STRINGS { longest.label }

INTEGERS { number.label longest.label.width }

FUNCTION {initialize.longest.label}
{ "" 'longest.label :=
  #1 'number.label :=
  #0 'longest.label.width :=
}

FUNCTION {longest.label.pass}
{ number.label int.to.str$ 'label :=
  number.label #1 + 'number.label :=
  label width$ longest.label.width >
    { label 'longest.label :=
      label width$ 'longest.label.width :=
    }
    'skip$
  if$
}

EXECUTE {initialize.longest.label}

ITERATE {longest.label.pass}

FUNCTION {begin.bib}
{ preamble$ empty$
    'skip$
    { preamble$ write$ newline$ }
  if$
  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
}

EXECUTE {begin.bib}

EXECUTE {init.state.consts}

ITERATE {call.type$}

FUNCTION {end.bib}
{ newline$
  "\end{thebibliography}" write$ newline$
}

EXECUTE {end.bib}

Thanks!

Mico
  • 506,678
ragzoxaim
  • 337
  • Would you consider using biblatex-chem instead? It is much easier to customise – for me, at least. – Bernard Dec 04 '15 at 23:08
  • @Mico: I simply had not seen any answer when I wrote my comment :-) I'll delete it in moment. – Bernard Dec 04 '15 at 23:12

2 Answers2

2

Save the .bst file with a new name, say colonelk.bst and change line 463 from

{ volume emphasize

to

{ volume boldface

enter image description here

egreg
  • 1,121,712
2

You could proceed as follows:

  • Make a copy of the file biochemistry.bst. Call the copy, say, boldbiochemistry.bst.

  • Open the file boldbiochemisty.bst in a text editor. (The editor you use for your tex files will do fine.)

  • Locate the function format.vol.num.pages. (In my copy of the file, this function starts on line 462.) In this function, replace the word emphasize in the line that says volume emphasize with boldface; i.e., the line should now say volume boldface.

  • Save the file boldbiochemisty.bst either in the directory that contains your main tex file or in a directory that's searched by BibTeX. If you choose the second option, be sure to update the filename database of your TeX distribution appropriately.

  • Change the argument of \bibliographystyle to point to the new bst file. Rerun LaTeX, BibTeX, and LaTeX twice more to fully propagate all changes.

Happy BibTeXing!

Mico
  • 506,678