Hello,

I recently upgraded from version 1.1.4 to 1.1.5fix1. I found that a
document that worked perfectly under 1.1.4 no longer worked under
1.1.5fix1. I am using the harvard bibliography style, which triggers the
problem. I get errors when I use the \citeasnoun latex command in the
caption of a figure. Attached is a stripped down version of my document
that generates the problem, with the 'harvard.sty' and 'dcu.bst' files
that I use.

When I upgraded I did not remove the previous version of LyX (lyx-1.1.4) -
a standard policy I have is to leave the old version around for a couple
of months :) -  and so I was able to confirm that it was not any changes I
may have unknowingly made that sparked the problem.

Here are my system specs:
-------------------------------------------------------------------------------
Compaq Professional Workstation AP550, PIII 733.
SuSE Linux 6.3, out-of-the-box kernel.

$ uname -a
Linux hal8000 2.2.13 #1 Mon Nov 8 15:51:29 CET 1999 i686 unknown
$ g++ --version
egcs-2.91.66
$ latex --version
TeX (Web2C 7.3.1) 3.14159
kpathsea version 3.3.1
Copyright (C) 1999 D.E. Knuth.
Kpathsea is copyright (C) 1999 Free Software Foundation, Inc.
There is NO warranty.  Redistribution of this software is
covered by the terms of both the TeX copyright and
the GNU General Public License.
For more information about these matters, see the files
named COPYING and the TeX source.
Primary author of TeX: D.E. Knuth.
Kpathsea written by Karl Berry and others.
-------------------------------------------------------------------------------

Also, thanks guys for such a great package. I find it a lot easier to
navigate large documents and typeset maths using LyX than LaTeX. The TOC
pulldown in 1.1.5fix1 is a great idea!

Dave

P.S. I have done a number of tests to make sure it isn't my system, but if
it still turns out to be then I am v/sorry to waste your time!!

*==========================================================================*
David McIver                                                   **
Postgraduate Student                                           **
Turbulence, Energy and Combustion Research Group          ************
Department of Mechanical Engineering                      ************
University of Adelaide, Australia                              **
                                                               **
Phone:  +61 8 8303 3157                                        **
Fax:    +61 8 8303 4367                                        **
e-mail: [EMAIL PROTECTED]                        **
*==========================================================================*
#LyX 1.1 created this file. For more info see http://www.lyx.org/
\lyxformat 2.16
\textclass report
\begin_preamble

\usepackage{harvard}

\newcommand{\noFigYet}[1]{
  \vspace{#1}
    \fbox{Figure to be inserted}
  \vspace{#1}
}
\end_preamble
\language default
\inputencoding default
\fontscheme default
\graphics default
\paperfontsize 12
\spacing single 
\papersize a4paper
\paperpackage a4
\use_geometry 1
\use_amsmath 0
\paperorientation portrait
\leftmargin 25mm
\topmargin 25mm
\rightmargin 25mm
\bottommargin 25mm
\secnumdepth 3
\tocdepth 2
\paragraph_separation indent
\defskip medskip
\quotes_language english
\quotes_times 2
\papercolumns 1
\papersides 1
\paperpagestyle default

\layout Title

Draft Upgrade Report:
\newline 
The Fluidic Precessing Jet Nozzle; Simulation of a flow through a complex
 geometry in polar coordinates
\layout Author

David McIver
\layout Abstract


\begin_inset Info This section will (of coarse) be written last!
\end_inset 

An ellipsis (\SpecialChar \ldots{}
) means that I intend to write more in that section.
\layout Abstract

Anything in curly brackets is a comment from me.
\layout Standard


\begin_inset LatexCommand \tableofcontents{}

\end_inset 


\layout Chapter

Introduction
\layout Standard


\begin_inset Info This section should contain the following general points:
- why the following
  - doing LES of precessing jet chamber
  - predictive capability is needed
  - high Re # are of interest
- that there are no current models
- that RANS modelling doesn't predict structure
  - flow structure dominates combustion

It should also say in broad terms what has and hasn't
been done.
\end_inset 


\begin_inset LatexCommand \label{chap:intro}

\end_inset 


\layout Standard

While conducting research towards his thesis 
\latex latex 

\backslash 
citeasnoun{nathanPhd}
\latex default 
 discovered that a precessing motion results when a turbulent pipe jet undergoes
 a sudden expansion.
 The resulting asymmetric jet was found to enhance large-scale mixing downstream
 of the sudden expansion.
 Further research showed that when applied to burner technology the enhanced
 large-scale mixing characteristics of the flow produced a flame with increased
 luminence and lower 
\begin_inset Formula \( NO_{x} \)
\end_inset 

 emissions 
\latex latex 

\backslash 
cite{nox1,nox2}
\latex default 
.
 The burner jet resulting from this asymmetric flow was named the Fluidic
 Precessing Jet (hereafter referred to as the FPJ).
 Since its discovery the FPJ has been implemented in boilers and cement
 kilns in Australia and overseas.
 Both experimental and computational research continues into this practical
 application of a phenomena referred to in the literature as the Coanda
 effect.
\layout Standard
\added_space_top medskip 
The present work documents preliminary research into the computational modelling
 of the flow within the chamber that is the cause of the precessing motion
 produced by the FPJ nozzle.
 Firstly the basis of compuational simulation of turbulent flows is discussed,
 as is the need for a computational model of a FPJ.
 The mathematical formulation of an effective computational technique is
 derived and simulation results using this technique are given.
 {The results show that this technique is capable of simulating the flows
 which make up the basis of the FPJ.} Based on these results a proposal is
 then made for further research into the FPJ flow using this computational
 technique.
\layout Section

Fluidic precessing jet flow
\layout Standard


\begin_inset LatexCommand \label{sec:introFPJflow}

\end_inset 


\begin_float fig 
\layout Standard
\align center 

\latex latex 

\backslash 
noFigYet{20mm}
\layout Caption


\begin_inset LatexCommand \label{fig:niceFPJ}

\end_inset 

{A picture of the precessing jet}
\end_float 
\layout Standard

An understand the flow produced by a fluidic precessing jet nozzle is required
 before any modelling options are reviewed.
 This is because the techniques used to study the flow within the nozzle
 must be capable of capturing the dominant physical processes driving the
 precessing jet flow.
 Hence knowledge of the type of flow that is being studied is an important
 factor in the selection of tools used to study the flow.
\layout Subsection

Overview
\layout Standard


\begin_inset LatexCommand \label{subsec:introFPJoview}

\end_inset 


\layout Standard

A precessing jet nozzle is shown in figure\SpecialChar ~

\begin_inset LatexCommand \ref{fig:niceFPJ}

\end_inset 

.
 It consists of an axisymmetric sudden expansion into a chamber of diameter
 approximately five times or greater than that of the inlet pipe.
 There is a lip at the exit of the chamber.
 Fluid flow into the nozzle from the pipe at the back of the chamber.
 The jet of fluid entering the chamber via the inlet pipe will be referred
 to as the main jet.
 Experiments have shown that for the correct nozzle geometry and under the
 correct flow conditions the main jet of fluid entering the nozzle attaches
 to the wall of the chamber.
 The point at which the main jet attaches to the chamber rotates about the
 inside surface of the chamber with a characteristic frequency.
 The lip at the end of the chamber combines with the instantaneous pressure
 field to deflect the fluid passing out of the chamber.
 The movement of the attachment point combined with the deflection at the
 lip causes the jet of fluid that exits the cavity to rotate about the axis
 of the nozzle.
\layout Standard

To futher complicate the flow, two different modes for the flow through
 the FPJ nozzle have been observed.
 The flow switches between a precessing mode in which the main jet remains
 attached to the wall of the cavity and an axisymmetric mode where the main
 jet detaches from the wall of the cavity and flows directly through the
 sudden expansion configuration.
 Figure\SpecialChar ~

\begin_inset LatexCommand \ref{fig:FPJmodes}

\end_inset 

 shows a two-dimensional representation of the flow inside the nozzle for
 both of these modes taken from 
\latex latex 

\backslash 
citeasnoun{nhl1998}
\latex default 
.
\begin_float fig 
\layout Standard
\align center 

\latex latex 

\backslash 
noFigYet{20mm}
\layout Caption


\begin_inset LatexCommand \label{fig:FPJmodes}

\end_inset 

A two-dimensional schematic of the two modes of fluid flow through a FPJ
 nozzle.
 
\shape italic 
a
\shape default 
) the precessing mode that dominates the flow, and 
\shape italic 
b
\shape default 
) the intermittant axial mode.
 Taken from 
\latex latex 

\backslash 
citeasnoun{nhl1998}
\latex default 
.
\end_float 
\layout Standard


\begin_inset LatexCommand \BibTeX[dcu]{temp}

\end_inset 


\the_end
@Phdthesis{nathanPhd,
  author =       {G.J. Nathan},
  title =        {The Enhanced Mixing Burner},
  school =       {Department of Mechanical Engineering},
  year =         1988,
  address =      {University of Adelaide},
  annote =       {Gus's PhD thesis}
}

@Article{nhl1998,
  author =       {Graham J. Nathan and Simon J. Hill and Russel E. Luxton},
  title =        {An axisymmetric 'fluidic' nozzle to generate jet precession},
  journal =      JFM,
  year =         1998,
  volume =       370,
  pages =        {347--380},
  annote =       {Comment: Excellent article describing what happens during
                  precession. Also the latest work done on the precessing jet}
}

@InProceedings{nox1,
  author =       {G.J. Nathan and R.E. Luxton and J.P. Smart},
  title =        {Reduced \begin{math} {NO}_{x} \end{math} emissions and
                  enhanced large scale turbulence from a precessing jet burner},
  booktitle =    {24th Symp. (Intl) on Combustion},
  year =         1992,
  pages =        {1399--1405},
  organization = {The Combustion Institute},
  annote =       {Referenced by nathan_etal_1998}
}

@Article{nox2,
  author =       {G.J. Nathan and S.R. Turns and R.V. Bandaru},
  title =        {The influence of jet precession on \begin{math} {NO}_{x}
                  \end{math} emissions and radiation from turbulent flames},
  journal =      {Combust. Sci. Technol.},
  year =         1996,
  volume =       112,
  pages =        {211--230},
  annote =       {Referenced by nathan_etal_1998}
}

% BibTeX standard bibliography style `dcu' (one of the harvard family)
        % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
        % Copyright (C) 1991, 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, abbrv.bst, agsm.bst,
        % dcu.bst or kluwer.bst.
        % This restriction helps ensure that all standard styles are identical.
        % The file harvard.tex has the documentation for this style.

% ACKNOWLEDGEMENT:
%   This document is a modified version of alpha.bst to which it owes much of
%   its functionality.

% AUTHOR
%   Peter Williams, Key Centre for Design Quality, Sydney University
%   e-mail: [EMAIL PROTECTED]

ENTRY
  { address
    author
    booktitle
    chapter
    edition
    editor
    howpublished
    institution
    journal
    key
    month
    note
    number
    organization
    pages
    publisher
    school
    series
    title
    type
    URL
    volume
    year
  }
  { field.used etal.allowed etal.required }
  { extra.label sort.label list.year }

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

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 {item.check}
{ 't :=
  empty$
    { "empty " t * " in " * cite$ * warning$ }
    { skip$ }
  if$
}

FUNCTION {fin.entry}
{ add.period$
  write$
  newline$
}

FUNCTION {new.block}
{ output.state before.all =
    'skip$
    { after.block 'output.state := }
  if$
}

FUNCTION {not}
{   { #0 }
    { #1 }
  if$
}

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

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

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

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

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

FUNCTION {quote}
{ duplicate$ empty$
    { pop$ "" }
    { "`" swap$ * "'" * }
  if$
}

FUNCTION {write.url}
{ URL empty$
    { skip$ }
    { "\newline\harvardurl{" URL * "}" * write$ newline$ }
  if$
}

INTEGERS { nameptr namesleft numnames }

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

FUNCTION {format.authors}
{ author empty$
    { "" }
    { "{vv~}{ll}{, jj}{, f.}" author format.names }
  if$
}

FUNCTION {format.editors}
{ editor empty$
    { "" }
    { "{vv~}{ll}{, jj}{, f.}" editor format.names
      editor num.names$ #1 >
        { " (eds)" * }
        { " (ed.)" * }
      if$
    }
  if$
}

FUNCTION {format.editors.reverse}
{ editor empty$
    { "" }
    { "{f.~}{vv~}{ll}{, jj}" editor format.names
      editor num.names$ #1 >
        { " (eds)" * }
        { " (ed.)" * }
      if$
    }
  if$
}

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

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.btitle}
{ title emphasize
}

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

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

FUNCTION {format.bvolume}
{ volume empty$
    { "" }
    { "Vol." volume tie.or.space.connect
      series empty$
        'skip$
        { " of " * series emphasize * }
      if$
      "volume and number" number either.or.check
    }
  if$
}

FUNCTION {format.number.series}
{ volume empty$
    { number empty$
        { series field.or.null }
        { output.state mid.sentence =
            { "number" }
            { "Number" }
          if$
          number tie.or.space.connect
          series empty$
            { "there's a number but no series in " cite$ * warning$ }
            { " in " * series emphasize * }
          if$
        }
      if$
    }
    { "" }
  if$
}

FUNCTION {format.edition}
{ edition empty$
    { "" }
    { output.state mid.sentence =
        { edition "l" change.case$ " edn" * }
        { edition "t" change.case$ " edn" * }
      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 * }
        { "p.~" pages * }
      if$
    }
  if$
}

FUNCTION {format.vol.num.pages}
{ volume embolden field.or.null
  number empty$
    'skip$
    { "(" number * ")" * *
      volume empty$
        { "there's a number but no volume in " cite$ * warning$ }
        'skip$
      if$
    }
  if$
  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$
    { "" }
    { editor empty$
        { booktitle emphasize }
        { "{\em in} " format.editors.reverse * ", " * booktitle emphasize * }
      if$
    }
  if$
}

FUNCTION {empty.misc.check}
{ author empty$ title empty$ howpublished empty$
  month empty$ year empty$ note empty$
  and and and and and
  key empty$ not 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 * "\/}" * " \cite{" * crossref * "}" *
        }
      if$
    }
    { " {\em in} \citeasnoun{" crossref * "}" * }
  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 * "\/}" * " \cite{" * crossref * "}" *}
          if$
        }
        { " \citeasnoun{" * crossref * "}" * }
      if$
    }
    { " \citeasnoun{" * crossref * "}" * }
  if$
}

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 * "\/}" * " \cite{" * crossref * "}" *}
          if$
        }
        { " {\em in} \citeasnoun{" crossref * "}" * }
      if$
    }
    {  " {\em in} \citeasnoun{" crossref * "}" * }
  if$
 
}

INTEGERS { len }

FUNCTION {chop.word}
{ 's :=
  'len :=
  s #1 len substring$ =
    { s len #1 + global.max$ substring$ }
    's
  if$
}

INTEGERS { ind tsslen }

STRINGS { tss ret rss istr }

FUNCTION {replace.substring}{
  'rss :=
  'tss :=
  'istr :=
  "" 'ret :=
  tss text.length$ 'tsslen :=
  #1 'ind :=
    { istr ind tsslen substring$ "" = not }
    { istr ind tsslen substring$ tss =
        { ret rss * 'ret :=
          ind tsslen + 'ind :=
        }
        { ret istr ind #1 substring$ * 'ret :=
          ind #1 + 'ind :=
        }
      if$
    }
  while$
  ret
}

FUNCTION {format.lab.names.abbr}
{ 's :=
  s num.names$ 'numnames :=
  numnames #1 >
    { numnames #2 >
        { s #1 "{vv~}{ll}" format.name$ " et~al." * }
        { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
            { s #1 "{vv~}{ll}" format.name$ " et~al." * }
            { s #1 "{vv~}{ll}" format.name$ " \harvardand\ " *
              s #2 "{vv~}{ll}" format.name$ * 
            }
          if$
        }
      if$
    }
    { s #1 "{vv~}{ll}" format.name$ }
  if$
}

FUNCTION {format.lab.names.full}
{ 's :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { s nameptr "{vv~}{ll}" format.name$ 't :=
      nameptr #1 >
        { namesleft #1 >
            { ", " * t * }
            { t "others" =
                { " et~al." * }
                { " \harvardand\ " * t * }
              if$
            }
          if$
        }
        't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

INTEGERS { author.field editor.field organization.field title.field key.field }

FUNCTION {init.field.constants}
{ #0 'author.field :=
  #1 'editor.field :=
  #2 'organization.field :=
  #3 'title.field :=
  #4 'key.field :=
}

FUNCTION {make.list.label}
{ author.field field.used =
    { format.authors }
    { editor.field field.used =
        { format.editors }
        { organization.field field.used =
            { "The " #4 organization chop.word #3 text.prefix$ }
            { title.field field.used =
                { format.btitle }
                { key.field field.used =
                    { key #3 text.prefix$ }
                    { "Internal error :001 on " cite$ * " label" * warning$ }
                  if$
                }
              if$
            }
          if$
        }
      if$
    }
  if$
}

FUNCTION {make.full.label}
{ author.field field.used =
    { author format.lab.names.full }
    { editor.field field.used =
        { editor format.lab.names.full }
        { organization.field field.used =
            { "The " #4 organization chop.word #3 text.prefix$ }
            { title.field field.used =
                { format.btitle }
                { key.field field.used =
                    { key #3 text.prefix$ }
                    { "Internal error :001 on " cite$ * " label" * warning$ }
                  if$
                }
              if$
            }
          if$
        }
      if$
    }
  if$
}

FUNCTION {make.abbr.label}
{ etal.allowed
    { author.field field.used =
        { author format.lab.names.abbr }
        { editor.field field.used =
            { editor format.lab.names.abbr }
            { organization.field field.used =
                { "The " #4 organization chop.word #3 text.prefix$ }
                { title.field field.used =
                    { format.btitle }
                    { key.field field.used =
                        { key #3 text.prefix$ }
                        { "Internal error :001 on " cite$ * " label" * warning$}
                      if$
                    }
                  if$
                }
              if$
            }
          if$
        }
      if$
    }
    { make.full.label }
  if$
}

FUNCTION {output.bibitem}
{ newline$
  etal.allowed        %%%XXX change
  etal.required
  and
    {
      "\harvarditem[" write$
      make.abbr.label write$
      "]{" write$
    }
    {
      "\harvarditem{" write$
    }
  if$
  make.full.label write$
  "}{" write$
  list.year write$
  "}{" write$
  cite$ write$
  "}" write$
  newline$
  ""
  before.all 'output.state :=
}


FUNCTION {list.label.output}
{ make.list.label " " * write$
}

FUNCTION {article}
{ output.bibitem
  list.label.output
  " \harvardyearleft " list.year * "\harvardyearright " * output.nonnull
  new.block
  author "author" item.check
  title.field field.used =
    { skip$ }
    { format.title "title" output.check }
  if$
  crossref missing$
    { journal emphasize "journal" duplicate$ item.check
      " " * format.vol.num.pages * output
    }
    { format.article.crossref output.nonnull
      format.pages output
    }
  if$
  new.block
  note output
  fin.entry
  write.url
}

FUNCTION {book}
{ output.bibitem
  list.label.output
  " \harvardyearleft " list.year * "\harvardyearright " * output.nonnull
  new.block
  author empty$
    { editor "author and editor" item.check }
    { crossref missing$
        { "author and editor" editor either.or.check }
        'skip$
      if$
    }
  if$
  title.field field.used =
    { skip$ }
    { format.btitle "title" output.check }
  if$
  crossref missing$
    { format.bvolume output
      format.number.series output
      format.edition output
      publisher "publisher" output.check
      address output
    }
    { format.book.crossref output.nonnull
      format.edition output
    }
  if$
  new.block
  note output
  fin.entry
  write.url
}

FUNCTION {booklet}
{ output.bibitem
  list.label.output
  " \harvardyearleft " list.year * "\harvardyearright " * output.nonnull
  new.block
  title.field field.used =
    { skip$ }
    { format.title "title" output.check }
  if$
  howpublished output
  address output
  new.block
  note output
  fin.entry
  write.url
}

FUNCTION {inbook}
{ output.bibitem
  list.label.output
  " \harvardyearleft " list.year * "\harvardyearright " * output.nonnull
  new.block
  author empty$
    { editor "author and editor" item.check }
    { crossref missing$
        { "author and editor" editor either.or.check }
        'skip$
      if$
    }
  if$
  title.field field.used =
    { skip$ }
    { format.btitle "title" output.check }
  if$
  crossref missing$
    { format.bvolume output
      format.number.series output
      format.edition output
      publisher "publisher" output.check
      address output
    }
    { format.book.crossref output.nonnull
      format.edition output
    }
  if$
  format.chapter.pages "chapter and pages" output.check
  new.block
  note output
  fin.entry
  write.url
}

FUNCTION {incollection}
{ output.bibitem
  list.label.output
  " \harvardyearleft " list.year * "\harvardyearright " * output.nonnull
  new.block
  title.field field.used =
    { skip$ }
    { format.title "title" output.check }
  if$
  author "author" item.check
  crossref missing$
    { format.in.ed.booktitle "booktitle" output.check
      format.edition output
      format.bvolume output
      format.number.series output
      publisher "publisher" output.check
      address output
    }
    { format.incoll.inproc.crossref output.nonnull
    }
  if$
  format.chapter.pages output
  new.block
  note output
  fin.entry
  write.url
}

FUNCTION {inproceedings}
{ output.bibitem
  list.label.output
  " \harvardyearleft " list.year * "\harvardyearright " * output.nonnull
  new.block
  title.field field.used =
    { skip$ }
    { format.title "title" output.check }
  if$
  author "author" item.check
  crossref missing$
    { format.in.ed.booktitle "booktitle" output.check
      format.bvolume output
      format.number.series output
      address empty$
        { organization output
          publisher output
        }
        { organization output
          publisher output
          address output.nonnull
        }
      if$
    }
    { format.incoll.inproc.crossref output.nonnull
    }
  if$
  format.pages output
  new.block
  note output
  fin.entry
  write.url
}

FUNCTION {conference} { inproceedings }

FUNCTION {manual}
{ output.bibitem
  list.label.output
  " \harvardyearleft " list.year * "\harvardyearright " * output.nonnull
  new.block
  title.field field.used =
    { skip$ }
    { format.btitle "title" output.check }
  if$
  format.edition output
  author empty$
    { organization empty$
        { address output
        }
        'skip$
      if$
    }
    { organization output
      address output
    }
  if$
  new.block
  note output
  fin.entry
  write.url
}

FUNCTION {mastersthesis}
{ output.bibitem
  list.label.output
  " \harvardyearleft " list.year * "\harvardyearright " * output.nonnull
  new.block
  author "author" item.check
  title.field field.used =
    { skip$ }
    { format.title emphasize "title" output.check }
  if$
  "Master's thesis" format.thesis.type output.nonnull
  school "school" output.check
  address output
  new.block
  note output
  fin.entry
  write.url
}

FUNCTION {misc}
{ output.bibitem
  list.label.output
  " \harvardyearleft " list.year * "\harvardyearright " * output.nonnull
  new.block
  title.field field.used =
    { skip$ }
    { format.title output }
  if$
  howpublished output
  new.block
  note output
  fin.entry
  write.url
  empty.misc.check
}

FUNCTION {phdthesis}
{ output.bibitem
  list.label.output
  " \harvardyearleft " list.year * "\harvardyearright " * output.nonnull
  new.block
  author "author" item.check
  title.field field.used =
    { skip$ }
    { format.btitle "title" output.check }
  if$
  "PhD thesis" format.thesis.type output.nonnull
  school "school" output.check
  address output
  new.block
  note output
  fin.entry
  write.url
}

FUNCTION {proceedings}
{ output.bibitem
  list.label.output
  " \harvardyearleft " list.year * "\harvardyearright " * output.nonnull
  new.block
  title.field field.used =
    { skip$ }
    { format.btitle "title" output.check }
  if$
  format.bvolume output
  format.number.series output
  address empty$
    { editor empty$
        { skip$ }
        { organization output
        }
      if$
      publisher output
    }
    { editor empty$
        'skip$
        { organization output }
      if$
      publisher output
      address output.nonnull
    }
  if$
  new.block
  note output
  fin.entry
  write.url
}

FUNCTION {techreport}
{ output.bibitem
  list.label.output
  " \harvardyearleft " list.year * "\harvardyearright " * output.nonnull
  new.block
  author "author" item.check
  title.field field.used =
    { skip$ }
    { format.title "title" output.check }
  if$
  format.tr.number emphasize output.nonnull
  institution "institution" output.check
  address output
  new.block
  note output
  fin.entry
  write.url
}

FUNCTION {unpublished}
{ output.bibitem
  list.label.output
  " \harvardyearleft " list.year * "\harvardyearright " * output.nonnull
  new.block
  author "author" item.check
  title.field field.used =
    { skip$ }
    { format.title "title" output.check }
  if$
  new.block
  note "note" output.check
  fin.entry
  write.url
}

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

EXECUTE {init.field.constants}

FUNCTION {sortify}
{ purify$
  "l" change.case$
}

FUNCTION {sortify.names}
{ " \harvardand\ " " " replace.substring
  " et~al." " zzz" replace.substring
  sortify
}

FUNCTION {author.key.label}
{ author empty$
    { key empty$
        { title.field 'field.used := }
        { key.field 'field.used := }
      if$
    }
    { author.field 'field.used := }
  if$
}

FUNCTION {author.editor.key.label}
{ author empty$
    { editor empty$
        { key empty$
            { title.field 'field.used := }
            { key.field 'field.used := }
          if$
        }
        { editor.field 'field.used := }
      if$
    }
    { author.field 'field.used := }
  if$
}

FUNCTION {author.key.organization.label}
{ author empty$
    { key empty$
        { organization empty$
            { title.field 'field.used := }
            { organization.field 'field.used := }
          if$
        }
        { key.field 'field.used := }
      if$
    }
    { author.field 'field.used := }
  if$
}

FUNCTION {editor.key.organization.label}
{ editor empty$
    { key empty$
        { organization empty$
            { title.field 'field.used := }
            { organization.field 'field.used := }
          if$
        }
        { key.field 'field.used := }
      if$
    }
    { editor.field 'field.used := }
  if$
}

FUNCTION {sort.format.title}
{ 't :=
  "A " #2
    "An " #3
      "The " #4 t chop.word
    chop.word
  chop.word
  sortify
  #1 global.max$ substring$
}

FUNCTION {calc.label}
{ make.abbr.label
  title.field field.used =
    { sort.format.title }
    { sortify.names }
  if$
  year field.or.null purify$ #-1 #4 substring$ sortify
  *
  'sort.label :=
}

FUNCTION {preliminaries} %%%XXX change
{ type$ "book" =
  type$ "inbook" =
  or
    'author.editor.key.label
    { type$ "proceedings" =
        'editor.key.organization.label
        { type$ "manual" =
            'author.key.organization.label
            'author.key.label
          if$
        }
      if$
    }
  if$
  author.field field.used = %%%XXX change
    {
      author num.names$ #2 >
        { #1 }
        { #0 }
      if$
      'etal.required :=
    }
    {
      editor.field field.used = 
        {
          editor num.names$ #2 >
            { #1 }
            { #0 }
          if$
        }
        { #0 }
      if$
      'etal.required :=
    }
  if$
  #1 'etal.allowed :=
}

FUNCTION {first.presort}
{ calc.label
  sort.label
  title.field field.used =
    { skip$ }
    { "    "
      *
      make.list.label sortify.names
      *
      "    "
      *
      title field.or.null
      sort.format.title
      *
    }
  if$
  #1 entry.max$ substring$
  'sort.key$ :=
}

ITERATE {preliminaries}

ITERATE {first.presort}

SORT

STRINGS { last.sort.label next.extra last.full.label }

INTEGERS { last.extra.num last.etal.allowed }

FUNCTION {initialize.confusion}
{ #0 int.to.chr$ 'last.sort.label :=
  #0 int.to.chr$ 'last.full.label :=
  #1 'last.etal.allowed :=
}

FUNCTION {confusion.pass}
{ last.sort.label sort.label =
    { last.etal.allowed 
        { last.full.label make.full.label sortify.names =
            { skip$ }
            { #0 'etal.allowed :=
              #0 'last.etal.allowed :=
            }
          if$
        }
        { #0 'etal.allowed := }
      if$
    }
    { sort.label 'last.sort.label :=
      make.full.label sortify.names 'last.full.label :=
      #1 'last.etal.allowed :=
    }
  if$
}

EXECUTE {initialize.confusion}

ITERATE {confusion.pass}

EXECUTE {initialize.confusion}

REVERSE {confusion.pass}

FUNCTION {initialize.last.extra.num}
{ #0 int.to.chr$ 'last.sort.label :=
  "" 'next.extra :=
  #0 'last.extra.num :=
}

FUNCTION {forward.pass}
{ last.sort.label sort.label =
    { last.extra.num #1 + 'last.extra.num :=
      last.extra.num int.to.chr$ 'extra.label :=
    }
    { "a" chr.to.int$ 'last.extra.num :=
      "" 'extra.label :=
      sort.label 'last.sort.label :=
    }
  if$
}

FUNCTION {reverse.pass}
{ next.extra "b" =
    { "a" 'extra.label := }
    'skip$
  if$
  year empty$
    { "n.d." extra.label * 'list.year := }
    { year extra.label * 'list.year := }
  if$
  extra.label 'next.extra :=
}

ITERATE {first.presort}

SORT

EXECUTE {initialize.last.extra.num}

ITERATE {forward.pass}

REVERSE {reverse.pass}

FUNCTION {second.presort}
{ make.list.label
  title.field field.used =
    { sort.format.title }
    { sortify.names }
  if$
  "    "
  *
  list.year field.or.null sortify
  *
  "    "
  *
  title.field field.used =
    { skip$ }
    { title field.or.null
      sort.format.title
      *
    }
  if$
  #1 entry.max$ substring$
  'sort.key$ :=
}

ITERATE {second.presort}

SORT

FUNCTION {begin.bib}
{ preamble$ empty$
    'skip$
    { "\harvardpreambledefs{%" write$ newline$
      preamble$ write$ "}" write$ newline$
      "\harvardpreambletext{%" write$ newline$
      preamble$ write$ "}" write$ newline$ }
  if$
  "\begin{thebibliography}{xx}" write$ newline$
}

EXECUTE {begin.bib}

EXECUTE {init.state.consts}

ITERATE {call.type$}

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

EXECUTE {end.bib}
%% harvard.sty - harvard bibliography style Version 2.0.5
%% Author: Peter Williams [EMAIL PROTECTED]
%% Copyright: Peter Williams 1994
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{harvard}
\RequirePackage{ifthen}
\IfFileExists{html.sty}{\RequirePackage{html}
\newcommand{\harvardurl}[1]{\htmladdnormallink*{\textbf{URL:} \textit{##1}}{##1}}
}{
\newcommand{\harvardurl}[1]{\textbf{URL:} \textit{##1}}
}
\DeclareOption{full}{\citationmode{full}}
\DeclareOption{abbr}{\citationmode{abbr}}
\DeclareOption{default}{\citationmode{default}}
\DeclareOption{agsmcite}{\citationstyle{agsm}}
\DeclareOption{dcucite}{\citationstyle{dcu}}
\DeclareOption{round}{\harvardparenthesis{round}\harvardyearparenthesis{round}}
\DeclareOption{curly}{\harvardparenthesis{curly}\harvardyearparenthesis{curly}}
\DeclareOption{angle}{\harvardparenthesis{angle}\harvardyearparenthesis{angle}}
\DeclareOption{square}{\harvardparenthesis{square}\harvardyearparenthesis{square}}
\DeclareOption{none}{\harvardparenthesis{none}\harvardyearparenthesis{none}}
\DeclareOption*{
  \global\edef\HAR@tmp{\CurrentOption}
%% Berwin A. Turlach <[EMAIL PROTECTED]>
  \AtEndDocument{\bibliographystyle{\HAR@tmp}}
}

%% Kristoffer H. Rose <[EMAIL PROTECTED]> 1995/03/01:
%%   do not expand macros in citations: put definitions on .aux file instead.
{\catcode`\:=12 \catcode`\-=12 \catcode`\>=12 \catcode`\<=12 %
 \gdef\codeof#1{\expandafter\codeof@\meaning#1<-:}%
 \gdef\codeof@#1:->#2<-:{#2}}

\def\harvardpreambletext{\catcode`\#=12 \harvardpreambletext@}
\def\harvardpreambletext@#1{\def\next{#1}\catcode`\#=6 %
  \immediate\write\@auxout{\string\harvardpreambledefs{%
      \string\AtBeginDocument{\codeof\next}}}}

\def\harvardpreambledefs#1{#1\gdef\harvardpreambledefs##1{}}

\newcommand{\harvarditem}[4][\null]{\item[]%
\if@filesw{ \def\protect##1{\string ##1\space}%
\ifthenelse{\equal{#1}{\null}}
  {\def\next{{#4}{#2}{#2}{#3}}}
  {\def\next{{#4}{#2}{#1}{#3}}}
\immediate\write\@auxout{\string\harvardcite\codeof\next}%
}\fi%
\protect\hspace*{-\labelwidth}\protect\hspace*{-\labelsep}\ignorespaces%
}

\newcommand{\harvardcite}[4]{
  \global\@namedef{HAR@fn@#1}{#2}
  \global\@namedef{HAR@an@#1}{#3}
  \global\@namedef{HAR@yr@#1}{#4}
  \global\@namedef{HAR@df@#1}{\csname HAR@fn@#1\endcsname}
}

\newcommand{\citationmode}[1]{
  \renewcommand{\HAR@citemode}{\csname HAR@cite@#1\endcsname}
}

\newcommand{\HAR@cite@full}{HAR@fn@}
\newcommand{\HAR@cite@abbr}{HAR@an@}
\newcommand{\HAR@cite@default}{HAR@df@}
\newcommand{\HAR@citemode}{\HAR@cite@default}

\newcommand{\HAR@citetoaux}[1]{%
  \if@filesw\immediate\write\@auxout{\string\citation{#1}}\fi%
}

\newcommand{\HAR@checkdef}[2]{\@ifundefined{HAR@df@#1}%
  {\textbf{?}\@warning{Citation '#1' on page \thepage \space undefined}}%
  {#2}%
}

\newcommand{\HAR@dolist}[2]{\def\@citea{\null}\@for\@citeb:=#1\do%
{\@citea\def\@citea{\HAR@hisep\penalty\@m\ }\HAR@checkdef{\@citeb}%
{#2{\@citeb}\HAR@hysep\penalty\@m\ %
\HAR@year{\@citeb}\HAR@setd{\@citeb}}}%
}

\def\@enamedef#1{\expandafter\def\csname #1\expandafter\endcsname\expandafter}
\newcommand{\HAR@name}[1]{\csname \HAR@citemode#1\endcsname}
\newcommand{\HAR@fname}[1]{\csname HAR@fn@#1\endcsname}
\newcommand{\HAR@aname}[1]{\csname HAR@an@#1\endcsname}
\newcommand{\HAR@year}[1]{\csname HAR@yr@#1\endcsname}
\newcommand{\HAR@setd}[1]{%
\global\@enamedef{HAR@df@#1}{\csname HAR@an@#1\endcsname}%
}

%% Berwin A. Turlach <[EMAIL PROTECTED]>
\global\@namedef{HAR@df@*}{\csname HAR@fn@*\endcsname}
\renewcommand{\nocite}[1]{\HAR@citetoaux{#1}%
\@for\@citeb:=#1\do%
{\HAR@checkdef{\@citeb}{}}}%

\renewcommand{\cite}{\@ifstar{\@ifstar{\HAR@acite}{\HAR@fcite}}{\HAR@dcite}}

\newcommand{\HAR@dcite}[2][\null]{\HAR@citetoaux{#2}%
{\harvardleft\HAR@dolist{#2}{\HAR@name}\ifthenelse{\equal{#1}{\null}}%
  {}{, #1}\harvardright}%
}

\newcommand{\HAR@acite}[2][\null]{\HAR@citetoaux{#2}%
{\harvardleft\HAR@dolist{#2}{\HAR@aname}\ifthenelse{\equal{#1}{\null}}%
  {}{, #1}\harvardright}%
}

\newcommand{\HAR@fcite}[2][\null]{\HAR@citetoaux{#2}%
{\harvardleft\HAR@dolist{#2}{\HAR@fname}\ifthenelse{\equal{#1}{\null}}%
  {}{, #1}\harvardright}%
}

\newcommand{\citeaffixed}{\@ifstar{\@ifstar{\HAR@aciteaff}{\HAR@fciteaff}}%
{\HAR@dciteaff}%
}

\newcommand{\HAR@fciteaff}[3][\null]{\HAR@citetoaux{#2}%
{\harvardleft#3\ \HAR@dolist{#2}{\HAR@fname}\ifthenelse{\equal{#1}{\null}}%
    {}{, #1}\harvardright}%
}

\newcommand{\HAR@aciteaff}[3][\null]{\HAR@citetoaux{#2}%
{\harvardleft#3\ \HAR@dolist{#2}{\HAR@aname}\ifthenelse{\equal{#1}{\null}}%
    {}{, #1}\harvardright}%
}

\newcommand{\HAR@dciteaff}[3][\null]{\HAR@citetoaux{#2}%
{\harvardleft#3\ \HAR@dolist{#2}{\HAR@name}\ifthenelse{\equal{#1}{\null}}%
    {}{, #1}\harvardright}%
}

\newcommand{\citeasnoun}{\@ifstar{\@ifstar{\HAR@aciteasn}{\HAR@fciteasn}}%
{\HAR@dciteasn}%
}

\newcommand{\HAR@fciteasn}[2][\null]{\HAR@citetoaux{#2}\HAR@checkdef{#2}{%
{\HAR@fname{#2}\ \harvardyearleft\HAR@year{#2}\ifthenelse{\equal{#1}{\null}}
    {}{, #1}\harvardyearright}\HAR@setd{#2}}%
}

\newcommand{\HAR@aciteasn}[2][\null]{\HAR@citetoaux{#2}\HAR@checkdef{#2}{%
{\HAR@aname{#2}\ \harvardyearleft\HAR@year{#2}\ifthenelse{\equal{#1}{\null}}
    {}{, #1}\harvardyearright}\HAR@setd{#2}}%
}

\newcommand{\HAR@dciteasn}[2][\null]{\HAR@citetoaux{#2}\HAR@checkdef{#2}{%
{\HAR@name{#2}\ \harvardyearleft\HAR@year{#2}\ifthenelse{\equal{#1}{\null}}
    {}{, #1}\harvardyearright}\HAR@setd{#2}}%
}

\newcommand{\possessivecite}{\@ifstar{\@ifstar{\HAR@acitepos}{\HAR@fcitepos}}%
{\HAR@dcitepos}%
}

\newcommand{\HAR@fcitepos}[2][\null]{\HAR@citetoaux{#2}\HAR@checkdef{#2}{%
{\HAR@fname{#2}'s \harvardyearleft\HAR@year{#2}\ifthenelse{\equal{#1}{\null}}
    {}{, #1}\harvardyearright}\HAR@setd{#2}}%
}

\newcommand{\HAR@acitepos}[2][\null]{\HAR@citetoaux{#2}\HAR@checkdef{#2}{%
{\HAR@aname{#2}'s \harvardyearleft\HAR@year{#2}\ifthenelse{\equal{#1}{\null}}
    {}{, #1}\harvardyearright}\HAR@setd{#2}}%
}

\newcommand{\HAR@dcitepos}[2][\null]{\HAR@citetoaux{#2}\HAR@checkdef{#2}{%
{\HAR@name{#2}'s \harvardyearleft\HAR@year{#2}\ifthenelse{\equal{#1}{\null}}
    {}{, #1}\harvardyearright}\HAR@setd{#2}}%
}

\newcommand{\citename}{\@ifstar{\@ifstar{\HAR@acitenam}\HAR@fcitenam}%
{\HAR@dcitenam}%
}

\newcommand{\HAR@fcitenam}[2][\null]{\HAR@citetoaux{#2}\HAR@checkdef{#2}{%
{\HAR@fname{#2}\ifthenelse{\equal{#1}{\null}}
    {}{\ \harvardleft#1\harvardright}}}%
}

\newcommand{\HAR@acitenam}[2][\null]{\HAR@citetoaux{#2}\HAR@checkdef{#2}{%
{\HAR@aname{#2}\ifthenelse{\equal{#1}{\null}}
    {}{\ \harvardleft#1\harvardright}}}%
}

\newcommand{\HAR@dcitenam}[2][\null]{\HAR@citetoaux{#2}\HAR@checkdef{#2}{%
{\HAR@name{#2}\ifthenelse{\equal{#1}{\null}}
    {}{\ \harvardleft#1\harvardright}}}%
}

\newcommand{\citeyear}{\@ifstar{\HAR@citeyrnb}{\HAR@citeyr}}

\newcommand{\HAR@citeyrnb}[2][\null]{\HAR@citetoaux{#2}%
{\def\@citea{\null}\@for\@citeb:=#2\do%
{\@citea\def\@citea{\HAR@hisep\penalty\@m\ }\HAR@checkdef{\@citeb}%
{\HAR@year{\@citeb}}}\ifthenelse{\equal{#1}{\null}}%
{}{, #1}}%
}

\newcommand{\HAR@citeyr}[2][\null]{\HAR@citetoaux{#2}%
{\harvardleft\def\@citea{\null}\@for\@citeb:=#2\do%
{\@citea\def\@citea{\HAR@hisep\penalty\@m\ }\HAR@checkdef{\@citeb}%
{\HAR@year{\@citeb}}}\ifthenelse{\equal{#1}{\null}}%
{}{, #1}\harvardright}%
}

\newcommand{\HAR@hysep@apsr}{\null}
\newcommand{\HAR@hisep@apsr}{;}
\newcommand{\HAR@hysep@agsm}{\null}
\newcommand{\HAR@hisep@agsm}{,}
\newcommand{\HAR@hysep@dcu}{,}
\newcommand{\HAR@hisep@dcu}{;}
\newcommand{\HAR@and@agsm}{\&}
\newcommand{\HAR@and@dcu}{and}
\newcommand{\HAR@and@apsr}{and}
\newcommand{\HAR@hysep}{\HAR@hysep@agsm}
\newcommand{\HAR@hisep}{\HAR@hisep@agsm}
\newcommand{\harvardand}{\HAR@and@agsm}
\newcommand{\citationstyle}[1]{%
  \renewcommand{\HAR@hysep}{\csname HAR@hysep@#1\endcsname}
  \renewcommand{\HAR@hisep}{\csname HAR@hisep@#1\endcsname}
  \renewcommand{\harvardand}{\csname HAR@and@#1\endcsname}
}

\newcommand{\HAR@bl@round}{(}
\newcommand{\HAR@br@round}{)}
\newcommand{\HAR@bl@square}{[}
\newcommand{\HAR@br@square}{]}
\newcommand{\HAR@bl@curly}{\{}
\newcommand{\HAR@br@curly}{\}}
\newcommand{\HAR@bl@angle}{$<$}
\newcommand{\HAR@br@angle}{$>$}
\newcommand{\HAR@bl@none}{}
\newcommand{\HAR@br@none}{}
\newcommand{\harvardleft}{\HAR@bl@round}
\newcommand{\harvardright}{\HAR@br@round}
\newcommand{\harvardparenthesis}[1]{
  \renewcommand{\harvardleft}{\csname HAR@bl@#1\endcsname}
  \renewcommand{\harvardright}{\csname HAR@br@#1\endcsname}
  \harvardyearparenthesis{#1}
}

\newcommand{\harvardyearleft}{\HAR@bl@round}
\newcommand{\harvardyearright}{\HAR@br@round}
\newcommand{\harvardyearparenthesis}[1]{
  \renewcommand{\harvardyearleft}{\csname HAR@bl@#1\endcsname}
  \renewcommand{\harvardyearright}{\csname HAR@br@#1\endcsname}
}

\newcommand{\HAR@checkcitations}[4]{
  \def\HAR@tempa{#2}\expandafter
  \ifx \csname HAR@fn@#1\endcsname \HAR@tempa
    \def\HAR@tempa{#3}\expandafter
    \ifx \csname HAR@an@#1\endcsname \HAR@tempa
      \def\HAR@tempa{#4}\expandafter
      \ifx \csname HAR@yr@#1\endcsname \HAR@tempa
      \else
        \@tempswatrue
      \fi
    \else
      \@tempswatrue
    \fi
  \else
    \@tempswatrue
  \fi
}
 
\AtEndDocument{\renewcommand{\harvardcite}{\HAR@checkcitations}}

\ExecuteOptions{agsm,agsmcite,default,round}
\ProcessOptions*

Reply via email to