%\iffalse meta-comment
%
% Copyright (C) 2002 Mikael Puolakka
% ----------------------------------
%
% This file may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
% version 1.2 of this license or (at your option) any later
% version. The latest version of this license is in
%
%    http://www.latex-project.org/lppl.txt
%
% and version 1.2 or later is part of all distributions of
% LaTeX version 1999/12/01 or later.
% 
% \fi
% \CheckSum{1270}
%% \CharacterTable
%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%%   Digits        \0\1\2\3\4\5\6\7\8\9
%%   Exclamation   \!     Double quote  \"     Hash (number) \#
%%   Dollar        \$     Percent       \%     Ampersand     \&
%%   Acute accent  \'     Left paren    \(     Right paren   \)
%%   Asterisk      \*     Plus          \+     Comma         \,
%%   Minus         \-     Point         \.     Solidus       \/
%%   Colon         \:     Semicolon     \;     Less than     \<
%%   Equals        \=     Greater than  \>     Question mark \?
%%   Commercial at \@     Left bracket  \[     Backslash     \\
%%   Right bracket \]     Circumflex    \^     Underscore    \_
%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%%   Right brace   \}     Tilde         \~}
%
% \iffalse
%
%    \begin{macrocode}
%<*driver>
\documentclass[a4paper]{ltxdoc}[1999/08/08 v2.0u Standard LaTeX documentation class]
\usepackage[latin9]{inputenc}[2000/07/01 v0.996 Input encoding file ]
\usepackage[T1]{fontenc}[2000/08/30 v1.91 Standard LaTeX package]
\usepackage[finnish]{babel}[2001/03/01 v3.7h The Babel package]
\EnableCrossrefs
\CodelineIndex
\RecordChanges

\DoNotIndex{\',\.,\@M,\@@input,\@Alph,\@alph,\@addtoreset,\@arabic}
\DoNotIndex{\@badmath,\@centercr,\@cite}
\DoNotIndex{\@dotsep,\@empty,\@float,\@gobble,\@gobbletwo,\@ignoretrue}
\DoNotIndex{\@input,\@ixpt,\@m,\@minus,\@mkboth}
\DoNotIndex{\@ne,\@nil,\@nomath,\@plus,\roman,\@set@topoint}
\DoNotIndex{\@tempboxa,\@tempcnta,\@tempdima,\@tempdimb}
\DoNotIndex{\@tempswafalse,\@tempswatrue,\@viipt,\@viiipt,\@vipt}
\DoNotIndex{\@vpt,\@warning,\@xiipt,\@xipt,\@xivpt,\@xpt,\@xviipt}
\DoNotIndex{\@xxpt,\@xxvpt,\\,\ ,\addpenalty,\addtolength,\addvspace}
\DoNotIndex{\advance,\ast,\begin,\begingroup,\bfseries,\bgroup,\box}
\DoNotIndex{\bullet}
\DoNotIndex{\cdot,\cite,\CodelineIndex,\cr,\day,\DeclareOption}
\DoNotIndex{\def,\DisableCrossrefs,\divide,\DocInput,\documentclass}
\DoNotIndex{\DoNotIndex,\egroup,\ifdim,\else,\fi,\em,\endtrivlist}
\DoNotIndex{\EnableCrossrefs,\end,\end@dblfloat,\end@float,\endgroup}
\DoNotIndex{\endlist,\everycr,\everypar,\ExecuteOptions,\expandafter}
\DoNotIndex{\fbox}
\DoNotIndex{\filedate,\filename,\fileversion,\fontsize,\framebox,\gdef}
\DoNotIndex{\global,\halign,\hangindent,\hbox,\hfil,\hfill,\hrule}
\DoNotIndex{\hsize,\hskip,\hspace,\hss,\if@tempswa,\ifcase,\or,\fi,\fi}
\DoNotIndex{\ifhmode,\ifvmode,\ifnum,\iftrue,\ifx,\fi,\fi,\fi,\fi,\fi}
\DoNotIndex{\input}
\DoNotIndex{\jobname,\kern,\leavevmode,\let,\leftmark}
\DoNotIndex{\list,\llap,\long,\m@ne,\m@th,\mark,\markboth,\markright}
\DoNotIndex{\month,\newcommand,\newcounter,\newenvironment}
\DoNotIndex{\NeedsTeXFormat,\newdimen}
\DoNotIndex{\newlength,\newpage,\nobreak,\noindent,\null,\number}
\DoNotIndex{\numberline,\OldMakeindex,\OnlyDescription,\p@}
\DoNotIndex{\pagestyle,\par,\paragraph,\paragraphmark,\parfillskip}
\DoNotIndex{\penalty,\PrintChanges,\PrintIndex,\ProcessOptions}
\DoNotIndex{\protect,\ProvidesClass,\raggedbottom,\raggedright}
\DoNotIndex{\refstepcounter,\relax,\renewcommand}
\DoNotIndex{\rightmargin,\rightmark,\rightskip,\rlap,\rmfamily}
\DoNotIndex{\secdef,\selectfont,\setbox,\setcounter,\setlength}
\DoNotIndex{\settowidth,\sfcode,\skip,\sloppy,\slshape,\space}
\DoNotIndex{\symbol,\the,\trivlist,\typeout,\tw@,\undefined,\uppercase}
\DoNotIndex{\usecounter,\usefont,\usepackage,\vfil,\vfill,\viiipt}
\DoNotIndex{\viipt,\vipt,\vskip,\vspace}
\DoNotIndex{\wd,\xiipt,\year,\z@}

\newcommand{\koodi}[1]{\texttt{#1}}

\newenvironment{funktiot}{\begin{itemize}
  \ttfamily}{\end{itemize}}

\begin{document}
  \DocInput{tktl.dtx}
  \PrintIndex
  \PrintChanges
\end{document}
%</driver>
%    \end{macrocode}
%
% \fi
%
% \changes{v1.0}{2002/09/16}{Alkuperäinen versio}
%
% \def\fileversion{v1.0}
% \def\filedate{2002/09/16}
%
% \title{\BibTeX -tyyli \koodi{tktl}\thanks{Tämän tiedoston versionumero on
%        \fileversion, muutettu viimeksi \filedate.}}
% \author{Mikael Puolakka \\ \texttt{Mikael.Puolakka@cs.Helsinki.FI}}
% \date{\filedate}
%
% \maketitle
%
% \begin{abstract}
% Tyyli \koodi{tktl} on \BibTeX-tyyli, joka on modifioitu
% \LaTeX-ladontajärjestelmän standardityylistä \koodi{alpha}.
% \end{abstract}
%
% \tableofcontents
%
% \section{Johdanto}
%
% Tämä dokumentti on \BibTeX-tyylin \koodi{tktl} toteutuskuvaus.
% Käytännön syistä tämä dokumentti ei noudata tyypillistä \LaTeX-tyylin
% dokumentaatiota, joka yhdistäisi sekä käyttöohjeen että
% toteutuskuvauksen. Sen sijaan \BibTeX-tyylin \koodi{tktl} käyttöohje
% sisältyy tämän dokumentin koodiosioon, josta se on tuotettavissa
% itsenäiseksi \LaTeX-käsikirjoitustiedostokseen ajamalla
% \BibTeX-tyylin \koodi{tktl} asennustiedosto |tktl.ins| \LaTeX-ohjelmalla.
%
% \StopEventually{}    ^^A
%
% \section{\koodi{tktl.bst}}
%    \BibTeX -standardibibliografiatyylistä \koodi{alpha} saatiin
%    aikaiseksi tyyli \koodi{tktl} seuraavilla modifikaatioilla ja
%    lisäyksillä:
%    \begin{itemize}
%    \item Lisättiin rivit
%      \begin{quote}
%      |new.block| \\
%      |format.url output| \\
%      \end{quote}
%      kaikkiin merkinnänmuodostusfunktioihin (|FUNCTION {article}|,
%      |FUNCTION {book}|, |FUNCTION {booklet}|, jne.).
%    \item Lisättiin rivit
%      \begin{quote}
%      |bibitemlabel empty$| \\
%      |  { output.bibitem }| \\
%      |  { output.bibitem.with.bibitemlabel }| \\
%      |if$|
%      \end{quote}
%      kaikkiin merkinnänmuodostusfunktioihin ja samalla poistettiin
%      kaikista rivi
%      \begin{quote}
%      |output.bibitem|
%      \end{quote}
%      Tämä ratkaisu mahdollistaa lähteen tunnisteen antamisen
%      \koodi{BIB}-tiedostossa kentän \koodi{bibitemlabel} arvona. Ilman
%      kyseistä kenttää \BibTeX-tyyli \koodi{tktl} muodostaa itse tuon
%      tunnisteen.
%    \item Lisättiin uusi funktio \koodi{output.bibitem.with.bibitemlabel}
%      lähteen tunnisteen muodostamista varten. Mikäli
%      \koodi{BIB}-tiedostossa annetaan tunniste kentän
%      \koodi{bibitemlabel} arvona, tunnisteen muodostamiseen käytetään
%      kyseistä funktiota. Muuten tunnisteen muodostamiseen käytetään
%      alkuperäistä \koodi{output.bibitem}-funktiota.
%    \item Lisättiin uusi funktio \koodi{format.url} URLien muotoilemista
%      varten.
%    \item Lisättiin uusi funktio \koodi{capitalize}, jolla sanoja voi
%      muuttaa alkamaan isolla kirjaimella.
%    \item Funktioon \koodi{begin.bib} tehtiin joitakin lisäyksiä lähinnä
%      URLeihin ja isoihin alkukirjaimiin liittyen.
%    \item Kuukausimakrojen merkkijonot korvattiin kirjoittamalla tilalle
%      vastaavien sanakomentojen nimet eli esimerkiksi merkkijono
%      \koodi{"January"} korvattiin merkkijonolla |"\bbljan{}"|.
%    \item Lisättiin kentät \koodi{bibitemlabel}, \koodi{url} ja
%      \koodi{valid} |ENTRY{...}|-lohkoon.
%    \item Merkkijonot korvattiin vastaavien sanakomentojen nimillä
%      funktioissa
%      \begin{funktiot}
%      \item format.names
%      \item format.editors
%      \item format.bvolume
%      \item format.number.series
%      \item format.edition
%      \item format.pages
%      \item format.chapter.pages
%      \item format.tr.number
%      \item format.crossref.editor
%      \item format.book.crossref
%      \item masterthesis
%      \item phdthesis
%      \end{funktiot}
%      Lisäksi sanakomennon yhteyteen lisättiin funktion \koodi{capitalize}
%      kutsu, jos tarkoituksena on kirjoittaa sanakomennon tarjoama sana
%      isolla kirjaimella.
%    \item Joukko \emph{in}-sanoja korvattiin sanakomennolla
%      |\bblin{}|, |\bblins{}| tai |\bblinj{}| riippuen sanan
%      asiayhteydestä. Tarvittaessa lisättiin funktion \koodi{capitalize}
%      kutsu.
%    \item Funktion \koodi{format.number.series} \emph{in}-sana korvattiin
%      komennolla |\bblins| tarkoittamaan \emph{''in'' <series>} ja
%      funktion \koodi{format.article.crossref} \emph{in}-sana korvattiin
%      komennolla |\bblinj| tarkoittamaan \emph{''in'' <journal>}.
%    \item Funktiota \koodi{format.names} muutettiin siten, ettei ennen
%      |\bbland|-komennon tuottamaa \emph{ja}-sanaa tule pilkkua missään
%      tilanteessa, mikä tosin olisi voinut olla toisin englanninkielisissä
%      dokumenteissa.
%    \item Funktiota \koodi{format.edition} muutettiin siten,
%      kirjaimilla kirjoitetut painosten järjestysnumerot ilmestyvät
%      lähdeluetteloon sanoina ja numeroilla kirjoitetut numeroina.
%      Muutoksia varten lisättiin funktiot \koodi{convert.edition},
%      \koodi{extract.num}, \koodi{eng.ord} ja \koodi{is.num}.
%    \item Lisättiin funktio \koodi{format.in.ed.booktitle.proc}, jota
%      käytetään funktiossa \koodi{inproceedings} funktion
%      \koodi{format.in.ed.booktitle} sijasta. Ideana on se, että
%      \emph{in}-sana jää kokonaan pois ''konferensseista''
%      (\foreignlanguage{english}{inproceedings} ja
%      \foreignlanguage{english}{conference}) ja käyttäjä itse kirjoittaa
%      \koodi{BOOKTITLE="Proc. <konferenssin nimi>"} omiin tietueisiinsa
%      \koodi{bib}-tiedostoon.
%    \item Tehtiin jokaisesta merkintätyypistä myös ''WWW-versio'', jossa
%      erona alkuperäiseen versioon on kentän \koodi{url} pakollisuus
%      ja uusi kenttä \koodi{valid}, jolla ilmoitetaan päivämäärä, jolloin
%      linkin voimassaolo ja lähteen sisältö on tarkastettu.
%    \item Lisättiin funktiot \koodi{format.valid}, \koodi{format.url.2} ja
%      \koodi{fin.www-entry} merkintätyyppien WWW-versioita varten.
%    \end{itemize}
%
%    \BibTeX-bibliografiatyylin \koodi{tktl} koodi näyttää seuraavalta.
%
%    \begin{macrocode}
%<*tktl>
 % BibTeX-bibliografiatyyli `tktl'
    % versio 1.0  BibTeX-versiolle 0.99c ja myöhemmille ja
    %   LaTeX-versiolle 2e.
    % Copyright (C) 2002 Mikael Puolakka.
    % Tämä bibliografiatyylitiedosto tarvitsee tiedostot
    %   babelbst.tex, finnbst.tex, englbst.tex ja swedbst.tex,
    %   jotka sisältävät sanakomentojen, kuten \bbleditor, jne.,
    %   määritelmät.
    % Tämä tiedosto on modifioitu tiedostosta
 % BibTeX standard bibliography style `alpha'
    % 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
    bibitemlabel
    booktitle
    chapter
    edition
    editor
    howpublished
    institution
    journal
    key
    month
    note
    number
    organization
    pages
    publisher
    school
    series
    title
    type
    url
    valid
    volume
    year
  }
  {}
  { label extra.label sort.label }

INTEGERS { output.state before.all mid.sentence after.sentence after.block }

FUNCTION {format.url}
{ url empty$
    { "" }
    { "\urlprefix\url{" url * "}" * }
  if$
}

FUNCTION {format.url.2}
{ url empty$
    { "" }
    { "\url{" url * "}" * }
  if$
}

FUNCTION {format.valid}
{ valid empty$
    { "" }
    { "[" valid * "]" * }
  if$
}

FUNCTION {init.state.consts}
{ #0 'before.all :=
  #1 'mid.sentence :=
  #2 'after.sentence :=
  #3 'after.block :=
}

STRINGS { s t }

FUNCTION {output.nonnull}
{ 's :=
  output.state mid.sentence =
    { ", " * write$ }
    { output.state after.block =
    { add.period$ write$
      newline$
      "\newblock " write$
    }
    { output.state before.all =
        'write$
        { add.period$ " " * write$ }
      if$
    }
      if$
      mid.sentence 'output.state :=
    }
  if$
  s
}

FUNCTION {output}
{ duplicate$ empty$
    'pop$
    'output.nonnull
  if$
}

FUNCTION {output.check}
{ 't :=
  duplicate$ empty$
    { pop$ "empty " t * " in " * cite$ * warning$ }
    'output.nonnull
  if$
}

FUNCTION {output.bibitem}
{ newline$
  "\bibitem[" write$
  label write$
  "]{" write$
  cite$ write$
  "}" write$
  newline$
  ""
  before.all 'output.state :=
}

FUNCTION {output.bibitem.with.bibitemlabel}
{ newline$
  "\bibitem[" write$
  bibitemlabel write$
  "]{" write$
  cite$ write$
  "}" write$
  newline$
  ""
  before.all 'output.state :=
}

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

FUNCTION {fin.www-entry}
{ 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$
}

INTEGERS { nameptr namesleft numnames }

FUNCTION {format.names}
{ 's :=
  "" 't :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { s nameptr
      "{vv~}{ll}{, jj}{, f.}" format.name$ 


    't :=
      nameptr #1 >
        {
          namesleft #1 >
            { ", " * t * }
            {
              s nameptr "{ll}" format.name$ duplicate$ "others" =
                { 't := }
                { pop$ }
              if$
              t "others" =
                { " \bbletal{}." * }
                { " \bbland{} " * t * }
              if$
            }
          if$
        }
        't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

FUNCTION {format.authors}
{ author empty$
    { "" }
    { author format.names }
  if$
}

FUNCTION {format.editors}
{ editor empty$
    { "" }
    { editor format.names
      editor num.names$ #1 >
    { ", \bbleditors{}" * }
    { ", \bbleditor{}" * }
      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.date}
{ year empty$
    { month empty$
    { "" }
    { "there's a month but no year in " cite$ * warning$
      month
    }
      if$
    }
    { month empty$
    'year
    { month " " * year * }
      if$
    }
  if$
}

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$
    { "" }
    { "\bblvolume{}" volume tie.or.space.connect
      series empty$
    'skip$
    { " \bblof{} " * series emphasize * }
      if$
      "volume and number" number either.or.check
    }
  if$
}

FUNCTION {capitalize}
{ "\capitalize" swap$ * }

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

FUNCTION {eng.ord}
{ duplicate$ "1" swap$ *
  #-2 #1 substring$ "1" =
     { "\bblth{}" * }
     { duplicate$ #-1 #1 substring$
       duplicate$ "1" =
         { pop$ "\bblst{}" * }
         { duplicate$ "2" =
             { pop$ "\bblnd{}" * }
             { "3" =
                 { "\bblrd{}" * }
                 { "\bblth{}" * }
               if$
             }
           if$
          }
       if$
     }
   if$
}

FUNCTION {is.num}
{ chr.to.int$
  duplicate$ "0" chr.to.int$ < not
  swap$ "9" chr.to.int$ > not and
}

FUNCTION {extract.num}
{ duplicate$ 't :=
  "" 's :=
  { t empty$ not }
  { t #1 #1 substring$
    t #2 global.max$ substring$ 't :=
    duplicate$ is.num
      { s swap$ * 's := }
      { pop$ "" 't := }
    if$
  }
  while$
  s empty$
    'skip$
    { pop$ s }
  if$
}

FUNCTION {convert.edition}
{ edition extract.num "l" change.case$ 's :=
  s "first" = s "1" = or
    { "\bblfirst{}" 't := }
    { s "second" = s "2" = or
        { "\bblsecond{}" 't := }
        { s "third" = s "3" = or
            { "\bblthird{}" 't := }
            { s "fourth" = s "4" = or
                { "\bblfourth{}" 't := }
                { s "fifth" = s "5" = or
                    { "\bblfifth{}" 't := }
                    { s #1 #1 substring$ is.num
                        { s eng.ord 't := }
                        { edition 't := }
                      if$
                    }
                  if$
                }
              if$
            }
          if$
        }
      if$
    }
  if$
  t
}

FUNCTION {format.edition}
{ edition empty$
    { "" }
    { output.state mid.sentence =
        { convert.edition "l" change.case$ " " * "\bbledition{}" * }
        { convert.edition "t" change.case$ " " * "\bbledition{}" * }
      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
    { "\bblpages{}" pages n.dashify tie.or.space.connect }
    { "\bblpage{}" pages tie.or.space.connect }
      if$
    }
  if$
}

FUNCTION {format.vol.num.year}
{ volume field.or.null
  number empty$
    'skip$
    { ","  number * *  
      volume empty$
    { "there's a number but no volume in " cite$ * warning$ }
    {year empty$
      'skip$
       { "("  year * ")" * *
       }
       if$
     }
     if$
    }
  if$
}

FUNCTION {format.chapter.pages}
{ chapter empty$
    'format.pages
    { type empty$
    { "\bblchapter{}" }
    { 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$
    { "\bblin{} " capitalize booktitle emphasize * }
    { "\bblin{} " booktitle emphasize * ", " * capitalize format.editors * }
      if$
    }
  if$
}

FUNCTION {format.in.ed.booktitle.proc}
{ booktitle empty$
    { "" }
    { editor empty$
    { " " booktitle emphasize * }
    { " " booktitle emphasize * ", " * format.editors * }
      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$
    { "\bbltechreport{}" capitalize }
    '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$
      ""
    }
    { "\bblinj{} " capitalize * "{\em " journal * "\/}" * }
      if$
    }
    { "\bblin{} " capitalize key * }
  if$
  " \cite{" * crossref * "}" *
}

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

FUNCTION {format.book.crossref}
{ volume empty$
    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
      "\bblin{} " capitalize
    }
    { "\bblvolume{}" capitalize volume tie.or.space.connect
      " \bblof{} " *
    }
  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 * "\/}" * }
        { "\bblin{} " capitalize * "{\em " booktitle * "\/}" * }
      if$
    }
    { "\bblin{} " capitalize key * }
      if$
    }
    { "\bblin{} " capitalize format.crossref.editor * }
  if$
  " \cite{" * crossref * "}" *
}

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

FUNCTION {www-article}
{ bibitemlabel empty$
    { output.bibitem }
    { output.bibitem.with.bibitemlabel }
  if$
  format.authors "author" output.check
  format.title "title" output.check
  new.block
  crossref missing$
    { journal emphasize "journal" output.check
      format.vol.num.year output
      format.pages output
    }
    { format.article.crossref output.nonnull
      format.pages output
    }
  if$
  new.block
  note output
  new.block
  format.url.2 "url" output.check
  new.block
  format.valid output
  fin.www-entry
}

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

FUNCTION {www-book}
{ bibitemlabel empty$
    { output.bibitem }
    { output.bibitem.with.bibitemlabel }
  if$
  author empty$
    { format.editors "author and editor" output.check }
    { format.authors output.nonnull
      crossref missing$
    { "author and editor" editor either.or.check }
    'skip$
      if$
    }
  if$
  format.btitle "title" output.check
  crossref missing$
    { format.bvolume output
      new.block
      format.number.series output
      new.sentence
      publisher "publisher" output.check
      address output
    }
    { new.block
      format.book.crossref output.nonnull
    }
  if$
  format.edition output
  format.date "year" output.check
  new.block
  note output
  new.block
  format.url.2 "url" output.check
  new.block
  format.valid output
  fin.www-entry
}

FUNCTION {booklet}
{ bibitemlabel empty$
    { output.bibitem }
    { output.bibitem.with.bibitemlabel }
  if$
  format.authors output
  format.title "title" output.check
  howpublished address new.block.checkb
  howpublished output
  address output
  format.date output
  new.block
  format.url output
  new.block
  note output
  fin.entry
}

FUNCTION {www-booklet}
{ bibitemlabel empty$
    { output.bibitem }
    { output.bibitem.with.bibitemlabel }
  if$
  format.authors output
  format.title "title" output.check
  howpublished address new.block.checkb
  howpublished output
  address output
  format.date output
  new.block
  note output
  new.block
  format.url.2 "url" output.check
  new.block
  format.valid output
  fin.www-entry
}

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

FUNCTION {www-inbook}
{ bibitemlabel empty$
    { output.bibitem }
    { output.bibitem.with.bibitemlabel }
  if$
  author empty$
    { format.editors "author and editor" output.check }
    { format.authors output.nonnull
      crossref missing$
    { "author and editor" editor either.or.check }
    'skip$
      if$
    }
  if$
  new.block
  format.btitle "title" output.check
  crossref missing$
    { format.bvolume output
      format.chapter.pages "chapter and pages" output.check
      new.block
      format.number.series output
      new.sentence
      publisher "publisher" output.check
      address output
    }
    { format.chapter.pages "chapter and pages" output.check
      new.block
      format.book.crossref output.nonnull
    }
  if$
  format.edition output
  format.date "year" output.check
  new.block
  note output
  new.block
  format.url.2 "url" output.check
  new.block
  format.valid output
  fin.www-entry
}

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

FUNCTION {www-incollection}
{ bibitemlabel empty$
    { output.bibitem }
    { output.bibitem.with.bibitemlabel }
  if$
  format.authors "author" output.check
  format.title "title" output.check
  new.block
  crossref missing$
    { format.in.ed.booktitle "booktitle" output.check
      format.bvolume output
      format.number.series output
      publisher "publisher" output.check
      address output
      format.edition output
      format.date "year" output.check
    }
    { format.incoll.inproc.crossref output.nonnull
      format.chapter.pages output
    }
  if$
  format.chapter.pages output
  note output
  new.block
  format.url.2 "url" output.check
  new.block
  format.valid output
  fin.www-entry
}

FUNCTION {inproceedings}
{ bibitemlabel empty$
    { output.bibitem }
    { output.bibitem.with.bibitemlabel }
  if$
  format.authors "author" output.check
  format.title "title" output.check
  new.block
  crossref missing$
    { format.in.ed.booktitle.proc "booktitle" output.check
      format.bvolume output
      format.number.series output
      address empty$
    { organization publisher new.sentence.checkb
      organization output
      publisher output
      format.date "year" output.check
    }
    { address output.nonnull
      format.date "year" output.check
      organization output
      publisher output
    }
      if$
    }
    { format.incoll.inproc.crossref output.nonnull
    }
  if$
  format.pages output
  format.url output
  new.block
  note output
  fin.entry
}

FUNCTION {www-inproceedings}
{ bibitemlabel empty$
    { output.bibitem }
    { output.bibitem.with.bibitemlabel }
  if$
  format.authors "author" output.check
  format.title "title" output.check
  new.block
  crossref missing$
    { format.in.ed.booktitle.proc "booktitle" output.check
      format.bvolume output
      format.number.series output
      address empty$
    { organization publisher new.sentence.checkb
      organization output
      publisher output
      format.date "year" output.check
    }
    { address output.nonnull
      format.date "year" output.check
      organization output
      publisher output
    }
      if$
    }
    { format.incoll.inproc.crossref output.nonnull
    }
  if$
  format.pages output
  note output
  new.block
  format.url.2 "url" output.check
  new.block
  format.valid output
  fin.www-entry
}

FUNCTION {conference} { inproceedings }

FUNCTION {www-conference} { www-inproceedings }

FUNCTION {manual}
{ bibitemlabel empty$
    { output.bibitem }
    { output.bibitem.with.bibitemlabel }
  if$
  author empty$
    { organization empty$
    'skip$
    { organization output.nonnull
      address output
    }
      if$
    }
    { format.authors output.nonnull }
  if$
  format.btitle "title" output.check
  author empty$
    { organization empty$
    { address new.block.checka
      address output
    }
    'skip$
      if$
    }
    { organization address new.block.checkb
      organization output
      address output
    }
  if$
  format.edition output
  format.date output
  new.block
  format.url output
  new.block
  note output
  fin.entry
}

FUNCTION {www-manual}
{ bibitemlabel empty$
    { output.bibitem }
    { output.bibitem.with.bibitemlabel }
  if$
  author empty$
    { organization empty$
    'skip$
    { organization output.nonnull
      address output
    }
      if$
    }
    { format.authors output.nonnull }
  if$
  format.btitle "title" output.check
  author empty$
    { organization empty$
    { address new.block.checka
      address output
    }
    'skip$
      if$
    }
    { organization address new.block.checkb
      organization output
      address output
    }
  if$
  format.edition output
  format.date output
  new.block
  note output
  new.block
  format.url.2 "url" output.check
  new.block
  format.valid output
  fin.www-entry
}

FUNCTION {mastersthesis}
{ bibitemlabel empty$
    { output.bibitem }
    { output.bibitem.with.bibitemlabel }
  if$
  format.authors "author" output.check
  format.title "title" output.check
  new.block
  "\bblmthesis{}" capitalize format.thesis.type output.nonnull
  school "school" output.check
  address output
  format.date "year" output.check
  new.block
  format.url output
  new.block
  note output
  fin.entry
}

FUNCTION {www-mastersthesis}
{ bibitemlabel empty$
    { output.bibitem }
    { output.bibitem.with.bibitemlabel }
  if$
  format.authors "author" output.check
  format.title "title" output.check
  new.block
  "\bblmthesis{}" capitalize format.thesis.type output.nonnull
  school "school" output.check
  address output
  format.date "year" output.check
  new.block
  note output
  new.block
  format.url.2 "url" output.check
  new.block
  format.valid output
  fin.www-entry
}

FUNCTION {misc}
{ bibitemlabel empty$
    { output.bibitem }
    { output.bibitem.with.bibitemlabel }
  if$
  format.authors "author" output.check
  format.title "title" output.check
  howpublished output
  format.date output
  new.block
  format.url output
  new.block
  note output
  fin.entry
  empty.misc.check
}

FUNCTION {www-misc}
{ bibitemlabel empty$
    { output.bibitem }
    { output.bibitem.with.bibitemlabel }
  if$
  format.authors "author" output.check
  format.title "title" output.check
  format.date output
  new.block
  note output
  new.block
  format.url.2 "url" output.check
  new.block
  format.valid output
  fin.www-entry
  empty.misc.check
}

FUNCTION {phdthesis}
{ bibitemlabel empty$
    { output.bibitem }
    { output.bibitem.with.bibitemlabel }
  if$
  format.authors "author" output.check
  format.btitle "title" output.check
  new.block
  "\bblphdthesis{}" capitalize format.thesis.type output.nonnull
  school "school" output.check
  address output
  format.date "year" output.check
  new.block
  format.url output
  new.block
  note output
  fin.entry
}

FUNCTION {www-phdthesis}
{ bibitemlabel empty$
    { output.bibitem }
    { output.bibitem.with.bibitemlabel }
  if$
  format.authors "author" output.check
  format.btitle "title" output.check
  new.block
  "\bblphdthesis{}" capitalize format.thesis.type output.nonnull
  school "school" output.check
  address output
  format.date "year" output.check
  new.block
  note output
  new.block
  format.url.2 "url" output.check
  new.block
  format.valid output
  fin.www-entry
}

FUNCTION {proceedings}
{ bibitemlabel empty$
    { output.bibitem }
    { output.bibitem.with.bibitemlabel }
  if$
  editor empty$
    { organization output }
    { format.editors output.nonnull }
  if$
  new.block
  format.btitle "title" output.check
  format.bvolume output
  format.number.series output
  address empty$
    { editor empty$
    { publisher new.sentence.checka }
    { organization publisher new.sentence.checkb
      organization output
    }
      if$
      publisher output
      format.date "year" output.check
    }
    { address output.nonnull
      format.date "year" output.check
      new.sentence
      editor empty$
    'skip$
    { organization output }
      if$
      publisher output
    }
  if$
  new.block
  format.url output
  new.block
  note output
  fin.entry
}

FUNCTION {www-proceedings}
{ bibitemlabel empty$
    { output.bibitem }
    { output.bibitem.with.bibitemlabel }
  if$
  editor empty$
    { organization output }
    { format.editors output.nonnull }
  if$
  new.block
  format.btitle "title" output.check
  format.bvolume output
  format.number.series output
  address empty$
    { editor empty$
    { publisher new.sentence.checka }
    { organization publisher new.sentence.checkb
      organization output
    }
      if$
      publisher output
      format.date "year" output.check
    }
    { address output.nonnull
      format.date "year" output.check
      new.sentence
      editor empty$
    'skip$
    { organization output }
      if$
      publisher output
    }
  if$
  new.block
  note output
  new.block
  format.url.2 "url" output.check
  new.block
  format.valid output
  fin.www-entry
}

FUNCTION {techreport}
{ bibitemlabel empty$
    { output.bibitem }
    { output.bibitem.with.bibitemlabel }
  if$
  format.authors "author" output.check
  format.title "title" output.check
  new.block
  format.tr.number output.nonnull
  institution "institution" output.check
  address output
  format.date "year" output.check
  new.block
  format.url output
  new.block
  note output
  fin.entry
}

FUNCTION {www-techreport}
{ bibitemlabel empty$
    { output.bibitem }
    { output.bibitem.with.bibitemlabel }
  if$
  format.authors "author" output.check
  format.title "title" output.check
  new.block
  format.tr.number output.nonnull
  institution "institution" output.check
  address output
  format.date "year" output.check
  new.block
  note output
  new.block
  format.url.2 "url" output.check
  new.block
  format.valid output
  fin.www-entry
}

FUNCTION {unpublished}
{ bibitemlabel empty$
    { output.bibitem }
    { output.bibitem.with.bibitemlabel }
  if$
  format.authors "author" output.check
  format.title "title" output.check
  new.block
  format.url output
  new.block
  note "note" output.check
  format.date output
  fin.entry
}

FUNCTION {www-unpublished}
{ bibitemlabel empty$
    { output.bibitem }
    { output.bibitem.with.bibitemlabel }
  if$
  format.authors "author" output.check
  format.title "title" output.check
  new.block
  note "note" output.check
  format.date output
  new.block
  format.url.2 "url" output.check
  new.block
  format.valid output
  fin.www-entry
}

FUNCTION {default.type} { misc }

MACRO {jan} {"\bbljan{}"}

MACRO {feb} {"\bblfeb{}"}

MACRO {mar} {"\bblmar{}"}

MACRO {apr} {"\bblapr{}"}

MACRO {may} {"\bblmay{}"}

MACRO {jun} {"\bbljun{}"}

MACRO {jul} {"\bbljul{}"}

MACRO {aug} {"\bblaug{}"}

MACRO {sep} {"\bblsep{}"}

MACRO {oct} {"\bbloct{}"}

MACRO {nov} {"\bblnov{}"}

MACRO {dec} {"\bbldec{}"}

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

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

INTEGERS { len }

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

INTEGERS { et.al.char.used }

FUNCTION {initialize.et.al.char.used}
{ #0 'et.al.char.used :=
}

EXECUTE {initialize.et.al.char.used}

FUNCTION {format.lab.names}
{ 's :=
  s num.names$ 'numnames :=
  numnames #1 >
    { numnames #4 >
    { #3 'namesleft := }
    { numnames 'namesleft := }
      if$
      #1 'nameptr :=
      ""
    { namesleft #0 > }
    { nameptr numnames =
        { s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ "others" =
        { "{\etalchar{+}}" *
          #1 'et.al.char.used :=
        }
        { s nameptr "{v{}}{l{}}" format.name$ * }
          if$
        }
        { s nameptr "{v{}}{l{}}" format.name$ * }
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
      while$
      numnames #4 >
    { "{\etalchar{+}}" *
      #1 'et.al.char.used :=
    }
    'skip$
      if$
    }
    { s #1 "{v{}}{l{}}" format.name$
      duplicate$ text.length$ #2 <
    { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
    'skip$
      if$
    }
  if$
}

FUNCTION {author.key.label}
{ author empty$
    { key empty$
    { cite$ #1 #3 substring$ }
    { key #3 text.prefix$ }
      if$
    }
    { author format.lab.names }
  if$
}

FUNCTION {author.editor.key.label}
{ author empty$
    { editor empty$
    { key empty$
        { cite$ #1 #3 substring$ }
        { key #3 text.prefix$ }
      if$
    }
    { editor format.lab.names }
      if$
    }
    { author format.lab.names }
  if$
}

FUNCTION {author.key.organization.label}
{ author empty$
    { key empty$
    { organization empty$
        { cite$ #1 #3 substring$ }
        { "The " #4 organization chop.word #3 text.prefix$ }
      if$
    }
    { key #3 text.prefix$ }
      if$
    }
    { author format.lab.names }
  if$
}

FUNCTION {editor.key.organization.label}
{ editor empty$
    { key empty$
    { organization empty$
        { cite$ #1 #3 substring$ }
        { "The " #4 organization chop.word #3 text.prefix$ }
      if$
    }
    { key #3 text.prefix$ }
      if$
    }
    { editor format.lab.names }
  if$
}

FUNCTION {calc.label}
{ type$ "book" =
  type$ "inbook" =
  or
  type$ "www-inbook" =
  or
  type$ "www-book" =
  or
    'author.editor.key.label
    { type$ "proceedings" =
    'editor.key.organization.label
    { type$ "manual" =
        'author.key.organization.label
        'author.key.label
      if$
    }
      if$
    }
  if$
  duplicate$
  year field.or.null purify$ #-1 #2 substring$
  *
  'label :=
  year field.or.null purify$ #-1 #4 substring$
  *
  sortify 'sort.label :=
}

FUNCTION {sort.format.names}
{ 's :=
  #1 'nameptr :=
  ""
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { nameptr #1 >
    { "   " * }
    'skip$
      if$
      s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
      nameptr numnames = t "others" = and
    { "\bbletal{}" * }
    { t sortify * }
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

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

FUNCTION {author.sort}
{ author empty$
    { key empty$
    { "to sort, need author or key in " cite$ * warning$
      ""
    }
    { key sortify }
      if$
    }
    { author sort.format.names }
  if$
}

FUNCTION {author.editor.sort}
{ author empty$
    { editor empty$
    { key empty$
        { "to sort, need author, editor, or key in " cite$ * warning$
          ""
        }
        { key sortify }
      if$
    }
    { editor sort.format.names }
      if$
    }
    { author sort.format.names }
  if$
}

FUNCTION {author.organization.sort}
{ author empty$
    { organization empty$
    { key empty$
        { "to sort, need author, organization, or key in " cite$ * warning$
          ""
        }
        { key sortify }
      if$
    }
    { "The " #4 organization chop.word sortify }
      if$
    }
    { author sort.format.names }
  if$
}

FUNCTION {editor.organization.sort}
{ editor empty$
    { organization empty$
    { key empty$
        { "to sort, need editor, organization, or key in " cite$ * warning$
          ""
        }
        { key sortify }
      if$
    }
    { "The " #4 organization chop.word sortify }
      if$
    }
    { editor sort.format.names }
  if$
}

FUNCTION {presort}
{ calc.label
  sort.label
  "    "
  *
  type$ "book" =
  type$ "inbook" =
  or
    'author.editor.sort
    { type$ "proceedings" =
    'editor.organization.sort
    { type$ "manual" =
        'author.organization.sort
        'author.sort
      if$
    }
      if$
    }
  if$
  *
  "    "
  *
  year field.or.null sortify
  *
  "    "
  *
  title field.or.null
  sort.format.title
  *
  #1 entry.max$ substring$
  'sort.key$ :=
}

ITERATE {presort}

SORT

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

INTEGERS { longest.label.width last.extra.num }

FUNCTION {initialize.longest.label}
{ "" 'longest.label :=
  #0 int.to.chr$ 'last.sort.label :=
  "" 'next.extra :=
  #0 'longest.label.width :=
  #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$
  label extra.label * 'label :=
  label width$ longest.label.width >
    { label 'longest.label :=
      label width$ 'longest.label.width :=
    }
    'skip$
  if$
  extra.label 'next.extra :=
}

EXECUTE {initialize.longest.label}

ITERATE {forward.pass}

REVERSE {reverse.pass}

FUNCTION {begin.bib}
{ et.al.char.used
    { "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ }
    'skip$
  if$
  preamble$ empty$
    'skip$
    { preamble$ write$ newline$ }
  if$
  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
  "\expandafter\ifx\csname url\endcsname\relax"
  write$ newline$
  "  \def\url#1{{\tt #1}}\fi"
  write$ newline$
  "\expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi"
  write$ newline$
  "\input babelbst.tex" write$ newline$
  "\newcommand{\Capitalize}[1]{\uppercase{#1}}" write$ newline$
  "\newcommand{\capitalize}[1]{\expandafter\Capitalize#1}" write$ newline$
}

EXECUTE {begin.bib}

EXECUTE {init.state.consts}

ITERATE {call.type$}

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

EXECUTE {end.bib}
%% 
%%
%% End of file `tktl.bst'.
%</tktl>
%    \end{macrocode}
%
% \section{\koodi{babelbst.tex}}
%
%    Tässä tiedostossa hoidetaan aktiivisen kielen tutkiminen ja oikeiden
%    sanakomentojen valinta. Tuetut kielet ovat suomi, ruotsi ja englanti.
%    Jos pakkaus \koodi{Babel} ei käytä mitään näistä kielistä, valitaan
%    käyttöön suomenkieliset versiot sanakomennoista.
%
%    \begin{macrocode}
%<*babelbst>
%%
%% This is file `babelbst.tex',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% merlin.mbs  (with options: `bblbst')
%%
%% Copyright 1994-1999 Patrick W Daly
 % ===============================================================
 % IMPORTANT NOTICE:
 % This bibliographic style (bst) file has been generated from one or
 % more master bibliographic style (mbs) files, listed above.
 %
 % This generated file can be redistributed and/or modified under the terms
 % of the LaTeX Project Public License Distributed from CTAN
 % archives in directory macros/latex/base/lppl.txt; either
 % version 1 of the License, or any later version.
 % ===============================================================
 % Name and version information of the main mbs file:
 % \ProvidesFile{merlin.mbs}[1999/05/28 3.89 (PWD)]
 % This is babelbst.tex for English.
 % It should serve as a model for other languages.
 % Alternatively, store it under a different name (e.g. englbst.tex)
 % and then \input it with a command in babelbst.tex.
\iflanguage{finnish}{\input{finnbst}}{
  \iflanguage{english}{\input{englbst}}{
    \iflanguage{swedish}{\input{swedbst}}{
      \input{finnbst}
    }
  }
}
%%
%%
%% End of file `babelbst.tex'.
%</babelbst>
%    \end{macrocode}
%
% \section{\koodi{finnbst.tex}}
%
%    Suomenkieliset versiot \koodi{tktl}-tyylin käyttämistä
%    sanakomennoista.
%
%    \begin{macrocode}
%<*finnbst>
%%
%% This is file `finnbst.tex',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% merlin.mbs  (with options: `bblbst')
%%
%% Copyright 1994-1999 Patrick W Daly
 % ===============================================================
 % IMPORTANT NOTICE:
 % This bibliographic style (bst) file has been generated from one or
 % more master bibliographic style (mbs) files, listed above.
 %
 % This generated file can be redistributed and/or modified under the terms
 % of the LaTeX Project Public License Distributed from CTAN
 % archives in directory macros/latex/base/lppl.txt; either
 % version 1 of the License, or any later version.
 % ===============================================================
 % Name and version information of the main mbs file:
 % \ProvidesFile{merlin.mbs}[1999/05/28 3.89 (PWD)]
 % This is babelbst.tex for English.
 % It should serve as a model for other languages.
 % Alternatively, store it under a different name (e.g. englbst.tex)
 % and then \input it with a command in babelbst.tex.
\def\bbland{ja}
\def\bbletal{et~al} % Piste sijoitetaan tarvittaessa perään!
\def\bbleditors{toimittajat}
\def\bbleds{toim.}
\def\bbleditor{toimittaja}
\def\bbled{toim.}
\def\bbledby{toimittanut}
\def\bbledition{painos}
\def\bbledn{painos}
\def\bblvolume{osa}
\def\bblvol{osa}
\def\bblof{sarjasta}
\def\bblnumber{numero}
\def\bblno{no.}
\def\bblin{teoksessa}
\def\bblpages{sivut}
\def\bblpp{ss.}
\def\bblpage{sivu}
\def\bblp{s.}
\def\bblchapter{luku}
\def\bblchap{luku}
\def\bbltechreport{tekninen raportti}
\def\bbltechrep{tekn. rap.}
\def\bblmthesis{pro gradu}
\def\bblphdthesis{väitöskirja}
\def\bblfirst{ensimmäinen}
\def\bblfirsto{1.}
\def\bblsecond{toinen}
\def\bblsecondo{2.}
\def\bblthird{kolmas}
\def\bblthirdo{3.}
\def\bblfourth{neljäs}
\def\bblfourtho{4.}
\def\bblfifth{viides}
\def\bblfiftho{5.}
\def\bblst{.}
\def\bblnd{.}
\def\bblrd{.}
\def\bblth{.}
\def\bbljan{tammikuu}
\def\bblfeb{helmikuu}
\def\bblmar{maaliskuu}
\def\bblapr{huhtikuu}
\def\bblmay{toukokuu}
\def\bbljun{kesäkuu}
\def\bbljul{heinäkuu}
\def\bblaug{elokuu}
\def\bblsep{syyskuu}
\def\bbloct{lokakuu}
\def\bblnov{marraskuu}
\def\bbldec{joulukuu}
\def\bblins{sarjassa} % Oma lisäys: "in" series.
\def\bblinj{julkaisussa} % Oma lisäys: "in" journal.
%%
%%
%% End of file `babelbst.tex'.
%</finnbst>
%    \end{macrocode}
%
% \section{\koodi{englbst.tex}}
%
%    Englanninkieliset versiot \koodi{tktl}-tyylin käyttämistä
%    sanakomennoista.
%
%    \begin{macrocode}
%<*englbst>
%%
%% This is file `englbst.tex',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% merlin.mbs  (with options: `bblbst')
%%
%% Copyright 1994-1999 Patrick W Daly
 % ===============================================================
 % IMPORTANT NOTICE:
 % This bibliographic style (bst) file has been generated from one or
 % more master bibliographic style (mbs) files, listed above.
 %
 % This generated file can be redistributed and/or modified under the terms
 % of the LaTeX Project Public License Distributed from CTAN
 % archives in directory macros/latex/base/lppl.txt; either
 % version 1 of the License, or any later version.
 % ===============================================================
 % Name and version information of the main mbs file:
 % \ProvidesFile{merlin.mbs}[1999/05/28 3.89 (PWD)]
 % This is babelbst.tex for English.
 % It should serve as a model for other languages.
 % Alternatively, store it under a different name (e.g. englbst.tex)
 % and then \input it with a command in babelbst.tex.
\def\bbland{and}
\def\bbletal{et~al} % Piste sijoitetaan tarvittaessa perään!
\def\bbleditors{editors}        \def\bbleds{eds.}
\def\bbleditor{editor}          \def\bbled{ed.}
\def\bbledby{edited by}
\def\bbledition{edition}        \def\bbledn{edn.}
\def\bblvolume{volume}          \def\bblvol{vol.}
\def\bblof{of}
\def\bblnumber{number}          \def\bblno{no.}
\def\bblin{in}
\def\bblpages{pages}            \def\bblpp{pp.}
\def\bblpage{page}              \def\bblp{p.}
\def\bblchapter{chapter}        \def\bblchap{chap.}
\def\bbltechreport{Technical Report}
\def\bbltechrep{Tech. Rep.}
\def\bblmthesis{Master's thesis}
\def\bblphdthesis{Ph.D. thesis}
\def\bblfirst{first}            \def\bblfirsto{1st}
\def\bblsecond{second}          \def\bblsecondo{2nd}
\def\bblthird{third}            \def\bblthirdo{3rd}
\def\bblfourth{fourth}          \def\bblfourtho{4th}
\def\bblfifth{fifth}            \def\bblfiftho{5th}
\def\bblst{st}  \def\bblnd{nd}  \def\bblrd{rd}
\def\bblth{th}
\def\bbljan{January}  \def\bblfeb{February}  \def\bblmar{March}
\def\bblapr{April}    \def\bblmay{May}       \def\bbljun{June}
\def\bbljul{July}     \def\bblaug{August}    \def\bblsep{September}
\def\bbloct{October}  \def\bblnov{November}  \def\bbldec{December}
\def\bblins{in} % Oma lisäys: "in" series.
\def\bblinj{in} % Oma lisäys: "in" journal.
%%
%%
%% End of file `babelbst.tex'.
%</englbst>
%    \end{macrocode}
%
% \section{\koodi{swedbst.tex}}
%
%    Ruotsinkieliset versiot \koodi{tktl}-tyylin käyttämistä
%    sanakomennoista.
%
%    \begin{macrocode}
%<*swedbst>
%%
%% This is file `swedbst.tex',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% merlin.mbs  (with options: `bblbst')
%%
%% Copyright 1994-1999 Patrick W Daly
 % ===============================================================
 % IMPORTANT NOTICE:
 % This bibliographic style (bst) file has been generated from one or
 % more master bibliographic style (mbs) files, listed above.
 %
 % This generated file can be redistributed and/or modified under the terms
 % of the LaTeX Project Public License Distributed from CTAN
 % archives in directory macros/latex/base/lppl.txt; either
 % version 1 of the License, or any later version.
 % ===============================================================
 % Name and version information of the main mbs file:
 % \ProvidesFile{merlin.mbs}[1999/05/28 3.89 (PWD)]
 % This is babelbst.tex for English.
 % It should serve as a model for other languages.
 % Alternatively, store it under a different name (e.g. englbst.tex)
 % and then \input it with a command in babelbst.tex.
\def\bbland{och}
\def\bbletal{et.al} % Piste sijoitetaan tarvittaessa perään!
\def\bbleditors{redaktörer}
\def\bbleds{red.}
\def\bbleditor{redaktör}
\def\bbled{red.}
\def\bbledby{redigerad av}
\def\bbledition{utgåva}
\def\bbledn{utg.}
\def\bblvolume{volym}
\def\bblvol{vol.}
\def\bblof{ur serien}
\def\bblnumber{nummer}
\def\bblno{nr.}
\def\bblin{i verket}
\def\bblpages{sidorna}
\def\bblpp{ss.}
\def\bblpage{sidan}
\def\bblp{s.}
\def\bblchapter{kapitel}
\def\bblchap{kap.}
\def\bbltechreport{teknisk rapport}
\def\bbltechrep{tekn.rap.}
\def\bblmthesis{pro gradu}
\def\bblphdthesis{doktorsavhandling}
\def\bblfirst{första}
\def\bblfirsto{första}
\def\bblsecond{andra}
\def\bblsecondo{andra}
\def\bblthird{tredje}
\def\bblthirdo{tredje}
\def\bblfourth{fjärde}
\def\bblfourtho{fjärde}
\def\bblfifth{femte}
\def\bblfiftho{femte}
\def\bblst{:a}  \def\bblnd{:a}  \def\bblrd{:e}
\def\bblth{:e}
\def\bbljan{januari}  \def\bblfeb{februari}  \def\bblmar{mars}
\def\bblapr{april}    \def\bblmay{maj}       \def\bbljun{juni}
\def\bbljul{juli}     \def\bblaug{augusti}   \def\bblsep{september}
\def\bbloct{oktober}  \def\bblnov{november}  \def\bbldec{december}
\def\bblins{i serie} % Oma lisäys: "in" series.
\def\bblinj{i journalen} % Oma lisäys: "in" journal.
%%
%%
%% End of file `babelbst.tex'.
%</swedbst>
%    \end{macrocode}
%
% \section{Käyttöohjeet}
%
%    \begin{macrocode}
%<*ohjeet>
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%                                                                         %
%% BibTeX-tyylin tktl käyttöohje                                           %
%% Mikael Puolakka 16.9.2002                                                %
%%                                                                         %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\documentclass[gradu,emptyfirstpagenumber]{tktltiki}
\usepackage{url}

\newcommand{\filedate}{16.9.2002}

\newcommand{\koodi}[1]{\texttt{#1}}

\newcommand{\luokka}{\koodi{tktltiki}}

\newcommand{\bibtyyli}{\koodi{tktl}}

\newcommand{\koodikoko}{\footnotesize}

\def\BibTeX{{\rmfamily B\kern-.05em%
  \textsc{i\kern-.025em b}\kern-.08em%
  T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}

\begin{document}

\title{\BibTeX-tyylin \bibtyyli\ käyttöohje}
\author{Mikael Puolakka}
\date{\filedate}
\faculty{Matemaattis-luonnontieteellinen}
\department{Tietojenkäsittelytieteen laitos}
\level{Käyttöohje}
\additionalinformation{Tämä on \BibTeX-tyylin \bibtyyli\ käyttöohje.}
\numberofpagesinformation{\numberofpages\ sivua}
\classification{A.1, I.7.m}
\keywords{käyttöohje, \LaTeX-dokumenttiluokka, \BibTeX-tyyli}

\maketitle

\begin{abstract}
\BibTeX -tyyli \bibtyyli\ perustuu \LaTeX-ladontajärjestelmän
standardityyliin \koodi{alpha}. \BibTeX-tyyli \bibtyyli\ tarjoaa kuitenkin
monia uusia ominaisuuksia, kuten mahdollisuuden tehdä ruotsin- tai
suomenkielinen lähdeluettelo, WWW-versiot kaikista merkintätyypeistä ja
mahdollisuuden määrittää lähdeviitteen tunniste itse.
\end{abstract}

\mytableofcontents

\section{Johdanto}

Tämä dokumentti on \BibTeX -tyylin \bibtyyli\ käyttöohje. Lisäksi tässä
dokumentissa käsitellään lyhyesti \BibTeX-ohjelman käyttöä.

\section{\BibTeX-tyylin \bibtyyli\ käyttö}

Tyyli \bibtyyli\ on tyylistä \koodi{alpha} muunneltu \BibTeX -tyyli. Tyyli
\bibtyyli\ käyttää kielisensitiivisissä kohdissa joko suomen, ruotsin tai
englannin kieltä sen mukaan, mikä näistä kielistä on
\koodi{Babel}-pakkauksen käytössä kirjallisuus- tai lähdeluettelon
luontihetkellä. Tyylin \bibtyyli\ käytön ehtona on siis se, että paketti
\koodi{Babel} on käytössä ja joko suomen, ruotsin tai englannin kieli on
aktiivisena. Jos valittuna on joku muu kieli kuin suomi, ruotsi tai
englanti, kielisensitiivisissä kohdissa käytetään suomen kieltä.

Mikäli \LaTeX-käsikirjoitustiedostossasi \verb|\documentclass|-komennolla
valitsemasi\linebreak luokka ei lataa automaattisesti \koodi{Babel}-pakkausta, voit
tehdä tämän itse komennolla
\begin{verbatim}
    \usepackage[<kieli>]{babel}
\end{verbatim}
jossa kieli on \koodi{finnish} (suomi), \koodi{english} (englanti) tai
\koodi{swedish} (ruotsi). Esimerkiksi \verb|\usepackage[finnish]{babel}|
ottaa käyttöön \koodi{Babel}-pakkauksen ja valitsee kieleksi suomen.

\subsection{Merkintätyypit (entry types)}
\label{merkintatyypit}

Kun \BibTeX-ohjelmaa käytetään lähdeluettelon tuottamiseen, lähteet täytyy
kirjata erityiseen tietokantaan, josta \BibTeX\ poimii viitattujen lähteiden
tiedot. Tällaisena \BibTeX-tietokantana toimii \koodi{BIB}-päätteiset
tiedostot, esim.\ \koodi{lahteet.bib}. Tietokantatiedoston nimenä voi toki
olla mikä tahansa tiedoston nimeksi kelpaava nimi.

Kun lähdeviitteitä merkitään tietokantaan, on päätettävä minkätyyppinen
tietokantamerkintä on kyseessä. Merkintätyyppi
(\foreignlanguage{english}{entry type}) tarkoittaa siis viitattavan
lähteen tyyppiä, joka voi olla artikkeli, kirja, väitöskirja, tekninen
raportti tai jokin muu. Merkinnässä {\koodikoko
\begin{verbatim}
    @BOOK(fogelbergetal89,
      AUTHOR    = "Fogelberg, P. and Herranen, M. and Sinikara, K.",
      TITLE     = "Tuumasta toimeen, tutkielman tekijän opas",
      PUBLISHER = "Yliopistopaino",
      YEAR      = 1989,
      ADDRESS   = "Helsinki")
\end{verbatim}
}
\koodi{@BOOK} ilmoittaa, että tämän merkinnän tyyppi on \emph{kirja}.
Merkkijono \koodi{fogelberge\-tal89} on puolestaan se tunniste, jonka
avulla \LaTeX-käsikirjoitustiedostossa viitataan kyseiseen lähteeseen.
Lähteisiin viittaaminen käsikirjoitustiedostossa tapahtuu
\verb|\cite|-komennolla, joten esimerkkilähteeseen viitataan
kirjoittamalla\linebreak \verb|\cite{fogelbergetal89}|
\LaTeX-käsikirjoitustiedostoon.

Käytettävissä olevat merkintätyypit riippuvat siitä, mitä
\BibTeX-tyyliä käytetään lähdeluettelon luonnissa. Käytetty \BibTeX-tyyli
määritetään puolestaan varsinaisessa \LaTeX-käsikirjoitustiedostossa
komennolla \verb|\bibliographystyle{<tyyli>}|, jossa tyyli on käytettävä
\BibTeX-tyyli. Esimerkiksi käsikirjoitustiedostoon kirjoitettu komento
\verb|\bibliographystyle{tktl}| merkitsee sitä, että lähdeluettelon
luonnissa käytettävä tyyli on \koodi{tktl}.

\BibTeX -tyylissä \bibtyyli\ on käytössä kaikki samat merkintätyypit kuin
standardityylissä \koodi{alpha}. Lisäksi jokaisesta merkintätyypistä on
olemassa ''WWW-versio'', joka eroaa kahdella tavalla alkuperäisestä
merkintätyypistä:
\begin{enumerate}
\item Kenttä \koodi{URL} on pakollinen.
\item Uudella kentällä \koodi{valid} ilmoitetaan päivämäärä, jolloin linkin
voimassaolo ja lähteen sisältö on tarkastettu.
\end{enumerate}
Merkintätyyppien WWW-versiot aloitetaan kirjoittamalla
\koodi{BIB}-tiedostoon\linebreak \verb|@WWW-<merkintätyyppi>(...|, jossa
\verb|<merkintätyyppi>| korvataan sen merkintätyypin nimellä, jonka
WWW-versiota halutaan käyttää. Näin ollen WWW-lähteisiin viittaavat
tietokantamerkinnät alkavat seuraavasti: \verb|@WWW-ARTICLE|,
\verb|@WWW-BOOK|,\linebreak \verb|@WWW-BOOKLET|, jne.

Alla olevassa listassa on lueteltu tyylin \bibtyyli\ mahdolliset
merkintätyypit lukuunottamatta merkintätyyppien WWW-versioita. Jokaisen
merkintätyypin yhteydessä on lueteltu merkintätyypin tarpeelliset ja
valinnaiset kentät.\footnote{Kenttiä käsitellään tarkemmin
luvussa~\ref{kentat}.}

Tarpeellinen kenttä on sellainen, joka tulisi sisällyttää
tietokantamerkintään. Sen poisjättäminen saattaa johtaa huonosti
muotoiltuun lähdeluettelomerkintään.\linebreak \BibTeX-ohjelma tuottaa
virheilmoituksen puuttuvasta tarpeellisesta kentästä.

Valinnainen kenttä on sellainen, jonka poisjättämisestä ei aiheudu
ongelmia. Viitteen tulisi kuitenkin sisältää kaikki tiedot, jotka
saattaisivat auttaa lukijaa, joten on suositeltavaa sisällyttää myös
kaikki valinnaiset kentät tietokantamerkintään mikäli mahdollista.

\begin{description}
\item[article] \texttt{} \\
Artikkeli jonkintyyppisestä aikakausjulkaisusta tai lehdestä. Tarpeelliset
kentät: \koodi{author}, \koodi{title}, \koodi{journal}, \koodi{year}.
Valinnaiset kentät: \koodi{volume}, \koodi{number}, \koodi{pages},
\koodi{month}, \koodi{note}, \koodi{url}, \koodi{bibitemlabel}.
\item[book] \texttt{} \\
Kirja selvästi ilmaistulla kustantajalla. Tarpeelliset kentät:
\koodi{author} tai \koodi{editor}, \koodi{title}, \koodi{publisher},
\koodi{year}. Valinnaiset kentät: \koodi{volume} tai \koodi{number},
\koodi{series}, \koodi{address}, \koodi{edition}, \koodi{month},
\koodi{note}, \koodi{url}, \koodi{bibitemlabel}.
\item[booklet] \texttt{} \\
Työ, joka on painettu ja sidottu mutta ilman nimettyä julkaisijaa tai
kustantavaa instituutiota. Tarpeellinen kenttä: \koodi{title}. Valinnaiset
kentät: \koodi{author}, \koodi{howpublished}, \koodi{address},
\koodi{month}, \koodi{year}, \koodi{note}, \koodi{url},
\koodi{bibitemlabel}.
\item[conference] \texttt{} \\
Sama kuin \textbf{inproceedings}.
\item[inbook] \texttt{} \\
Osa kirjasta, tavallisesti ilman nimikettä tai otsikkoa. Saattaa olla luku
(tai muu jaksollinen yksikkö) ja/tai joukko sivuja. Tarpeelliset kentät:
\koodi{author} tai \koodi{editor}, \koodi{title}, \koodi{chapter} ja/tai
\koodi{pages}, \koodi{publisher}, \koodi{year}. Valinnaiset kentät:
\koodi{volume} tai \koodi{number}, \koodi{series}, \koodi{type},
\koodi{address}, \koodi{edition}, \koodi{month}, \koodi{note}, \koodi{url},
\koodi{bibitemlabel}.
\item[incollection] \texttt{} \\
Osa kirjasta omalla otsikollaan. Tarpeelliset kentät: \koodi{author}, 
\koodi{title}, \koodi{booktitle}, \koodi{publisher}, \koodi{year}.
Valinnaiset kentät: \koodi{editor}, \koodi{volume} tai \koodi{number},
\koodi{series}, \koodi{type}, \koodi{chapter}, \koodi{pages},
\koodi{address}, \koodi{edition}, \koodi{month}, \koodi{note}, \koodi{url},
\koodi{bibitemlabel}.
\item[inproceedings] \texttt{} \\
Artikkeli konferenssijulkaisussa. Tarpeelliset kentät: \koodi{author},
\koodi{title}, \koodi{booktitle}, \koodi{year}. Valinnaiset kentät:
\koodi{editor}, \koodi{volume} tai \koodi{number}, \koodi{series},
\koodi{pages}, \koodi{address}, \koodi{month}, \koodi{organization},
\koodi{publisher}, \koodi{note}, \koodi{url}, \koodi{bibitemlabel}.
\item[manual] \texttt{} \\
Tekninen dokumentaatio. Tarpeellinen kenttä: \koodi{title}. Valinnaiset
kentät: \koodi{author}, \koodi{organization}, \koodi{address},
\koodi{edition}, \koodi{month}, \koodi{year}, \koodi{note}, \koodi{url},
\koodi{bibitemlabel}.
\item[mastersthesis] \texttt{} \\
Pro gradu -tutkielma tai vastaava. Tarpeelliset kentät: \koodi{author},
\koodi{title}, \koodi{school}, \koodi{year}. Valinnaiset kentät:
\koodi{type}, \koodi{address}, \koodi{month}, \koodi{note}, \koodi{url},
\koodi{bibitemlabel}.
\item[misc] \texttt{} \\
Käytä tätä merkintätyyppiä, kun mikään muu ei ole sopiva. Valinnaiset
kentät: \koodi{author}, \koodi{title}, \koodi{howpublished}, \koodi{month},
\koodi{year}, \koodi{note}, \koodi{url}, \koodi{bibitemlabel}.
\item[phdthesis] \texttt{} \\
Väitöskirja tai vastaava. Tarpeelliset kentät: \koodi{author},
\koodi{title}, \koodi{school}, \koodi{year}. Valinnaiset kentät:
\koodi{type}, \koodi{address}, \koodi{month}, \koodi{note}, \koodi{url},
\koodi{bibitemlabel}.
\item[proceedings] \texttt{} \\
Konferenssijulkaisu. Tarpeelliset kentät: \koodi{title}, \koodi{year}.
Valinnaiset kentät: \koodi{editor}, \koodi{volume} tai \koodi{number},
\koodi{series}, \koodi{address}, \koodi{month}, \koodi{organization},
\koodi{publisher}, \koodi{note}, \koodi{url}, \koodi{bibitemlabel}.
\item[techreport] \texttt{} \\
Koulun tai muun instituution julkaisema raportti, tavallisesti numeroitu
sarjassa. Tarpeelliset kentät: \koodi{author}, \koodi{title},
\koodi{institution}, \koodi{year}. Valinnaiset kentät: \koodi{type},
\koodi{number}, \koodi{address}, \koodi{month}, \koodi{note}, \koodi{url},
\koodi{bibitemlabel}.
\item[unpublished] \texttt{} \\
Dokumentti kirjoittajalla ja nimellä, mutta ei virallisesti julkaistu.
Tarpeelliset kentät: \koodi{author}, \koodi{title}, \koodi{note}.
Valinnaiset kentät: \koodi{month}, \koodi{year}, \koodi{url},
\koodi{bibitemlabel}.
\end{description}

WWW-lähde ilmoitetaan asianomaisen merkintätyypin WWW-versiolla.
Merkintätyyppien WWW-versioista kerrotaan enemmän tämän aliluvun alussa.

\subsection{Kentät (fields)}
\label{kentat}

Tietokantamerkintöjen ominaisuudet ilmoitetaan kentillä
(\foreignlanguage{english}{fields}). Esimerkiksi kirjalla on kirjoittaja,
nimi, kustantaja ja julkaisuvuosi, jotka ilmoitetaan kenttien
\koodi{author}, \koodi{title}, \koodi{publisher} ja \koodi{year} avulla.
Merkinnästä
{\koodikoko
\begin{verbatim}
    @INPROCEEDINGS(dantowsley90,
      AUTHOR    = "Dan, A. and D. Towsley",
      TITLE     = "An approximate analysis of the {LRU} and {FIFO}
                   buffer replacement schemes",
      BOOKTITLE = "Proc. {ACM} Conf.\ Measurement and
                   Modeling of Computer Systems",
      YEAR      = 1990,
      PAGES     = "143--152",
      ADDRESS   = "Boulder, Colorado, {USA}",
      MONTH     = may)
\end{verbatim}
}
näemme monia yksityiskohtia liittyen kenttien käyttöön. Näistä tärkeimmät
ja pari ylimääräistäkin on lueteltu alla olevassa listassa.

\begin{itemize}
\item
Merkkijonot kirjoitetaan joko \verb|"|-merkkien tai toisiaan vastaavien
\verb|{|- ja \verb|}|-merk\-kien väliin.
\item
Lainausmerkit tai sulut voi jättää pois pelkkiä numeroita sisältävistä
teksteistä.
\item
Kuukaudet kirjoitetaan ilman lainausmerkkejä tai sulkuja käyttäen
kolmikirjaimisia englanninkielisiä lyhenteitä \koodi{jan}, \koodi{feb},
\koodi{mar}, \koodi{apr}, \koodi{may}, \koodi{jun}, \koodi{jul},
\koodi{aug}, \koodi{sep}, \koodi{oct}, \koodi{nov} ja \koodi{dec}.
\item
Nimet voi kirjoittaa joko \koodi{"Etunimi Sukunimi"} tai \koodi{"Sukunimi,
Etunimi"}. Jos sukunimi koostuu useasta isolla kirjaimella alkavasta osasta,
jälkimmäistä, pilkullista muotoa tulisi käyttää. Esimerkiksi Jackie Onassis
Kennedy tulisi syöttää muodossa \koodi{"Onassis Kennedy, Jackie"}. Jos
kirjoitat \koodi{"Jackie Onassis Kennedy"}, \BibTeX\ luulee, että
''Onassis'' on hänen toinen etunimensä.
\item
''Juniorit'' kirjoitetaan seuraavalla tavalla: \koodi{"Ford, Jr., Henry"}.
\item
Jos kirjoittajia tai toimittajia on useita, heidän nimensä erotellaan
sanalla \koodi{and}. Esimerkiksi henkilöiden Bray, Paoli ja Sperberg-McQueen
toimittaman työn \koodi{EDITOR}-kenttä saa seuraavanlaisen muodon:
\begin{verbatim}
    EDITOR = "Bray, T. and Paoli, J. and Sperberg-McQueen, C.M."
\end{verbatim}
\item
Jos kirjoittajien tai toimittajien nimiä on enemmän kuin jaksat kirjoittaa,
lopeta nimien lista kirjoittamalla \koodi{and others}. Standardityylit ja
\bibtyyli\ muuttavat tämän lähdeluetteloon tekstiksi ''et~al.''
\item
Kirjojen ynnä muiden teosten nimet tulisi kirjoittaa alkuperäismuodossaan,
isot ja pienet kirjaimet oikeilla paikoillaan. Tarvittaessa \BibTeX\
kuitenkin muuttaa isoja kirjaimia pieniksi, joten ne isot kirjaimet tai
sanat joita ei saa muuttaa, pitäisi sulkea aaltosulkeisiin. Seuraavat kaksi
nimeä ovat yhtäpitäviä eli kirjainta \emph{A} sanassa \emph{Africa} ei
muuteta pieneksi kirjaimeksi:
\begin{verbatim}
    "The Gnats and Gnus of {Africa}"
    "The Gnats and Gnus of {A}frica"
\end{verbatim}
\item
Tyyliä \bibtyyli\ käytettäessä {1.\ --~5.\ painoksen} voi ilmoittaa
englanninkielisillä järjestyssanoilla \koodi{"First"}, \koodi{"Second"},
\koodi{"Third"}, \koodi{"Fourth"} ja \koodi{"Fifth"}. Painoksen voi aina
ilmoittaa myös pelkän numeron avulla, joten seuraavat merkinnät ovat
yhtäpitäviä:
\begin{verbatim}
    EDITION = 3
    EDITION = "First"
\end{verbatim}
\end{itemize}

Alla olevassa listassa on lueteltu \BibTeX -tyylin \bibtyyli\ tunnistamat
kentät. Kentät ovat samat kuin standardityylissä \koodi{alpha} lisättynä
kentällä \koodi{url}, joka saa arvokseen \mbox{URL}-osoitteen\footnote{
\mbox{URLin} mainitsemista käsitellään tarkemmin luvussa~\ref{url}.} ja
kentällä \koodi{bibitemlabel}, joka saa arvokseen käyttäjän määrittelemän
tunnisteen kyseiselle lähteelle.

\begin{description}
\item[address] \texttt{} \\
Yleensä kentän \koodi{publisher} kustantajan tai kentän
\koodi{institution} instituution osoite.
\item[author] \texttt{} \\
Kirjoittajan nimi. Jos useita kirjoittajia, kirjoittajien nimet
eroteltuina sanalla \koodi{and}.
\item[bibitemlabel] \texttt{} \\
Lähteen tunniste. Korvaa automaattisesti tuotetun tunnisteen.
\item[booktitle] \texttt{} \\
Kirjan nimi, otsikoitu osa jota lainataan. Käytetään ainoastaan
merkintätyypeillä \koodi{incollection} ja \koodi{inproceedings}.
\item[chapter] \texttt{} \\
Luvun (tai muun jaksollisen yksikön) numero.
\item[crossref] \texttt{} \\
Sen tietokantamerkinnän tunniste, johon ristiviitataan.
\item[edition] \texttt{} \\
Kirjan painos. \BibTeX-tyylissä \bibtyyli\ painokset ilmoitetaan helpoiten
pelkän numeron avulla, esim.\ \koodi{2}.
\item[editor] \texttt{} \\
Toimittajan nimi. Jos useita toimittajia, toimittajien nimet
eroteltuina sanalla \koodi{and}.
\item[howpublished] \texttt{} \\
Kuinka jokin kirjoitus tai muu julkaistiin.
\item[institution] \texttt{} \\
Teknisen raportin kustantava instituutio.
\item[journal] \texttt{} \\
Jonkintyyppisen aikakausjulkaisun tai lehden nimi.
\item[key] \texttt{} \\
Käytetään tunnisteen aakkostamiseen ja luomiseen, kun \koodi{author}- ja
\koodi{editor}-kentät puuttuvat. Tätä kenttää ei pitäisi sekoittaa sen
\emph{tunnisteen} kanssa, joka esiintyy \verb|\cite|-komennossa ja
tietokantamerkinnän alussa merkintätyypin jälkeen.
\item[month] \texttt{} \\
Se kuukausi, jolloin työ julkaistiin tai jolloin julkaisematon työ
kirjoitettiin. Käytä kolmikirjaimisia lyhenteitä, joista kerrottiin
yllä.
\item[note] \texttt{} \\
Mikä tahansa lisäinformaatio, joka voi auttaa lukijaa. Ensimmäinen sana
pitäisi aloittaa isolla kirjaimella.
\item[number] \texttt{} \\
Lehden, teknisen raportin tai kirjasarjan osan numero.
\item[organization] \texttt{} \\
Organisaatio, joka kustantaa konferenssin tai julkaisee teknisen
dokumentaation.
\item[pages] \texttt{} \\
Sivunumerot, esim.\ \verb|69--99| tai \verb|1,3,6--66,69|.
\item[publisher] \texttt{} \\
Kustantajan nimi.
\item[school] \texttt{} \\
Sen koulun nimi, missä pro gradu -tutkielma, väitöskirja,
lisensiaatintutkielma tai vastaava kirjoitettiin.
\item[series] \texttt{} \\
Kirjasarjan tai -kokoelman nimi. Kun lainataan kokonaista kirjaa,
\koodi{title}-kentän arvona on kirjan nimi ja valinnaisen
\koodi{series}-kentän arvona on sarjan tai kokoelman nimi, jossa kirja
julkaistiin.
\item[title] \texttt{} \\
Työn nimi tai otsikko.
\item[type] \texttt{} \\
Teknisen raportin tyyppi, esimerkiksi ''Research Note''. Käytetään myös
määrittämään jaksollisen yksikön tyyppi \koodi{inbook}- ja
\koodi{incollection}-tyypeissä ja tarkentamaan tutkielman tai vastaavaan
tyyppiä tietokantamerkinnöissä\linebreak \koodi{mastersthesis} ja \koodi{phdthesis}.
\item[url] \texttt{} \\
WWW-sivun osoite.
\item[volume] \texttt{} \\
Lehden vuosikerta tai moniosaisen kirjan nide.
\item[year] \texttt{} \\
Ilmestymisvuosi tai julkaisemattomassa työssä kirjoittamisvuosi. Koostuu
yleensä pelkistä numeroista, mutta voi olla myös esim.\
\koodi{circa 1492}.
\end{description}

Jokaisella merkintätyypillä on valinnainen kenttä \koodi{KEY}, jota
käytetään viitteen tunnisteen aakkostamiseen ja muodostamiseen. Jokaiseen
tietokantamerkintään, josta puuttuu \koodi{AUTHOR} tai tekijän
korvike\footnote{Esimerkiksi\ \koodi{EDITOR} tai \koodi{ORGANIZATION} voi
merkintätyypistä riippuen korvata tekijän.}, tulisi sisällyttää
\koodi{KEY}-kenttä.

Jokaisella merkintätyypillä on myös valinnainen
kenttä \koodi{bibitemlabel}, jonka arvolla korvataan \BibTeX-tyylin
\bibtyyli\ automaattisesti tuottama lähteen tunniste. Kentän olemassaolo
johtuu siitä, että tyylin \bibtyyli\ tuottamat lähteiden tunnisteet ovat
joissain tapauksissa ''laittomia'' eli ne eivät noudata kaikkein tiukimpia
lähteiden tunnisteita koskevia sääntöjä.\footnote{Sama pätee myös monien
muiden \BibTeX-tyylien, kuten tyylin \koodi{alpha}, kohdalla.} Tämän vuoksi
on ollut tarpeen antaa \BibTeX-tyylin \bibtyyli\ käyttäjälle mahdollisuus
määrittää lähteiden tunnisteita itse. Huomaa, ettei
\LaTeX-ladontajärjestelmän standardibibliografiatyyleissä ole kenttää
\koodi{bibitemlabel}.

Useat mainitut lähteet saattavat olla osa isompaa työtä, esimerkiksi
artikkelit konferenssijulkaisussa. Tällöin voidaan tehdä yksi
tietokantamerkintä konferenssijulkaisulle ja viitata tähän merkintään
yksittäisten artikkelien merkinnöissä. Näin konferenssijulkaisun
tietokantamerkinnässä esiintyviä kenttiä ei tarvitse kopioida artikkelien
merkintöihin. Artikkelin jokaisen pakollisen kentän on kuitenkin oltava
joko artikkelin tietokantamerkinnässä tai viitatussa merkinnässä.
Tällaisia ristiviittauksia tehdään \koodi{CROSSREF}-kentän avulla
esimerkiksi seuraavasti:
\begin{verbatim}
    @INPROCEEDINGS(crossrefered,
      AUTHOR    = "John Doe",
      TITLE     = "The Unknown",
      PAGES     = "23--24",
      CROSSREF  = "crossreferer")

    @PROCEEDINGS(crossreferer,
      TITLE     = "Seventh Conference on The Superunknown",
      BOOKTITLE = "Seventh Conference on The Superunknown",
      EDITOR    = "Jane Doe",
      YEAR      = 2002)
\end{verbatim}
Ristiviitatun tietokantamerkinnän, kuten \koodi{crossreferer} esimerkissä,
täytyy tulla \koodi{BIB}-tiedostossa kaikkien sellaisten merkintöjen
jälkeen, jotka viittaavat siihen.

\subsection{URLin mainitseminen}
\label{url}

Käytännöllinen tekniikka \mbox{URLin} mainitsemiseen
\koodi{BIB}-tietokantatiedostossa on kirjoittaa se \koodi{NOTE}-kenttään
esimerkiksi seuraavasti:
\begin{verbatim}
    @techreport{...,
      ...,
      NOTE = "Also available as \url{http://...}"
    }
\end{verbatim}

Tyylissä \bibtyyli\ \mbox{URLille} on oma kenttänsä \koodi{URL}, jota
käyttämällä edellisen esimerkin \mbox{URLin} voi ilmoittaa seuraavasti:
\begin{verbatim}
    @techreport{...,
      ...,
      URL = "http://..."
    }
\end{verbatim}
Tämä lisää \BibTeX-ohjelman tuottamaan lähdeluetteloon \mbox{URLin} eteen
tekstin \emph{URL}. Huomaa, ettei kentän \koodi{URL} kanssa käytetä
\verb|\url|-komentoa.

Pakkauksen \koodi{url} tai \koodi{hyperref} käyttö on \mbox{URLeja}
mainitessa suositeltavaa, koska niiden sisältämä \verb|\url|-komento jättää
oletusarvoisesti huomioon ottamatta välilyönnit parametrissaan.
\BibTeX-ohjelmalla on tapana katkaista rivejä, joita se pitää liian
pitkinä, ja jos tekstissä ei ole välilyöntejä tai rivivaihtoja joita
\BibTeX\ voisi käyttää ''luonnollisina'' katkaisukohtina, se liittää
tekstiin \verb|%|-merkin. Tämä on hyväksyttävä merkki \mbox{URLissa},
joten \verb|\url| latoo sen. Siksi on syytä liittää ylimääräisiä
välilyöntejä tai rivinvaihtoja itse \mbox{URLiin} \koodi{bib}-tiedostoon
ja antaa näin \BibTeX-ohjelmalle mahdollisuus tehdä järkeviä
rivinkatkaisupäätöksiä.

\mbox{URLien} käytössä hyvännäköiseen lopputulokseen pääsee siis
seuraavasti:
\begin{enumerate}
\item
Kirjoita \LaTeX-käsikirjoitustiedoston johdanto-osuuteen\footnote{Se osa
käsikirjoitustiedostosta, joka edeltää
$\mathtt{\backslash}$\koodi{begin\{document\}}-komentoa.}
\verb|\usepackage{url}| tai \verb|\usepackage{hyperref}|
\item{\sloppy
Kirjoita \koodi{BIB}-tiedostoon kaikkien muiden kenttien kuin
\koodi{URL}-kentän \mbox{URLit} käyttäen \verb|\url|-komentoa, esim.\
\verb|\url{http://www.cs.Helsinki.FI/}|, ja \koodi{URL}-ken\-tän \mbox{URLit}
ilman mitään komentoja, esim.\ \verb|http://www.espoo.fi/|}
\item Jos \mbox{URL} on niin pitkä, ettei se todennäköisesti mahdu yhdelle
riville valmiissa dokumentissa, lisää siihen ylimääräisiä välilyöntejä tai
rivinvaihtoja \koodi{BIB}-tiedostoon. Uusimpien \koodi{hyperref}-pakkausten
kanssa tämä vaihe on tarpeeton, sillä niiden mukana tuleva
\verb|\url|-komento poistaa ei-toivotut merkit.
\end{enumerate}

Näiden ohjeiden mukainen tietokantamerkintä voisi näyttää vaikkapa
seuraavanlaiselta:
{\koodikoko
\begin{verbatim}
    @BOOK(mp1,
      ...,
      YEAR      = 2003,
      NOTE      = "Löytyy ilmestyessään osoitteesta
                   {\url{http://www.liianpitkadomain.fi/
                   jatkuu/ja/jatkuu/ja/jatkuu/
                   kunnes/loppuu/jos/loppuu/
                   index.html}}",
      URL       = "http://www.liianpitkadomain.fi/
                   jatkuu/ja/jatkuu/ja/jatkuu/
                   kunnes/loppuu/jos/loppuu/
                   index.html")
\end{verbatim}
}
Huomaa, että \mbox{URL} on merkitty esimerkissä kaksi kertaa
ainoastaan havainnollisuuden vuoksi. Oikeassa tietokantamerkinnässä riittää
mainita \mbox{URL} vain kerran.

Mikäli lähde on julkaistu ainoastaan verkossa, tietokantamerkinnän
tyyppinä voidaan käyttää asianomaisen merkintätyypin WWW-versiota.
Merkintätyyppien\linebreak WWW-versioita käsitellään tarkemmin
luvussa~\ref{merkintatyypit}.

\subsection{Muutama ohje kentän \koodi{TYPE} käytöstä}

Kentällä \koodi{TYPE} on mahdollista muuttaa joidenkin tuotosten tyyppiä.
Esimerkiksi merkintätyypit \koodi{techreport}, \koodi{mastersthesis} ja
\koodi{phdthesis} ovat sellaisia, joiden ''oletustyyppiä'' on mahdollista
muuttaa kirjoittamalla \koodi{TYPE}-kentän arvoksi jokin vaihtoehtoinen
tyyppi. Lisäksi kentällä \koodi{TYPE} voidaan täsmentää merkintätyyppien
\koodi{inbook} ja \koodi{incollection} jaksollinen yksikkö.

Tavallisesti merkintätyypillä \koodi{mastersthesis} viitataan pro gradu
-tutkielmaan ja merkintätyypillä \koodi{phdthesis} väitöskirjaan.
Lisensiaatintutkielmiin ja vastaaviin voidaan viitata niin ikään
\koodi{mastersthesis}- tai \koodi{phdthesis}-merkintätyypeillä. Tällöin
kentän \koodi{TYPE} arvoksi on kirjoitettava se työ, joka on kyseessä,
esim.\ seuraavasti:
\begin{verbatim}
    @MASTERSTHESIS(mp2,
      ...,
      SCHOOL  = "Helsingin yliopisto, Tietojenkäsittelytieteen laitos",
      TYPE    = "Lisensiaatintutkimus")
\end{verbatim}


\section{Lähdeluettelon tuottaminen \BibTeX-ohjelmaa\newline käyttäen}
%%\section{\BibTeX n osuus \LaTeX -käsikirjoitustiedostossa}

\label{lahdeluettelo}

\BibTeX\ on erillinen ohjelma, joka tuottaa lähdeluettelon dokumenttiin
hankkien tiedot \koodi{BIB}-päätteisistä tietokantatiedostoista eli
\BibTeX-tietokannoista. Tietokannan merkinnät eli tietueet näyttävät
seuraavanlaisilta:
\begin{verbatim}
    @MERKINTÄTYYPPI(tunniste,
      KENTTÄ = "arvo",
      KENTTÄ = "arvo")
\end{verbatim}
Kun lähdeluettelon luomiseen käytetään \BibTeX-tyyliä \bibtyyli,
\verb|MERKINTÄTYYPPI| on joku luvussa~\ref{merkintatyypit} mainittu
merkintätyyppi ja KENTTÄ luvussa~\ref{kentat} mainittu tyylin \bibtyyli\
tunnistama kenttä. Tunniste on käyttäjän keksimä tunniste lähteelle, jolla
lähteeseen viitataan \verb|\cite|-komenolla. Jos tunniste on esimerkiksi
\koodi{sah}, viittaus ko.\ lähteeseen tapahtuu kirjoittamalla
\LaTeX-käsikirjoitustiedostoon komento \verb|\cite{sah}|.

Kaikki viitteet sijoitetaan siis \BibTeX-tietokantoihin, joissa jokaista
viitettä vastaa yksi tietue ja tietueen kentät vastaavat viitteen tiettyä
ominaisuutta, kuten kirjoittajaa, nimeä, julkaisijaa, jne. Kun
\BibTeX-ohjelmaa käyttää, se poimii tekstissä \verb|\cite|-komennolla
viitatut lähteet tietokannasta ja kirjoittaa \koodi{BBL}-päätteiseen
tiedostoon \verb|thebibliography|-ympäristön sisältöineen, jonka perusteella
\LaTeX\ sitten osaa luoda lähdeluettelon dokumenttiin.

%%\DescribeMacro{\bibliography}
\BibTeX-ohjelmaa käytettäessä lähdeluettelo kootaan tietokantatiedostojen
tiedoista. Jos lähdetiedot sijaitsevat esimerkiksi tiedostoissa
\koodi{insect.bib} ja \koodi{animal.bib}, \LaTeX-käsikirjoitustiedostoon
kirjoitetaan komento
\begin{verbatim}
    \bibliography{insect,animal}
\end{verbatim}
siihen kohtaan, johon valmiissa dokumentissa halutaan sijoittaa
\BibTeX-ohjelman luoma lähdeluettelo.

%%\DescribeMacro{\cite}
Tietokantatiedostojen \koodi{insect.bib} ja \koodi{animal.bib} sisältämiin
lähdetietoihin viitataan tekstissä \verb|\cite|-komennolla, jolla
määritetyt lähteet \BibTeX\ poimii mukaan luomaansa lähdeluetteloon.
Lähdeluetteloon voidaan sisällyttää myös sellaisia lähteitä, joihin ei
viitata tekstissä \verb|\cite|-komennolla. Tämä tapahtuu
\verb|\nocite|-komen\-nol\-la, jonka parametrina annetaan pilkulla erotettuina
lähteiden tunnisteet. Kun lähdeluetteloon halutaan sisällyttää kaikki
tietokantatiedostojen tietueet, tämä onnistuu kirjoittamalla
\verb|\nocite{*}| ennen komentoa \verb|\bibliography{insect,animal}|.

%%\DescribeMacro{\bibliographystyle}
\BibTeX-ohjelman käyttöä varten \LaTeX-käsikirjoitustiedostossa täytyy olla
jossain kohtaa \verb|\begin{document}|-komennon jälkeen komento
\verb|\bibliographystyle|, jonka parametrina annetaan lähdeluettelon
luomisessa käytetty \BibTeX-tyyli. \BibTeX-tyylitiedostot ovat
\koodi{BST}-päätteisiä tiedostoja, esim.\ \koodi{alpha.bst}, mutta\linebreak
\verb|\bibliographystyle|-komennon parametriksi kirjoitetaan vain
tyylitiedoston nimi ilman päätettä eli tässä tapauksessa \koodi{alpha}.

Kun siis tietokantatiedostot \koodi{insect.bib} ja \koodi{animal.bib}
sisältävät niiden lähteiden tiedot, joihin käsikirjoitustiedostoon
kirjoitetussa tekstissä viitataan \verb|\cite|-komennolla,
käsikirjoitustiedostoon riittää kirjoittaa esimerkiksi
\begin{verbatim}
    \bibliographystyle{alpha}
    \bibliography{insect,animal}
\end{verbatim}
siihen kohtaan, johon lähdeluettelon halutaan ilmestyvän valmiissa
dokumentissa. Näin \BibTeX\ saa tietoonsa, mistä tietokannoista se poimii
viitteiden tiedot ja mitä tyyliä se käyttää lähdeluettelon muokkaamiseen.
Kun käsikirjoitustiedosto on käsitelty luvussa~\ref{ohjelmat} mainitulla
tavalla, lähdeluettelon valmiiseen dokumenttiin tuottanut
\koodi{thebibliography}-ympäristö eli lähdeluettelon ''käsikirjoitus''
löytyy \koodi{BBL}-päätteisestä tiedostosta, jonka nimen alkuosa on sama
kuin \LaTeX-käsikirjoitus\-tie\-dos\-ton.

\section{Ohjelmien käyttö}
\label{ohjelmat}

Seuraavassa on lyhyt johdatus \LaTeX-ladontajärjestelmään liittyvien
ohjelmien käyttöön. Huomaa, että ohjeet pätevät useimpiin ajantasalla
oleviin \TeX-toteutuksiin
mutta eivät välttämättä kaikkiin. Eroavaisuuksia saattaa löytyä ja
parhaiten niistä osannee informoida \TeX-järjestelmäsi ylläpito.

\LaTeX-käsikirjoitustiedostoista saa
PostScript-tiedostoja kirjoittamalla seuraavat komennot
komentoriville:
\begin{verbatim}
    latex <tiedosto>.tex
    latex <tiedosto>.tex
    dvips -o <tiedosto>.ps <tiedosto>.dvi
\end{verbatim}

Mikäli dokumentin lähdeluettelon tuottamiseen käytetään \BibTeX-ohjelmaa,
edelliset ohjeet muuttuvat seuraavanlaisiksi:
\begin{verbatim}
    latex <tiedosto>.tex
    bibtex <tiedosto>
    latex <tiedosto>.tex
    latex <tiedosto>.tex
    dvips -o <tiedosto>.ps <tiedosto>.dvi
\end{verbatim}

Yllä olevien ohjeiden mukaisesti \LaTeX-käsikirjoitustiedostoista saa myös
PDF-tie\-dos\-to\-ja, kun komento \koodi{dvips -o <tiedosto>.ps <tiedosto>.dvi}
korvataan komennolla \koodi{dvipdf <tiedosto>.dvi}

\LaTeX-käsikirjoitustiedostoista saa PDF-tiedostoja suoraan kirjoittamalla
seuraavan komennon komentoriville:
\begin{verbatim}
    pdflatex <tiedosto>
\end{verbatim}

Tässä \koodi{<tiedosto>} on \LaTeX-käsikirjoitustiedostosi nimi ilman
mitään tiedostopäätteitä, kuten \koodi{.tex} tai \koodi{.aux}. Enemmän
tietoa ohjelmien käytöstä saa optiolla \verb|-help| tai \verb|--help|, eli
esimerkiksi komento \koodi{latex -help} tuottaa \LaTeX-ohjelman ohjeet.
Unix-koneissa ohjelmista saattaa löytyä man-sivu, jonka pääsee lukemaan
komennolla \koodi{man <ohjelma>}. Esimerkiksi \LaTeX-ohjelman man-sivu
aukeaa komennolla \koodi{man latex}.

%%\section{Lisätietoja}
%%
%%Helsingin yliopiston Tietojenkäsittelytieteen laitoksen \LaTeX-sivun
%%osoite on \url{http://www.cs.helsinki.fi/...}. Sivulta löytyy viitteitä
%%sekä laitoksen omaan LaTeX-materiaaliin että muihin hyödyllisiin
%%\LaTeX-lähteisiin. Myös tämä dokumentti on saatavilla kyseisellä
%%WWW-sivulla.
%%
\lastpage
\end{document}
%</ohjeet>
%    \end{macrocode}
%
% \Finale
%
\endinput
