← All templates

South African Computer Journal (sacjsub)

SACJ's sacjsub class (v1.1) and sacj BibTeX style with the journal's complete example paper: title block, abstract, sections, a figure, a table and APA-style references.

Create an account to use this
Category
Journal
Document class
sacjsub (sacjsub.cls) — ships with TeX Live
Workflow
Journal manuscript — submissions and revision rounds
Author
South African Computer Journal (SAICSIT; hosted by ASSAf)
Source
South African Computer Journal (SAICSIT; hosted by ASSAf)
Licence
sacjsub.cls: Creative Commons. The sample text is South African Computer Journal (SAICSIT; hosted by ASSAf)'s, provided for authors preparing a submission.

These are the publisher’s own files. This project starts from South African Computer Journal (SAICSIT; hosted by ASSAf)’s package for this publication — their manuscript, their sacjsub.cls, their bibliography style — so what compiles here is what they would have given you.

South African Computer Journal (SAICSIT; hosted by ASSAf) serves this exact file to South African Computer Journal. Check South African Computer Journal (SAICSIT; hosted by ASSAf)’s author pages for the current instructions.

Where this differs from the publisher’s download.

  • Note: pdfLaTeX only: the class loads graphicx with the pdftex driver.

What you get

  • example.bib · 2 KB
  • mouse-eps-converted-to.pdf · 3 KB
  • mouse.eps · 5 KB
  • sacj.bst · 26 KB
  • sacjsub.cls · 19 KB
  • template.bbl · 2 KB
  • template.tex — the file that is compiled · 17 KB

These become your files. Editing them afterwards changes your project and nothing else — a project owns its files from the moment it is made.

Journals using this template

Source

example.bib · 2 KB
% Encoding: ISO-8859-1

@Misc{chervetnd,
  author        = {Florent Chervet},
  title         = {Tabu -- {Flexible LaTeX} tabulars},
  howpublished  = {http://www.ctan.org/pkg/tabu},
  month         = {Dec},
  year          = {2016},
  note          = {Last accessed: 1 Dec 2016},
  date-added    = {2013-08-07 11:56:46 +0200},
  date-modified = {2013-08-07 11:59:12 +0200},
  lastchecked   = {August 7 2013},
}

@Book{kopka1995guide,
  title         = {A guide to {LATEX 2e: Document} preparation for beginners and advanced users},
  publisher     = {Addison-Wesley Longman Publishing Co., Inc.},
  year          = {1995},
  author        = {Kopka, Helmut and Daly, Patrick A},
  date-added    = {2013-08-06 13:12:54 +0200},
  date-modified = {2013-08-08 12:21:59 +0200},
}

@Book{apa2013,
  title     = {Publication manual of the {American Psychological Association}},
  publisher = {{American Psychological Association}},
  year      = {2013},
  author    = {{American Psychological Association}},
  edition   = {6th},
}

@article{laakso2011development,
  title={The development of open access journal publishing from 1993 to 2009},
  author={Laakso, Mikael and Welling, Patrik and Bukvova, Helena and Nyman, Linus and Bj{\"o}rk, Bo-Christer and Hedlund, Turid},
  journal={{PloS} {ONE}},
  volume={6},
  number={6},
  pages={e20961},
  year={2011},
  publisher={Public Library of Science},
  doi={https://doi.org/10.1371/journal.pone.0020961}
}

@article{lariviere2006place,
  title={The place of serials in referencing practices: Comparing natural sciences and engineering with social sciences and humanities},
  author={Larivi{\`e}re, Vincent and Archambault, {\'E}ric and Gingras, Yves and Vignola-Gagn{\'e}, {\'E}tienne},
  journal={Journal of the Association for Information Science and Technology},
  volume={57},
  number={8},
  pages={997--1004},
  year={2006},
  publisher={Wiley Online Library}
}


@Comment{jabref-meta: databaseType:bibtex;}

mouse-eps-converted-to.pdf — binary, 3 KB

mouse.eps — binary, 5 KB

sacj.bst · 26 KB
%%
%% This is file `sacj.bst',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% merlin.mbs  (with options: `seq-no,nm-init,ed-au,tit-qq,qx,atit-u,vnum-nr,volp-com,jwdpg,jwdvol,num-xser,isbn,issn,doi,edpar,pp,abr,xedn,and-xcom,url,url-blk,nfss,')
%% ----------------------------------------
%% *** Bibliographic style for the South African Computer Journal ***
%% 
%% Copyright 1994-2004 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}[2004/02/09 4.13 (PWD, AO, DPC)]
 %   For use with BibTeX version 0.99a or later
 %-------------------------------------------------------------------
 % This bibliography style file is intended for texts in ENGLISH
 % This is a numerical citation style, and as such is standard LaTeX.
 % It requires no extra package to interface to the main text.
 % The form of the \bibitem entries is
 %   \bibitem{key}...
 % Usage of \cite is as follows:
 %   \cite{key} ==>>          [#]
 %   \cite[chap. 2]{key} ==>> [#, chap. 2]
 % where # is a number determined by the ordering in the reference list.
 % The order in the reference list is that by which the works were originally
 %   cited in the text, or that in the database.
 %---------------------------------------------------------------------

ENTRY
  { address
    author
    booktitle
    chapter
    doi
    edition
    editor
    eid
    howpublished
    institution
    isbn
    issn
    journal
    key
    month
    note
    number
    organization
    pages
    publisher
    school
    series
    title
    type
    url
    volume
    year
  }
  {}
  { label }
INTEGERS { output.state before.all mid.sentence after.sentence after.block }
FUNCTION {init.state.consts}
{ #0 'before.all :=
  #1 'mid.sentence :=
  #2 'after.sentence :=
  #3 'after.block :=
}
STRINGS { s t}
FUNCTION {output.nonnull}
{ 's :=
  output.state mid.sentence =
    { ", " * write$ }
    { output.state after.block =
        { add.period$ write$
          newline$
          "\newblock " write$
        }
        { output.state before.all =
            'write$
            { add.period$ " " * write$ }
          if$
        }
      if$
      mid.sentence 'output.state :=
    }
  if$
  s
}
FUNCTION {output}
{ duplicate$ empty$
    'pop$
    'output.nonnull
  if$
}
FUNCTION {output.check}
{ 't :=
  duplicate$ empty$
    { pop$ "empty " t * " in " * cite$ * warning$ }
    'output.nonnull
  if$
}
FUNCTION {fin.entry}
{ add.period$
  write$
  newline$
}

FUNCTION {new.block}
{ output.state before.all =
    'skip$
    { after.block 'output.state := }
  if$
}
FUNCTION {new.sentence}
{ output.state after.block =
    'skip$
    { output.state before.all =
        'skip$
        { after.sentence 'output.state := }
      if$
    }
  if$
}
FUNCTION {add.blank}
{  " " * before.all 'output.state :=
}

FUNCTION {date.block}
{
  new.block
}

FUNCTION {not}
{   { #0 }
    { #1 }
  if$
}
FUNCTION {and}
{   'skip$
    { pop$ #0 }
  if$
}
FUNCTION {or}
{   { pop$ #1 }
    'skip$
  if$
}
FUNCTION {non.stop}
{ duplicate$
   "}" * add.period$
   #-1 #1 substring$ "." =
}

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$ "" }
    { "\emph{" swap$ * "}" * }
  if$
}
FUNCTION {tie.or.space.prefix}
{ duplicate$ text.length$ #3 <
    { "~" }
    { " " }
  if$
  swap$
}

FUNCTION {capitalize}
{ "u" change.case$ "t" change.case$ }

FUNCTION {space.word}
{ " " swap$ * " " * }
 % Here are the language-specific definitions for explicit words.
 % Each function has a name bbl.xxx where xxx is the English word.
 % The language selected here is ENGLISH
FUNCTION {bbl.and}
{ "and"}

FUNCTION {bbl.etal}
{ "et~al." }

FUNCTION {bbl.editors}
{ "editors" }

FUNCTION {bbl.editor}
{ "editor" }

FUNCTION {bbl.edby}
{ "edited by" }

FUNCTION {bbl.edition}
{ "edn." }

FUNCTION {bbl.volume}
{ "vol." }

FUNCTION {bbl.of}
{ "of" }

FUNCTION {bbl.number}
{ "no." }

FUNCTION {bbl.nr}
{ "no." }

FUNCTION {bbl.in}
{ "in" }

FUNCTION {bbl.pages}
{ "pp." }

FUNCTION {bbl.page}
{ "p." }

FUNCTION {bbl.chapter}
{ "chap." }

FUNCTION {bbl.techrep}
{ "Tech. Rep." }

FUNCTION {bbl.mthesis}
{ "Master's thesis" }

FUNCTION {bbl.phdthesis}
{ "Ph.D. thesis" }

MACRO {jan} {"Jan."}

MACRO {feb} {"Feb."}

MACRO {mar} {"Mar."}

MACRO {apr} {"Apr."}

MACRO {may} {"May"}

MACRO {jun} {"Jun."}

MACRO {jul} {"Jul."}

MACRO {aug} {"Aug."}

MACRO {sep} {"Sep."}

MACRO {oct} {"Oct."}

MACRO {nov} {"Nov."}

MACRO {dec} {"Dec."}

MACRO {acmcs} {"ACM Computing Surveys"}

MACRO {acta} {"Acta Informatica"}

MACRO {cacm} {"Communications of the ACM"}

MACRO {ibmjrd} {"IBM Journal of Research and Development"}

MACRO {ibmsj} {"IBM Systems Journal"}

MACRO {ieeese} {"IEEE Transactions on Software Engineering"}

MACRO {ieeetc} {"IEEE Transactions on Computers"}

MACRO {ieeetcad}
 {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}

MACRO {ipl} {"Information Processing Letters"}

MACRO {jacm} {"Journal of the ACM"}

MACRO {jcss} {"Journal of Computer and System Sciences"}

MACRO {scp} {"Science of Computer Programming"}

MACRO {sicomp} {"SIAM Journal on Computing"}

MACRO {tocs} {"ACM Transactions on Computer Systems"}

MACRO {tods} {"ACM Transactions on Database Systems"}

MACRO {tog} {"ACM Transactions on Graphics"}

MACRO {toms} {"ACM Transactions on Mathematical Software"}

MACRO {toois} {"ACM Transactions on Office Information Systems"}

MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}

MACRO {tcs} {"Theoretical Computer Science"}
FUNCTION {bibinfo.check}
{ swap$
  duplicate$ missing$
    {
      pop$ pop$
      ""
    }
    { duplicate$ empty$
        {
          swap$ pop$
        }
        { swap$
          pop$
        }
      if$
    }
  if$
}
FUNCTION {bibinfo.warn}
{ swap$
  duplicate$ missing$
    {
      swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
      ""
    }
    { duplicate$ empty$
        {
          swap$ "empty " swap$ * " in " * cite$ * warning$
        }
        { swap$
          pop$
        }
      if$
    }
  if$
}
FUNCTION {format.url}
{ url empty$
    { "" }
    { "\urlprefix\url{" url * "}" * }
  if$
}

STRINGS  { bibinfo}
INTEGERS { nameptr namesleft numnames }

FUNCTION {format.names}
{ 'bibinfo :=
  duplicate$ empty$ 'skip$ {
  's :=
  "" 't :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { s nameptr
      "{f.~}{vv~}{ll}{, jj}"
      format.name$
      bibinfo bibinfo.check
      't :=
      nameptr #1 >
        {
          namesleft #1 >
            { ", " * t * }
            {
              s nameptr "{ll}" format.name$ duplicate$ "others" =
                { 't := }
                { pop$ }
              if$
              t "others" =
                {
                  " " * bbl.etal *
                }
                {
                  bbl.and
                  space.word * t *
                }
              if$
            }
          if$
        }
        't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
  } if$
}
FUNCTION {format.names.ed}
{
  format.names
}
FUNCTION {format.authors}
{ author "author" format.names
}
FUNCTION {get.bbl.editor}
{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }

FUNCTION {format.editors}
{ editor "editor" format.names duplicate$ empty$ 'skip$
    {
      " " *
      get.bbl.editor
   "(" swap$ * ")" *
      *
    }
  if$
}
FUNCTION {format.isbn}
{ isbn "isbn" bibinfo.check
  duplicate$ empty$ 'skip$
    {
      new.block
      "ISBN " swap$ *
    }
  if$
}

FUNCTION {format.issn}
{ issn "issn" bibinfo.check
  duplicate$ empty$ 'skip$
    {
      new.block
      "ISSN " swap$ *
    }
  if$
}

FUNCTION {format.doi}
{ doi "doi" bibinfo.check
  duplicate$ empty$ 'skip$
    {
      new.block
      "\doi{" swap$ * "}" *
    }
  if$
}
FUNCTION {format.note}
{
 note empty$
    { "" }
    { note #1 #1 substring$
      duplicate$ "{" =
        'skip$
        { output.state mid.sentence =
          { "l" }
          { "u" }
        if$
        change.case$
        }
      if$
      note #2 global.max$ substring$ * "note" bibinfo.check
    }
  if$
}

FUNCTION {format.title}
{ title
  "title" bibinfo.check
  duplicate$ empty$ 'skip$
    {
      "\enquote{" swap$ *
      "}" *
    }
  if$
}
FUNCTION {output.bibitem}
{ newline$
  "\bibitem{" write$
  cite$ write$
  "}" write$
  newline$
  ""
  before.all 'output.state :=
}

FUNCTION {n.dashify}
{
  't :=
  ""
    { t empty$ not }
    { t #1 #1 substring$ "-" =
        { t #1 #2 substring$ "--" = not
            { "--" *
              t #2 global.max$ substring$ 't :=
            }
            {   { t #1 #1 substring$ "-" = }
                { "-" *
                  t #2 global.max$ substring$ 't :=
                }
              while$
            }
          if$
        }
        { t #1 #1 substring$ *
          t #2 global.max$ substring$ 't :=
        }
      if$
    }
  while$
}

FUNCTION {word.in}
{ bbl.in capitalize
  " " * }

FUNCTION {format.date}
{
  month "month" bibinfo.check
  duplicate$ empty$
  year  "year"  bibinfo.check duplicate$ empty$
    { swap$ 'skip$
        { "there's a month but no year in " cite$ * warning$ }
      if$
      *
    }
    { swap$ 'skip$
        {
          swap$
          " " * swap$
        }
      if$
      *
    }
  if$
}
FUNCTION {format.btitle}
{ title "title" bibinfo.check
  duplicate$ empty$ 'skip$
    {
      emphasize
    }
  if$
}
FUNCTION {either.or.check}
{ empty$
    'pop$
    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  if$
}
FUNCTION {format.bvolume}
{ volume empty$
    { "" }
    { bbl.volume volume tie.or.space.prefix
      "volume" bibinfo.check * *
      series "series" bibinfo.check
      duplicate$ empty$ 'pop$
        { swap$ bbl.of space.word * swap$
          emphasize * }
      if$
      "volume and number" number either.or.check
    }
  if$
}
FUNCTION {format.number.series}
{ volume empty$
    { number empty$
        { series field.or.null }
        { series empty$
            { number "number" bibinfo.check }
            { output.state mid.sentence =
                { bbl.number }
                { bbl.number capitalize }
              if$
              number tie.or.space.prefix "number" bibinfo.check * *
              bbl.in space.word *
              series "series" bibinfo.check *
            }
          if$
        }
      if$
    }
    { "" }
  if$
}

FUNCTION {format.edition}
{ edition duplicate$ empty$ 'skip$
    {
      output.state mid.sentence =
        { "l" }
        { "t" }
      if$ change.case$
      "edition" bibinfo.check
      " " * bbl.edition *
    }
  if$
}
INTEGERS { multiresult }
FUNCTION {multi.page.check}
{ 't :=
  #0 'multiresult :=
    { multiresult not
      t empty$ not
      and
    }
    { t #1 #1 substring$
      duplicate$ "-" =
      swap$ duplicate$ "," =
      swap$ "+" =
      or or
        { #1 'multiresult := }
        { t #2 global.max$ substring$ 't := }
      if$
    }
  while$
  multiresult
}
FUNCTION {format.pages}
{ pages duplicate$ empty$ 'skip$
    { duplicate$ multi.page.check
        {
          bbl.pages swap$
          n.dashify
        }
        {
          bbl.page swap$
        }
      if$
      tie.or.space.prefix
      "pages" bibinfo.check
      * *
    }
  if$
}
FUNCTION {format.journal.pages}
{ pages duplicate$ empty$ 'pop$
    { swap$ duplicate$ empty$
        { pop$ pop$ format.pages }
        {
          ", " *
          swap$
          n.dashify
          pages multi.page.check
            'bbl.pages
            'bbl.page
          if$
          swap$ tie.or.space.prefix
          "pages" bibinfo.check
          * *
          *
        }
      if$
    }
  if$
}
FUNCTION {format.journal.eid}
{ eid "eid" bibinfo.check
  duplicate$ empty$ 'pop$
    { swap$ duplicate$ empty$ 'skip$
      {
          ", " *
      }
      if$
      swap$ *
    }
  if$
}
FUNCTION {format.vol.num.pages}
{ volume field.or.null
  duplicate$ empty$ 'skip$
    {
      bbl.volume swap$ tie.or.space.prefix
      "volume" bibinfo.check
      * *
    }
  if$
  number "number" bibinfo.check duplicate$ empty$ 'skip$
    {
      swap$ duplicate$ empty$
        { "there's a number but no volume in " cite$ * warning$ }
        'skip$
      if$
      swap$
      ", " bbl.nr * number tie.or.space.prefix pop$ * swap$ *
    }
  if$ *
  eid empty$
    { format.journal.pages }
    { format.journal.eid }
  if$
}

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

FUNCTION {format.booktitle}
{
  booktitle "booktitle" bibinfo.check
  emphasize
}
FUNCTION {format.in.ed.booktitle}
{ format.booktitle duplicate$ empty$ 'skip$
    {
      editor "editor" format.names.ed duplicate$ empty$ 'pop$
        {
          " " *
          get.bbl.editor
          "(" swap$ * "), " *
          * swap$
          * }
      if$
      word.in swap$ *
    }
  if$
}
FUNCTION {empty.misc.check}
{ author empty$ title empty$ howpublished empty$
  month empty$ year empty$ note empty$
  and and and and and
    { "all relevant fields are empty in " cite$ * warning$ }
    'skip$
  if$
}
FUNCTION {format.thesis.type}
{ type duplicate$ empty$
    'pop$
    { swap$ pop$
      "t" change.case$ "type" bibinfo.check
    }
  if$
}
FUNCTION {format.tr.number}
{ number "number" bibinfo.check
  type duplicate$ empty$
    { pop$ bbl.techrep }
    'skip$
  if$
  "type" bibinfo.check
  swap$ duplicate$ empty$
    { pop$ "t" change.case$ }
    { tie.or.space.prefix * * }
  if$
}
FUNCTION {format.article.crossref}
{
  key duplicate$ empty$
    { pop$
      journal duplicate$ empty$
        { "need key or journal for " cite$ * " to crossref " * crossref * warning$ }
        { "journal" bibinfo.check emphasize word.in swap$ * }
      if$
    }
    { word.in swap$ * " " *}
  if$
  " \cite{" * crossref * "}" *
}
FUNCTION {format.crossref.editor}
{ editor #1 "{vv~}{ll}" format.name$
  "editor" bibinfo.check
  editor num.names$ duplicate$
  #2 >
    { pop$
      "editor" bibinfo.check
      " " * bbl.etal
      *
    }
    { #2 <
        'skip$
        { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
            {
              "editor" bibinfo.check
              " " * bbl.etal
              *
            }
            {
             bbl.and space.word
              * editor #2 "{vv~}{ll}" format.name$
              "editor" bibinfo.check
              *
            }
          if$
        }
      if$
    }
  if$
}
FUNCTION {format.book.crossref}
{ volume duplicate$ empty$
    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
      pop$ word.in
    }
    { bbl.volume
      capitalize
      swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
    }
  if$
  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$
              "" *
            }
            { series emphasize * }
          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$
        { format.booktitle duplicate$ empty$
            { "need editor, key, or booktitle for " cite$ * " to crossref " *
              crossref * warning$
            }
            { word.in swap$ * }
          if$
        }
        { word.in key * " " *}
      if$
    }
    { word.in format.crossref.editor * " " *}
  if$
  " \cite{" * crossref * "}" *
}
FUNCTION {format.org.or.pub}
{ 't :=
  ""
  address empty$ t empty$ and
    'skip$
    {
      t empty$
        { address "address" bibinfo.check *
        }
        { t *
          address empty$
            'skip$
            { ", " * address "address" bibinfo.check * }
          if$
        }
      if$
    }
  if$
}
FUNCTION {format.publisher.address}
{ publisher "publisher" bibinfo.warn format.org.or.pub
}

FUNCTION {format.organization.address}
{ organization "organization" bibinfo.check format.org.or.pub
}

FUNCTION {article}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.title "title" output.check
  new.block
  crossref missing$
    {
      journal
      "journal" bibinfo.check
      emphasize
      "journal" output.check
      format.vol.num.pages output
      format.date "year" output.check
    }
    { format.article.crossref output.nonnull
      format.pages output
    }
  if$
  format.issn output
  format.doi output
  new.block
  format.url output
  new.block
  format.note output
  fin.entry
}
FUNCTION {book}
{ output.bibitem
  author empty$
    { format.editors "author and editor" output.check
    }
    { 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
      new.block
      format.number.series output
      new.sentence
      format.publisher.address output
    }
    {
      new.block
      format.book.crossref output.nonnull
    }
  if$
  format.edition output
  format.date "year" output.check
  format.isbn output
  format.doi output
  new.block
  format.url output
  new.block
  format.note output
  fin.entry
}
FUNCTION {booklet}
{ output.bibitem
  format.authors output
  new.block
  format.title "title" output.check
  new.block
  howpublished "howpublished" bibinfo.check output
  address "address" bibinfo.check output
  format.date output
  format.isbn output
  format.doi output
  new.block
  format.url output
  new.block
  format.note output
  fin.entry
}

FUNCTION {inbook}
{ output.bibitem
  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
      format.publisher.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
  crossref missing$
    { format.isbn output }
    'skip$
  if$
  format.doi output
  new.block
  format.url output
  new.block
  format.note output
  fin.entry
}

FUNCTION {incollection}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.title "title" output.check
  new.block
  crossref missing$
    { format.in.ed.booktitle "booktitle" output.check
      format.bvolume output
      format.number.series output
      format.chapter.pages output
      new.sentence
      format.publisher.address output
      format.edition output
      format.date "year" output.check
      format.isbn output
    }
    { format.incoll.inproc.crossref output.nonnull
      format.chapter.pages output
    }
  if$
  format.doi output
  new.block
  format.url output
  new.block
  format.note output
  fin.entry
}
FUNCTION {inproceedings}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.title "title" output.check
  new.block
  crossref missing$
    { format.in.ed.booktitle "booktitle" output.check
      format.bvolume output
      format.number.series output
      format.pages output
      new.sentence
      publisher empty$
        { format.organization.address output }
        { organization "organization" bibinfo.check output
          format.publisher.address output
        }
      if$
      format.date "year" output.check
      format.isbn output
      format.issn output
    }
    { format.incoll.inproc.crossref output.nonnull
      format.pages output
    }
  if$
  format.doi output
  new.block
  format.url output
  new.block
  format.note output
  fin.entry
}
FUNCTION {conference} { inproceedings }
FUNCTION {manual}
{ output.bibitem
  author empty$
    { organization "organization" bibinfo.check
      duplicate$ empty$ 'pop$
        { output
          address "address" bibinfo.check output
        }
      if$
    }
    { format.authors output.nonnull }
  if$
  new.block
  format.btitle "title" output.check
  author empty$
    { organization empty$
        {
          address new.block.checka
          address "address" bibinfo.check output
        }
        'skip$
      if$
    }
    {
      organization address new.block.checkb
      organization "organization" bibinfo.check output
      address "address" bibinfo.check output
    }
  if$
  format.edition output
  format.date output
  format.doi output
  new.block
  format.url output
  new.block
  format.note output
  fin.entry
}

FUNCTION {mastersthesis}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.btitle
  "title" output.check
  new.block
  bbl.mthesis format.thesis.type output.nonnull
  school "school" bibinfo.warn output
  address "address" bibinfo.check output
  format.date "year" output.check
  format.doi output
  new.block
  format.url output
  new.block
  format.note output
  fin.entry
}

FUNCTION {misc}
{ output.bibitem
  format.authors output
  title howpublished new.block.checkb
  format.title output
  howpublished new.block.checka
  howpublished "howpublished" bibinfo.check output
  format.date output
  format.doi output
  new.block
  format.url output
  new.block
  format.note output
  fin.entry
  empty.misc.check
}
FUNCTION {phdthesis}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.btitle
  "title" output.check
  new.block
  bbl.phdthesis format.thesis.type output.nonnull
  school "school" bibinfo.warn output
  address "address" bibinfo.check output
  format.date "year" output.check
  format.doi output
  new.block
  format.url output
  new.block
  format.note output
  fin.entry
}

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

FUNCTION {techreport}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.title
  "title" output.check
  new.block
  format.tr.number output.nonnull
  institution "institution" bibinfo.warn output
  address "address" bibinfo.check output
  format.date "year" output.check
  format.doi output
  new.block
  format.url output
  new.block
  format.note output
  fin.entry
}

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

FUNCTION {default.type} { misc }
READ
STRINGS { longest.label }
INTEGERS { number.label longest.label.width }
FUNCTION {initialize.longest.label}
{ "" 'longest.label :=
  #1 'number.label :=
  #0 'longest.label.width :=
}
FUNCTION {longest.label.pass}
{ number.label int.to.str$ 'label :=
  number.label #1 + 'number.label :=
  label width$ longest.label.width >
    { label 'longest.label :=
      label width$ 'longest.label.width :=
    }
    'skip$
  if$
}
EXECUTE {initialize.longest.label}
ITERATE {longest.label.pass}
FUNCTION {begin.bib}
{ preamble$ empty$
    'skip$
    { preamble$ write$ newline$ }
  if$
  "\begin{thebibliography}{"  longest.label  * "}" *
  write$ newline$
  "\newcommand{\enquote}[1]{``#1''}"
  write$ newline$
  "\providecommand{\url}[1]{\texttt{#1}}"
  write$ newline$
  "\providecommand{\urlprefix}{URL }"
  write$ newline$
  "\expandafter\ifx\csname urlstyle\endcsname\relax"
  write$ newline$
  "  \providecommand{\doi}[1]{doi:\discretionary{}{}{}#1}\else"
  write$ newline$
  "  \providecommand{\doi}{doi:\discretionary{}{}{}\begingroup \urlstyle{rm}\Url}\fi"
  write$ newline$
}
EXECUTE {begin.bib}
EXECUTE {init.state.consts}
ITERATE {call.type$}
FUNCTION {end.bib}
{ newline$
  "\end{thebibliography}" write$ newline$
}
EXECUTE {end.bib}
%% End of customized bst file
%%
%% End of file `sacj.bst'.

sacjsub.cls · 19 KB
% sacjsub.cls
% v1.1 LaTeX class file for submissions to the South African Computer Journal
% (c) 2016 James Dibley <[email protected]>
%
% Identification part
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
\ProvidesClass{sacjsub}
	[2017/10/13 v1.1 LaTeX class file for submissions to the South African Computer Journal]


% Initial code
\RequirePackage{kvoptions}
\DeclareStringOption[0]{vol}
\DeclareStringOption[0]{number}
\DeclareStringOption[MONTH OF PUBLICATION]{month}
\DeclareStringOption[\number\year]{year}
\ProcessKeyvalOptions{sacj}
\newcommand{\SACJpagenumber}[1]{\setcounter{page}{#1}}
\newcommand{\@SACJresearcharticle}{Research Article}
\newcommand{\@SACJviewpoint}{Viewpoint}
%\newcommand{\@SACJeditorial}{Editorial}
\newcommand{\@SACJcommunication}{Communication}
\newcommand{\@SACJletter}{Letter to the Editor}
%\newcommand{\@SACJfrontmatter}{Frontmatter}
\newcommand{\@SACJwebsite}{\url{http://sacj.cs.uct.ac.za}}
\newcommand{\@articletype}{}
\newcommand{\@SACJvolume}{\sacjsub@vol}
\newcommand{\@SACJnumber}{\sacjsub@number}
\newcommand{\@SACJnumberparens}{(\sacjsub@number)}
\newcommand{\@SACJyear}{\sacjsub@year}
\newcommand{\@SACJmonth}{\sacjsub@month}
\newcommand{\@SACJdoi}{DOI TBC}
\newcommand{\@SACJrunningheader}{}
\newcommand{\@sacjcontact}{}
\newcommand{\@SACJ}{\emph{SACJ}}

\author{}
\title{}
\newcounter{@affiliation}
\setcounter{@affiliation}{1}
\renewcommand{\the@affiliation}{\alph{@affiliation}}
\newcommand\@email{}
\newcommand\@authoronly{}
\newcommand\@addresses{}
\newcommand\@theabstract{\@empty}
\newcommand\@thekeywords{}
\newcommand\@thecategories{}
\newcommand\@articlehistory{}
\newcommand\@sacjahrx{}
\newcommand\@sacjahrv{}
\newcommand\@sacjahac{}
\newcommand\@sacjahav{}
\newcommand\@sacjcitationauthors{}
\newcommand{\@SACJnotelist}{}
% \@sacjappendnotelist
% slightly tricky: processes SACJ author affiliation symbols
\newcommand{\@sacjappendnotelist}[2]{%
	\edef#1{%
		\unexpanded\expandafter{#1}%
		\unexpanded{\textsuperscript}%
		\expandafter{\expandafter\unexpanded\expandafter{#2}}%
	}%
}

\newcommand{\@sacjappendcategory}[3]{%
	\def\@thirdarg{#3}
	\def\@emptyhigh{\textbf{}}
	\ifx\@thirdarg\@emptyhigh%
		\edef#1{%
			\unexpanded\expandafter{#1}%
			{~$\bullet$~}%
			\expandafter{\expandafter\unexpanded\expandafter{#2}}%
		}%
	\else%
		\edef#1{%
			\unexpanded\expandafter{#1}%
			{~$\bullet$~}%
			\expandafter{\expandafter\unexpanded\expandafter{#2}}%
			{~$\sim$~}%
			\unexpanded\expandafter{#3}%
		}%
	\fi%
}

%\def\@commentssent{}
%\newcommand\SACJcommentssent[1]{\renewcommand{\@commentssent}{\noindent\textbf{Comments returned:} #1\par}}
%\def\@corrected{}
%\newcommand\SACJcorrected[1]{\renewcommand{\@corrected}{\noindent\textbf{Corrected copy:}\hspace{24pt}#1\par}}

\newcommand\@buildtitlefooter{
	\newcommand\@titlefooter{}
	\expandafter\ifx\@articletype\@SACJresearcharticle
	\g@addto@macro\@titlefooter{\footnotesize%
		\hangindent=\parindent{\@sacjcitationauthors~(\sacjsub@year). \@title.~%
		\emph{South African Computer Journal~\@SACJvolume}\@SACJnumberparens,~%
		\thepage--\pageref{LastPage}.~%
		\@SACJdoi}\par%
	}
	\fi
%	\expandafter\ifx\@articletype\@SACJeditorial
%	\g@addto@macro\@titlefooter{\footnotesize%
%		\hangindent=\parindent{\@sacjcitationauthors~(\sacjsub@year). \@title~[Editorial].~%
%		\emph{South African Computer Journal~\@SACJvolume},~%
%		\thepage--\pageref{LastPage}.~%
%		\@SACJdoi}\par%
%	}
%	\fi
	\expandafter\ifx\@articletype\@SACJviewpoint
	\g@addto@macro\@titlefooter{\footnotesize%
		\hangindent=\parindent{\@sacjcitationauthors~(\sacjsub@year). \@title~[Viewpoint].~%
		\emph{South African Computer Journal~\@SACJvolume},~%
		\thepage--\pageref{LastPage}.~%
		\@SACJdoi}\par%
	}
	\fi
	\expandafter\ifx\@articletype\@SACJletter
	\g@addto@macro\@titlefooter{\footnotesize%
		\hangindent=\parindent{\@sacjcitationauthors~(\sacjsub@year). \@title~[Letter to the Editor].~%
		\emph{South African Computer Journal~\@SACJvolume},~%
		\thepage--\pageref{LastPage}.~%
		\@SACJdoi}\par%
	}
	\fi
	\expandafter\ifx\@articletype\@SACJcommunication
	\g@addto@macro\@titlefooter{\footnotesize%
		\hangindent=\parindent{\@sacjcitationauthors~(\sacjsub@year). \@title~[Communication].~%
		\emph{South African Computer Journal~\@SACJvolume},~%
		\thepage--\pageref{LastPage}.~%
		\@SACJdoi}\par%
	}
	\fi
	\g@addto@macro\@titlefooter{\footnotesize%
		\noindent Copyright \copyright~the author(s);~%
		published under a \protect\href{http://creativecommons.org/licenses/by-nc/4.0/}{Creative Commons NonCommercial 4.0 License (CC BY-NC 4.0)}.\\%
		\emph{SACJ} is a publication of the South African Institute of Computer Scientists and Information Technologists. ISSN 1015-7999 (print) ISSN 2313-7835 (online).%
	}
}

\newcommand{\@buildarticlehistory}{%
	\g@addto@macro\@articlehistory{\par}
	\ifx\@sacjahrx\empty\else		
    	\g@addto@macro\@articlehistory{Received: \@sacjahrx\newline}
  	\fi
  	\expandafter \ifx\@sacjahrv\empty\else
     	\g@addto@macro\@articlehistory{Revised: \@sacjahrv\newline}
  	\fi
  	\ifx\@sacjahac\empty\else
    	\g@addto@macro\@articlehistory{Accepted: \@sacjahac\newline}
  	\fi
  	\ifx\@sacjahav\empty\else
    	\g@addto@macro\@articlehistory{Available online: \@sacjahav} 
  	\fi
}

\newcommand\@SACJmaketitle{%
	\@buildtitlefooter
	\expandafter\ifx\@articletype\@SACJresearcharticle
	\@buildarticlehistory
	\fi
	\newpage
	\setlength{\parindent}{0pt}
	\renewcommand{\baselinestretch}{1.1}\normalsize
	{\raggedright \Huge\textsf{\@title}\par}
	\renewcommand{\baselinestretch}{1}\normalsize
	\ifx\@author\@empty\else
		\vskip 1em
		{%
			\expandafter\ifx\@articletype\@SACJresearcharticle
				\normalsize \textsf{\@author}
			\else
				\normalsize \textsf{\@email}
			\fi
			\par
		}
	\fi
	\ifx\@addresses\@empty\else
		{\footnotesize\medskip\textsf{\@addresses}}
	\fi 
	\expandafter\ifx\@articletype\@SACJresearcharticle
		\rule{\textwidth}{.2pt}\par
		\if\@theabstract\@empty\else
			\vspace{0.2em}
			\footnotesize\textsf{\bfseries{\uppercase{Abstract}}}\\
			% Relax parindent for abstracts that might need >1 paragraph 
			\setlength{\parindent}{20pt}
			{\footnotesize \@theabstract}\par
			\setlength{\parindent}{0pt}
			\vspace{0.5\baselineskip}
			\footnotesize \textsf{\bfseries{Keywords:}} \@thekeywords\par
			\vspace{0.5\baselineskip}
			% Set the next section in \raggedright because the ACM 2012
			% categories get quite wildly spaced across the page otherwise
			{ \raggedright
			\footnotesize \textsf{\bfseries{Categories:}} \scriptsize \@thecategories\par
			}
			\vspace{0.5\baselineskip}
			\begin{tabular}{@{}p{.625\linewidth} p{.375\linewidth}@{}}
			\footnotesize \textsf{\bfseries{Email}}:\newline\scriptsize \@email &%
			\footnotesize \textsf{\bfseries{Article history}}: \scriptsize\@articlehistory 
			\end{tabular}
			\rule{\textwidth}{0.2pt}\par
		\fi
	\else 
		\vspace{0.5\baselineskip}
		\rule{\textwidth}{0.2pt}\par
	\fi
	\ifx\@titlefooter\@empty\else
		\protected@xdef\@thanks{\protect\footnotetext{\hspace{-1.85em}\@titlefooter}}%
	\fi
	\hypersetup{%
		pdfauthor={\@authoronly},%
		pdftitle={\@title},%
		pdfkeywords={\@thekeywords}%
	}
}

% Declaration of options
\DeclareOption{final}{%
	\renewcommand{\@SACJvolume}{\sacjsub@vol}%
	\renewcommand{\@SACJnumber}{\sacjsub@number}%
	\renewcommand{\@SACJnumberparens}{(\sacjsub@number)}%
	\renewcommand{\@articletype}{\@SACJresearcharticle}%
	}
\DeclareOption{submission}{%
	\renewcommand{\@SACJvolume}{Vol TBC}%
	\renewcommand{\@SACJnumber}{Num TBC}%
	\renewcommand{\@SACJnumberparens}{(Num TBC)}%
	\renewcommand{\@articletype}{\@SACJresearcharticle}%
	}
\DeclareOption{communication}{\renewcommand{\@articletype}{\@SACJcommunication}}
\DeclareOption{letter}{\renewcommand{\@articletype}{\@SACJletter}}
%\DeclareOption{editorial}{\renewcommand{\@articletype}{\@SACJeditorial}%
%	\renewcommand{\@SACJnumberparens}{(\sacjsub@number)}}
\DeclareOption{erratum}{\renewcommand{\@articletype}{Erratum}}
\DeclareOption{viewpoint}{\renewcommand{\@articletype}{\@SACJviewpoint}}
%\DeclareOption{front}{\renewcommand{\@articletype}{\@SACJfrontmatter}}
\DeclareOption{includenumbers}{\includenumberstrue}
\DeclareOption*{\typeout{Unknown option `\CurrentOption'}}

% Execution of options
\ProcessOptions\relax

% Package loading
\LoadClass[a4paper,12pt]{article}
\RequirePackage[a4paper,total={495pt,600pt},headheight=75pt,centering]{geometry}
\RequirePackage{fancyhdr}
\RequirePackage{lastpage}
\RequirePackage{sectsty}
%\RequirePackage[T1]{fontenc}
%\RequirePackage[bitstream-charter]{mathdesign}
%\RequirePackage{ClearSans}
\RequirePackage{microtype}
\RequirePackage{titlesec}
\RequirePackage{csquotes}
\RequirePackage{multirow}
\RequirePackage[pdftex]{graphicx}
\RequirePackage[font=small]{caption}
\RequirePackage[square,numbers]{natbib}
%\RequirePackage[style=apa,doi,hyperref,url,backend=biber,sorting=nyt]{biblatex}
%\DeclareLanguageMapping{british}{british-apa}
\PassOptionsToPackage{hyphens}{url}\usepackage[colorlinks=true,citecolor=black,filecolor=blue,urlcolor=blue]{hyperref}

% Special commands for package and class files
\fancypagestyle{firstpage}{%
	\fancyhf{}  
	\expandafter\ifx\@articletype\@SACJfrontmatter
		\fancyhead[C]{%
			{\textsf{\Huge South African Computer Journal}}
 		}
	\else 
		\fancyhead[R]{\footnotesize%	
			\textsf{%
			\emph{SACJ} \@SACJvolume\@SACJnumberparens~\@SACJmonth~\@SACJyear \\
			\@articletype%
			}%
		}
		\renewcommand{\footrulewidth}{0pt}
	\fi
	\renewcommand{\headrulewidth}{0pt}
}
\fancypagestyle{followingpage}{%
	\fancyhf{}
	\expandafter\ifx\@articletype\@SACJfrontmatter
		\renewcommand{\headrulewidth}{0pt}
		\fancyhead[C]{%
			{\textsf{\Huge South African Computer Journal}}
 		}
 		\renewcommand{\footrulewidth}{0.5pt}
	\else
		\fancyhead[L]{\footnotesize \@SACJrunningheader}
		\fancyhead[R]{%
			\textsf{\footnotesize%
			\thepage
			}
		}
		\expandafter\ifx\@articletype\@SACJresearcharticle
		\fancyfoot[R]{%
			\footnotesize \textsf{\@SACJdoi}
		}
		\fi
		\expandafter\ifx\@articletype\@SACJviewpoint
		\fancyfoot[R]{%
			\footnotesize \textsf{\@SACJdoi}
		}
		\fi
		\expandafter\ifx\@articletype\@SACJletter
		\fancyfoot[R]{%
			\footnotesize \textsf{\@SACJdoi}
		}
		\fi
		\expandafter\ifx\@articletype\@SACJcommunication
		\fancyfoot[R]{%
			\footnotesize \textsf{\@SACJdoi}
		}
		\fi
		\renewcommand{\headrulewidth}{0.5pt}
	\fi
}

% Special class file commands
\allsectionsfont{\sffamily\raggedright} % prevent odd spacing
\urlstyle{sf} % typewriter style is frankly harder to read
\pagestyle{followingpage}
\AtBeginDocument{\thispagestyle{firstpage}}
%\AtBeginDocument{\setcounter{page}{\SACJpagenumber}}
\AtBeginDocument{%
	\expandafter\ifx\@articletype\@SACJeditorial 
		\pagenumbering{roman}
	\fi
	\expandafter\ifx\@articletype\@SACJfrontmatter
		\pagenumbering{roman}
	\fi
}
% Override biblatex-apa 6.7 2015-01-22's formatting of the DOI field
% per CrossRef's latest guidelines for DOI layout and APA's response 
% (http://blog.apastyle.org/apastyle/2014/07/how-to-use-the-new-doi-format-in-apa-style.html)
%\AtBeginDocument{%
%	\DeclareFieldFormat{doi}{%
%		\ifhyperref%
%		{\href{#1}{\nolinkurl{#1}}}%
%		{\nolinkurl{#1}}%
%	}%
%}

\newcommand{\SACJdoi}[1]{\renewcommand{\@SACJdoi}{\url{#1}}}
\newcommand{\SACJtitle}[1]{\renewcommand\@title{#1}}
\newcommand{\SACJaddress}[2][default]{%
	\expandafter\ifx\csname @SACJnote#1\endcsname\relax%
		\g@addto@macro\@addresses{#2\par}%
	\else%
		\g@addto@macro\@addresses{\textsuperscript{%
			\csname @SACJnote#1\endcsname}\space#2\par}%
	\fi%
}

\let\@maketitle\@SACJmaketitle

\newcommand\SACJmaketitle{%
	\par
	\typeout{Processing paper ``\@title''.}
	\begingroup
		\renewcommand\thefootnote{\@fnsymbol\c@footnote}%
		\newpage
		\global\@topnum\z@ 	% prevents figures from going at top of page
		\@maketitle
		% TODO: I removed \thispagestyle{plain} from here 
		\@thanks
	\endgroup
		\setcounter{footnote}{0}%
		\global\let\thanks\relax
		\global\let\@maketitle\relax
		\global\let\@thanks\@empty
		\global\let\@date\@empty
		\global\let\title\relax
		\global\let\@title\@empty
		\global\let\author\relax
		\global\let\@author\@empty
		\global\let\@authoronly\@empty
		\global\let\@addresses\@empty
		\global\let\@email\@empty
		\global\let\@theabstract\@empty
		\global\let\@thekeywords\@empty
		\global\let\@thecategories\@empty
		\global\let\date\relax
		\global\let\and\relax

}

% This is a rather tricky macro. It can be called any number of times
% to append an author's details to three lists:
% 	@author - List of names with superscripted affiliation symbols
%	@authoronly - List of names w/o symbols (we don't actually use this presently)
%	@email - List of names with email addresses
% @author is used in the main header. @email is used there too.
% 
% This macro supports the tricky case where a single author has multiple
% institutional affiliations. Consequently it is a little fragile and
% every call to it must supply exactly four parameters. 
\newcommand{\SACJauthor}[4][default]{%
	\renewcommand{\@SACJnotelist}{\empty}
	\def\@testforx{default}
	\def\@firstarg{#1}
	\ifx\@firstarg\@testforx% 
		\edef\@@note{}%	(We don't have any affiliation codes)
	\else
	\def\@corresponding{#4}
% We have one or more codes
		\@for\next:=#1\do{%
			\expandafter\ifx\@SACJnotelist\empty\else
				\@sacjappendnotelist{\@SACJnotelist}{,\space}		
			\fi
			\expandafter\ifx\csname @SACJnote\next\endcsname\relax
				\edef\@@note{\the@affiliation}%		
				\expandafter\edef\csname @SACJnote\next \endcsname{\@@note}%
				\@sacjappendnotelist{\@SACJnotelist}{\@@note}
				\stepcounter{@affiliation}
			\else
				\@sacjappendnotelist{\@SACJnotelist}{\csname @SACJnote\next \endcsname}
			\fi
		}
	\fi
	\ifx\@author\@empty\else
		\g@addto@macro\@author{, }%
		\g@addto@macro\@authoronly{, }%
	\fi
	\def\@thirdarg{#3}
	\expandafter\ifx\@thirdarg\@empty\else
		\expandafter\ifx\@email\newline\else
			\g@addto@macro\@email{, }%
			\g@addto@macro\@email\newline%
		\fi
		\g@addto@macro\@email{#2 %
			\protect\href{mailto:#3}{\nolinkurl{#3}}}%
		\expandafter\ifx\@corresponding\@empty\else
			\g@addto@macro\@email{\space{\tiny\textsf{(CORRESPONDING)}}}%
		\fi
	\fi%
	\g@addto@macro\@author{#2}%
	\@sacjappendnotelist{\@author}{\@SACJnotelist}
	\g@addto@macro\@authoronly{#2}%
}

% Call this macro -immediately- after invoking \SACJauthor if you need to 
% list multiple email addresses for a contributing author
% Args:
% 	{email address}
% 	{corresponding flag} (as \SACJauthor - can be empty but must be present)
\newcommand\SACJappendextraemail[2]{%
	\def\@corresponding{#2}%
	\g@addto@macro\@email{,\space}%
	\g@addto@macro\@email{%
		\protect\href{mailto:#1}{\nolinkurl{#1}}}%
	\expandafter\ifx\@corresponding\@empty\else
		\g@addto@macro\@email{\space{\tiny\textsf{(CORRESPONDING)}}}%
	\fi
}

\newcommand\SACJACMCategory[3]{%
	\def\@priority{#3}%
	\def\@highpriority{h}%
	\def\@medpriority{m}%
	\def\@lowpriority{l}%
	\ifx\@priority\@highpriority% 
		\@sacjappendcategory{\@thecategories}{\textbf{#1}}{\textbf{#2}}%
	\fi%
	\ifx\@priority\@medpriority%
		\@sacjappendcategory{\@thecategories}{\textit{#1}}{\textit{#2}}%
	\fi%
	\ifx\@priority\@lowpriority%
		\@sacjappendcategory{\@thecategories}{#1}{#2}%
	\fi%
%	\show\@thecategories
}

\newcommand\SACJabstract[1]{\renewcommand\@theabstract{#1}}
\newcommand\SACJkeywords[1]{\renewcommand\@thekeywords{#1}}
\newcommand\SACJcategories[1]{\renewcommand\@thecategories{#1}}

% Article history commands. Received, accepted and available online are 
% true of any SACJ article to reach production, so their @-equivalents 
% are always printed on the header, largely as an aide-memoire for the 
% production editor to call them with the actual data.
\newcommand\SACJAHReceived[1]{\renewcommand{\@sacjahrx}%
	{\textsf{#1}}}
\newcommand\SACJAHReceivedRevised[1]{\renewcommand{\@sacjahrv}{\textsf{#1}}}
\newcommand\SACJAHAccepted[1]{\renewcommand{\@sacjahac}{\textsf{#1}}}
\newcommand\SACJAHAvailableOnline[1]{\renewcommand{\@sacjahav}{\textsf{#1}}}

% Running header. 
% Field 1 contains the authors (surnames only, more than 3 and you use 'et al.')
% Field 2 contains the title (usually abbreviated)
% Please use the \ldots macro if you want an ellipsis
% All this needs to fit on the left hand side of the page header, so brevity. 
\newcommand\SACJrunningheader[2]{\renewcommand{\@SACJrunningheader}%
	{\textsf{\textbf{#1}: #2}}}

% Citation for the footer on the title page.
% Give authors of article as per APA 6th style, e.g.,
%
% \SACJcitationauthors{Lennon, J., McCartney, P., Harrison, G., and Starr, R.} 
\newcommand\SACJcitationauthors[1]{\renewcommand\@sacjcitationauthors{#1}}

% Sectioning
\renewcommand\section{\@startsection {section}{1}{\z@}%
                                   {-3.5ex \@plus -1ex \@minus -.2ex}%
                                   {2.3ex \@plus.2ex}%
                                   {\large\sffamily\uppercase}}
\expandafter\ifx\@articletype\@SACJeditorial % No numbering in editorials 
\renewcommand\section{\@startsection{section}{1}{\z@}%
                                   {-3.5ex \@plus -1ex \@minus -.2ex}%
                                   {2.3ex \@plus.2ex}%
                                   {\large\sffamily}*}
\fi
\renewcommand\subsection{\@startsection{subsection}{2}{\z@}%
                                     {-3.25ex\@plus -1ex \@minus -.2ex}%
                                     {0.9ex \@plus .2ex}%
                                     {\flushleft\normalfont\sffamily\large}}
\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%
                                     {-3.25ex\@plus -1ex \@minus -.2ex}%
                                     {0.9ex \@plus .2ex}%
                                     {\normalfont\normalsize\sffamily}}
\newcommand\subsubsubsection{\@startsection{subsubsection}{4}{\z@}@
									 {-3.25ex\@plus -1ex \@minus -.2ex}%
                                     {0.9ex \@plus .2ex}%
                                     {\normalfont\normalsize\sffamily}}
% The following macro enables you to use \paragraph to provide a fourth
% level of sectioning (after \section, \subsection, and \subsubsection)
%
% 4 Vegetables
% 4.1 Root vegetables
% 4.1.2 Potatoes
% 4.1.2.3 Methods of peeling
%
% After calling \SACJfourthlevel, you can make calls like: 
% 	\paragraph{Seasoning}
\newcommand{\SACJfourthlevel}{
	\setcounter{secnumdepth}{4}
	\titleformat{\section}
	{\large\sffamily\uppercase}{\thesection}{1em}{}
	\titlespacing*{\section}
	{0pt}{3.25ex plus 1ex minus .2ex}{2.3ex plus .2ex}
	\titleformat{\paragraph}
	{\normalfont\normalsize\sffamily}{\theparagraph}{1em}{}
	\titlespacing*{\paragraph}
	{0pt}{3.25ex plus 1ex minus .2ex}{1.5ex plus .2ex}
}

% Makes the masthead used for the SACJ front matter.
%\newcommand{\SACJmakemasthead}{
%	\begin{center}
%	\normalsize Volume~\@SACJvolume~Number~\@SACJnumber, \@SACJmonth~\@SACJyear \\
%	\footnotesize ISSN 1015-7999 (print)\\
%	\footnotesize ISSN 2313-7835 (online)\\
%	\vspace{9pt}
%	\footnotesize {\em A publication of the South African Institute of Computer Scientists and Information Technologists}\\
%	\footnotesize {Open Access:} \@SACJwebsite
%	\end{center}
%}

% Utility macro used in the SACJ front matter and nowhere else.
%\newcommand{\SACJemail}[1]{%
%	\protect\href{mailto:#1}{\nolinkurl{#1}}%
%}

template.bbl — binary, 2 KB

template.tex — the file that is compiled · 17 KB
\documentclass[submission]{sacjsub}

\begin{document}

% \SACJtitle 
% Full title of the article
\SACJtitle{SACJ article submission template}

% \SACJauthor parameters:
% [] affiliation code to match author to an institution 
%		can use multiple affiliations (e.g., [a,b,c])
%		must be present, even if empty
% {Author name}
% {email address}
% {correspondence flag} 
%		mark 'corresponding', or leave empty, but must be present
\SACJauthor[r]{An Author}{[email protected]}{corresponding}
\SACJauthor[r]{Be Author}{[email protected]}{}
% This shows how to set multiple institutions against a single author
\SACJauthor[r,n]{Cedric Author}{[email protected]}{}

% \SACJappendextraemail - sometimes an author needs to list two email addresses
% Must be invoked immediately after the author's \SACJauthor call.
% Correspondence flag should be set -here- and not in the \SACJauthor call!
%
% {email address}
% {correspondence flag}
\SACJappendextraemail{[email protected]}{}

% \SACJaddress parameters:
% [] affiliation code (exactly one per address)
% {Institution name and address}
% Note that this also provides a way for authors in two departments at the same institution
% to clarify their affiliations.
\SACJaddress[r]{Department of Computer Science, A University, South Africa}
\SACJaddress[n]{Fictional Department, Non-existent University, Erewhon}
% \SACJrunningheader parameters
% {Shortened list of authors in APA style: Surname, I. and }
% {Shortened title}
% 		This has to fit on the running header of page 2+
\SACJrunningheader{Author, A, Author, B..~and Author, C.}{SACJ submission template article}

% \SACJcitationauthors 
% Full list of authors for citation at foot of title page. Styled as APA 6th
% (refer https://owl.english.purdue.edu/owl/resource/560/07/ )
\SACJcitationauthors{Author, A, Author, B..~and Author, C.}

% \SACJabstract
% Text of article abstract
% If you have to have more than one paragraph, ask for a linebreak with \par, 
% 	not \\ or \newline
\SACJabstract{This document outlines preparation of submissions to {\em South African Computer Journal} and provides examples of layout conventions. Final layout is in LaTeX, so the MS Word template is provided for authors not familiar with that system; guidelines for MS Word are designed to simplify writing without losing the general look and feel of the finished article; the LaTeX template similarly is designed to simplify document preparation rather than to produce a finalised paper. Please note that author names in any submission for review need to be left out and any references to author anonymised. You need not
recycle our creative examples; they are here to illustrate options such as multiple affiliations.}

% \SACJcategories
% The 2012 ACM categories are tricky to get right. To be provided: examples of 
% precisely how to select and lay out 2012 categories. 
\SACJACMCategory{Applied computing}{Document management and text processing}{h}
\SACJACMCategory{Applied computing}{Document preparation}{m}
\SACJkeywords{article layout, document processing}

% \SACJmaketitle
% Must be called to generate the title page, footer, etc.
\SACJmaketitle

\section{Introduction}
{\em South African Computer Journal} is an accredited specialist academic journal, publishing research articles, technical reports and communications in English in the Computer Science, Computer Systems and Information Systems domains. Its primary target is research of interest in Africa or research published by African researchers, but all quality contributions are considered. All research articles submitted for publication are rigorously refereed by independent peer reviewers. The journal publishes original work that is of international stature. The editorial board comprises local and international scholars of high repute. The journal is published online using the Open Access
model \cite{laakso2011development}, making papers accessible in developing countries where funding to subscribe is scarce.

The journal uses double-blind review so author names should not appear in manuscripts submitted for review; any references that may reveal the author name or names should be anonymised. For example, you may use fake author names during review and substitute correct names if your paper is accepted\footnote{To illustrate anonymous submission, we do not include authors in the title; for purposes of documentation: the main author is James Dibley, with contributions by Philip Machanick.}. You must, however \textbf{list all
author names correctly on the journal web site at time of submission}.

{\em SACJ} is prepared for publication using the \LaTeX~document preparation system \cite{kopka1995guide}. On acceptance, submissions are prepared for final publication by the {\em SACJ} production editor, who provides contributors with proofs for approval prior to publication. {\em SACJ} accepts submissions prepared using either the \LaTeX~system or Microsoft Word-compatible software, and a submission template for each system is available. Please note that initial submissions should be uploaded as PDF files. Please also note that contributors are \emph{not} required to emulate the formatting, layout or styling of published {\em SACJ} articles: the production editor is responsible for these cosmetic details.

\subsection{Important links}
The authoritative version of these guidelines is available at \href{http://sacj.cs.uct.ac.za/index.php/sacj/about/submissions}{this page}. This page includes links to the submission template files, detailed notes on preparing a \LaTeX-compatible~bibliography, as well as information on the reviewing process and copyright.

Information on the {\em SACJ} editorial policy is available \href{http://sacj.cs.uct.ac.za/index.php/sacj/about/editorialPolicies}{here}, while general information about the journal is available \href{http://sacj.cs.uct.ac.za/index.php/sacj/about}{at this page}. 

Please also see the Notes for Contributors section in the frontmatter of any recent issue of {\em SACJ} (e.g.~\href{http://sacj.cs.uct.ac.za/index.php/sacj/article/view/403/184}{Vol.~28 No.~1}).

\subsection{Differences from this document}
This document is intended to demonstrate by example how to construct your own document. However, there are a few details where this document does not follow the correct style.

For simplicity of reference, this document contains embedded hyperlinks, as you will need to be in an online environment to find the relevant information. However, in your own submission, do not embed hyperlinks but rather make them explicit, either in a footnote or in a reference, so the paper can be read meaningfully offline.

\section{Preparing a submission}
Please note that of December 2015, {\em SACJ} uses a single-column format optimised for screen viewing, which additionally makes images and tables easier to fit. Articles should \emph{not} be prepared in the old two-column format. 

Authors working in \LaTeX~or a Microsoft Word-compatible package are encouraged to make use of the template files provided at \href{http://sacj.cs.uct.ac.za/index.php/sacj/about/submissions#authorGuidelines}{this page}. These templates produce an approximation of a final {\em SACJ} document in the interest of minimising the complexity authors have to deal with while preparing submissions. 

Other distinctions between the final format and the submission templates are made for the convenience of referees. The most important of these is the citation and referencing style used.

\subsection{Citation and referencing style} \label{subsec:refs}
The required citation style for {\em SACJ} \textbf{submissions} is numeric, as in the following example:

\begin{quote}
    When we have a sentence that needs backing up, we cite a reference \cite{kopka1995guide} and if several back it up, cite several \cite{kopka1995guide,apa2013}. If a reference needs to cite a page number we include that in the citation \cite[p 42]{apa2013}.
\end{quote}
The preferred referencing order for {\em SACJ} submissions is by order of citation: the {\em SACJ} template and class file are configured to achieve this. Authors using Word can enable a numeric citation style by installing the IEEE reference styles freely available from \href{https://bibword.codeplex.com}{BibWord}, but this is {\em not} mandatory.

The {\em published} referencing style for {\em SACJ} is as specified by the American Psychological Association. We specifically {\em do not} want you to provide references in this
style as it is hard to check and to convert to other formats. The {\em SACJ} production editor will update your references for compliance but, to avoid confusion when checking your proofs, please consider consulting the APA publication manual, 6th edition \cite{apa2013} or \href{https://owl.english.purdue.edu/owl/resource/560/05/}{a reputable online guide}. Pay particular attention to the arcane rules for using {\em et al}.

Please provide as much information as possible to identify each work cited, including the year of publication, full author list, title, journal or conference proceedings name, page numbers (unless it is unnumbered, e.g., an online publication) and other relevant details that may be available such as volume and issue number (for journals) and the DOI if available. Lapses in such detail make it hard to count citations accurately \cite{lariviere2006place}.

Please also see the \emph{SACJ} \href{http://sacj.cs.uct.ac.za/index.php/sacj/about/submissions#authorGuidelines}{author guidelines page} for important information on supplying references with your {\em SACJ} submission, and Subsection~\ref{subsec:doi} for important information on DOI metadata.

Specific web pages should listed as references; if they are undated, give the date last visited as the year.  If you reference an entire web site, use a footnote (e.g., the {\em SACJ} site\footnote{http://sacj.cs.uct.ac.za}). It is a judgement call whether a web site should be in a footnote or cited as a reference: if you list it as an authority, make it into a reference. If you list it so it purely so that it can be found, use a footnote.

\subsection{Article abstracts}
Abstracts for peer-reviewed {\em SACJ} articles must be fewer than 200 words. Abstracts that exceed this limit will require revision. Citations, footnotes and special text formatting should be omitted from article abstracts.

\subsection{Article metadata}
In addition to an author list, affiliation list, and an abstract, {\em SACJ} peer-reviewed articles must be supplied with a list of keywords and a list of applicable \href{https://dl.acm.org/ccs/ccs.cfm?}{ACM 2012 categories}. ACM provide \href{http://dl.acm.org/ccs/ccs.cfm}{an interactive tool} and exact instructions for printing categories: it is only necessary to list the categories and to mark the most significant ones. An \verb"\SACJACMCategory" macro is provided for authors working in a \LaTeX~environment. 

The {\em SACJ} \LaTeX~style provides a notation for authors who hold multiple institutional affiliations. As with the ACM categories, as long as this information is clearly available in your draft article, the production editor can take care of presenting those details. We can also list multiple email addresses for an author. If you are working in a \LaTeX~environment, please examine the latest version of the \verb"sacjsub" template to see how to do this. If you are working in Word, it doesn't matter how you style these details in your submission as long as they are unambiguous. 

\subsection{\LaTeX~preparation}
The {\em SACJ} \LaTeX~\verb"sacjsub" template is intended to compile on a minimal \LaTeX~installation. The document class used to produce the published version requires many additional packages and some special configuration of the \LaTeX~environment.

\subsection{Microsoft Word-compatible preparation}
The {\em SACJ} Word-compatible template provides document styles to assist with document layout. Please endeavour to make consistent use of styles in preparing your document. 

Authors preparing submissions with Microsoft Word-compatible packages are requested to create and submit a BibTeX file containing your references. Directions for doing this can be found \href{http://sacj.cs.uct.ac.za/index.php/sacj/about/submissions#authorGuidelines}{at this page.}

On acceptance of your submission, a final version will be prepared by the production editor using \LaTeX. A full proof will be provided for review ahead of publication. During this time your citations will be converted to the APA 6th format, as discussed elsewhere in this guide. 

Please see the following sections for guidelines on tables and graphics. {\em SACJ} requires that wherever possible you provide original graphic files with your submission.  

\subsection{Tables}
{\em SACJ} maintains a house style for presenting tabular information that emphasises on-screen readability. For examples of this style, see \href{http://sacj.cs.uct.ac.za/index.php/sacj/article/view/367/180}{Tables 1--5 of this recent article}. Authors are {\em not} required to emulate this style in their submissions. Tables can be adapted from Microsoft Word into native \LaTeX~code (and the {\em SACJ} house style) by the production editor. 

\begin{table}[h]
\centering 
\caption{An example table}
\label{table1}
\begin{tabular} {| c | c | c |} \hline
{\bfseries Number} & {\bfseries Clicks} & {\bfseries Progression (\%) }\\ \hline
\multicolumn{3}{|c|}{{\bfseries First series}} \\ \hline
1 & 15 & 100 \\
2 & 17 & 100 \\
3 & 28 & 100 \\
4 & 22 & 100 \\ \hline
{\bfseries Mean } & { 20.5} & \\ \hline
\multicolumn{3}{|c|}{{\bfseries Second series}} \\ \hline
1 & 21 & 100 \\
2 & 18 & 100 \\
3 & 29 & 90 \\
4 & 19 & 100 \\
5 & 25 & 100 \\ \hline
{\bfseries Mean} & { 20.75} & \\ \hline
\end{tabular}
\end{table}

Authors using the \LaTeX~environment will find that multirow and multicolumn tables are enabled in the {\em SACJ} submissions class file. More flexible table layouts can be obtained through the {\verb"tabu"} package \cite{chervetnd}. If this is not suitable for your submission, please advise the editor and production editor. Table \ref{table1} provides an example of the sort of table we can produce.

\subsection{Hyperlinks}
Hyperlinks are used within {\em SACJ} articles to provide cross-references to images, tables, sections, and references (e.g., Figure~\ref{fig:1}, Table~\ref{table1}, Subsection~\ref{subsec:doi}, \cite{kopka1995guide}). Do not worry about configuring these in your submission: the production editor will set these up in the final proof. Hyperlinks to Internet sources in author submissions should be provided as described in Subsection~\ref{subsec:refs}. For convenience, in this template, we include some clickable links inline in the text, but you should~not do so in your submission.  

\subsection{Footnotes}
Footnotes may be used to elaborate on a point\footnote{And if the point it makes needs a reference, cite here \cite{kopka1995guide}.} without breaking the flow of a paragraph, or to expand on a cited reference \cite{apa2013}\footnote{Although that is a point strongly supported in the literature, there is dissent [6,7] though some consider that dissent the work of cranks [5].}. However, when a statement simply needs to be supported by a reference, this should be given by a citation rather than a footnote. If you simply want to point to
existence of a web site rather than use it as a reference, a footnote is the preferred option.

\subsection{Graphics}
{\em SACJ} accepts images in vector graphics (PDF, EPS) formats and raster graphics (TIFF, PNG) formats. PNG raster graphic files can be accepted as a last resort, but authors should be advised that this format affords the lowest quality and clarity of reproduction. JPG or GIF raster graphics are not suitable.


\begin{figure}[ht]
	\begin{center}
		\includegraphics{mouse}
	\end{center}
\caption{Vector graphics image (PDF) of a mouse}
\label{fig:1}
\end{figure}

Vector graphics formats provide the best possible reproduction and the most flexibility when images need to be scaled or rotated for layout purposes. TIFF or PNG files ideally should be prepared at a resolution of 600dpi for greyscale images and 300dpi for multicolour images.

Figure~\ref{fig:1} contains an example of a vector graphics image. Resize this document and you should see that it scales up cleanly.
 
Authors preparing their submissions using Microsoft Word are requested to provide original graphics files for any images embedded in the document.

\subsection{DOI metadata} \label{subsec:doi}
{\em SACJ} requires that authors cite DOI metadata for each cited reference where it is available. A  powerful and freely-accessible search tool for DOI metadata is \href{http://www.crossref.org/SimpleTextQuery/}{the CrossRef database}. The current standard for DOI display is a complete URL (see reference list for an example); a DOI is an extra check finding a source that may look similar to another.

% \printbibliography
\bibliographystyle{unsrtnat}
\bibliography{example}
\end{document}

The first page, as this template compiles today. Click it to enlarge, and again to shrink. Open the file ↗