An -*- outline -*- of the user-visible changes in CL-BibTeX

* News since version 1.0

** New feature

*** Warn when "equivalent" BibTeX entries are cited.

    Large bibliographic databases which arise from the collaboration
    of several people often contain multiple copies of the same entry,
    using different keys.  This is often hard to fix in the database,
    because removing an entry breaks existing documents.  When several
    of these "equivalent" BibTeX entries are cited in one document
    (this happens most frequently in cut-and-paste works from several
    authors), the formatted bibliography will contain several copies
    of the same reference.

    CL-BibTeX can now help to detect and fix this situation.  The
    maintainer of the bibliographic database should add, to each
    problematic entry, an attribute "equivalent-entries" that is a
    comma-separated list of entries that should be considered
    "equivalent".  (The usual BibTeX styles will ignore this
    attribute.)  We also recommend to add a comment (or "annote"
    attribute) that advises the user of the bibliographic database,
    which entry to use instead of the current entry.

    An example:

      @article{newbar,
	Author = {Barvinok, Alexander I.},
	Journal = {Math. Comp.},
	Number = {255},
	Pages = {1449--1466},
	Title = {Computing the {E}hrhart quasi-polynomial of a rational simplex},
	Volume = {75},
	Year = {2006},
        equivalent-entries = {newbar,barvinok-2006-ehrhart-quasipolynomial}
	annote = {In new documents, use the equivalent entry
		  barvinok-2006-ehrhart-quasipolynomial rather than this entry!}
      }

    CL-BibTeX computes the equivalence classes spanned by these lists
    of equivalent entries.  If equivalent entries are cited in one
    document, CL-BibTeX will emit a warning.  The user can now fix the
    citations in the document.

** User interface changes

*** Signal an error on repeated entries.

    Unlike the original BibTeX, errors are also signalled for repeated
    entries in the database that are not used.

*** Emulate BibTeX's verbosity more thoroughly.

    In particular, report which files are read; at the end of the run,
    report the number and the type of errors.  This makes it possible
    to use CL-BibTeX as a compatible replacement for BibTeX within
    AUCTeX. 

*** The CL-BibTeX split-initials features is now on by default.

    In addition, CL-BibTeX emits a warning, so the user can fix the
    entries in the bibliographic database to make them work correctly
    with the original BibTeX too.

** Improved BibTeX compatibility and bug fixes:

*** Properly handle abbreviating names that start with special characters
    or similar.  Example: "Matiyasevich, {\relax{Yu}}ri V."  now gets
    abbreviated to "Matiyasevich, {\relax{Yu}}. V."

*** Recognize "von" tokens in names that start with special characters.

*** BibTeX styles using the KEY attribute of bibliographic entries now work
    as expected.

* News in version 1.0

** CL-BibTeX is now released under GNU LGPL 2.1 or later 
   with Franz-style Lisp clarification.

** An ASDF system definition file is included.

   It was contributed by Hans Halvorson.

* News in version 0.4

** BibTeX's output line breaking mechanism has been implemented.

   Printing the .bbl file is now done with the new functions BBL-PRINT
   and BBL-TERPRI, which break output lines after *BBL-MAX-PRINT-LINE*
   characters (the default is 79).

   Output line breaking can be disabled by setting or binding
   *BBL-MAX-PRINT-LINE* to nil.  This can be desirable, for instance,
   for formatting bibliographies that contain very long lines with
   \url macros, because the comment characters (%) introduced by the
   line breaking mechanism show up in the formatted URL.  (However,
   the real solution for the problem with \url macros is to simply
   break the URLs in the bibliography file using whitespace, because
   url.sty ignores whitespace when typesetting the URL.)

** The compiler now deals with WHILE$ loops with complicated data flow.

   The predicate function can now pass values to the body function on
   the stack.  Such a WHILE$ loop gets converted to a simple LOOP form
   with a RETURN call, rather than a DO form.

** The compiler now makes some variables constant.

   Variables that get assigned a value exactly once (before any
   reference to them) are turned into constants.  This makes the
   data-flow in the resulting Lisp programs clearer.

** The compiler now tries to deal with slightly broken style files.

   Many BibTeX style files are slightly broken in a way such that the
   stack becomes corrupted in some corner cases.  The compiler cannot
   analyze those functions completely.  

   Now, instead of giving up, the compiler tries to fix the bad stack.
   This results in Lisp files that contain calls to ERROR.  If the
   compiler guesses right, the generated Lisp program will work as
   well as the original style file; but when one of the broken corner
   cases occurs, a run-time error will be signaled.

** The system now has a test-suite for testing the correctness.

** Bug fixes:

*** A bug regarding functions that return multiple values has been fixed.

    The bug showed up when compiling certain style files generated
    with the custom-bib system (merlin.mbs).  The compiler erroneously
    complained about an IF$ form with bad stack balance.

*** The compiler now coerces booleans to integers in assignments.

*** When an undefined macro is used in an entry, don't skip the whole entry.

    Just emit a warning and use an empty string.

*** Some minor differences with BibTeX's output have been corrected.

    There were too many tildes in some formatted names.  The sort
    order was sometimes wrong, due to a bug in PURIFY$.  Changing the
    case of a string resulted in extraneous whitespace after control words.

*** The capitalization of "foreign characters" has been corrected.

*** Crossrefs are also resolved when all entries are cited (\cite{*}).


* News in version 0.3.1

  This is a bug-fix release.


* News in version 0.3

** The compiler now supports BibTeX macros (named strings).

** The compiler now makes some variables lexical (rather than special).

   The compiler keeps track whether a variable is accessed before it
   is assigned in any function.  If not, we make the variable lexical
   in all functions (in a second compiler pass).

   This makes the translated style file more readable because the data
   flow is much clearer, and many temporary assignments can be dropped.

** The compiler is more careful with respect to the package system.
   
   Symbols that were generated from BST function names could clash
   with symbols naming built-in Common Lisp functions.  The compiler
   now takes care to shadow all generated symbols.

** Bug fixes:

*** The interpreter and the compiler now handle empty BST function blocks { }. 

*** A capitalization bug has been fixed.


* News in version 0.2

** Nested .aux files are now handled.

** The crossref feature has been implemented.

** A model for Lisp BibTeX styles has been implemented.

   A Lisp BibTeX style is a Lisp program in a file with type "lbst".
   The Lisp program is supposed to define a BibTeX style using the
   macro DEFINE-BIBTEX-STYLE or the function REGISTER-BIBTEX-STYLE.

   The BIBTEX function first looks for already registered styles, then
   it tries to find and load "lbst" files, then it tries to find and
   interpret "bst" files.

   The BST->CL compiler now puts all the code of a BibTeX style into a
   separate package and emits a DEFINE-BIBTEX-STYLE form.

** A shell script that calls CL-BibTeX has been added.

** Portability improvements.

   CL-BibTeX now works with CMUCL, SBCL 0.7.9, and CLISP 2.30.

