|  | 
Skribe supports bibliographies. In order to use bibliography
refit is needed to: 
Use the default pre-existing bibliography table or create a 
custom one.
Provide a bibliography database.
Load the database by the mean of the bibliographySkribe function call.
Reference to a bibliography entry, with a refSkribe 
function call.
 
This section describes the function of using and creating bibliography 
tables. The predicate bib-table?returns#tif and only
if its argument is a bibliography table as returned bymake-bib-tableordefault-bib-table. Otherwisebib-table?returns#f. The function default-bib-tablereturns a global, pre-existing
bibliography-table: The function make-bib-tableconstructs a new 
bibliography-table: 
The function bibliographyloads bibliographyentriesinto the Skribe memory. An entry is either a list
representing one entry (such as an article or book reference) or a
string which denotes a file name that contains several
entries. All the entries loaded in memory are available for the function
ref. A bibliography database must be loaded
before any reference is introduced. It is advised to place
thebibliographySkribe function call before the call to thedocumentfunction call. The command option can be used to import foreign bibliography.
The following example, shows how to directly use a Bibtex bibliography
using the Skribebibtex6.4 translator.Example: 
Ex. 25: Printing a bibliography| 
| (bibliography :command "gzip -d --to-stdout ~a | skribebibtex" "scheme.bib.gz")
 |  |  | 6.2.1 Bibliography syntax
 | 
The Skribe bibliography database uses a format very close to
the Bibtex one. It is a parenthetic version of Bibtex. Here is the
syntax of an entry: 
| 
| 
<entry>  -->  (<kind> <key> <field>+)
<kind>   -->  techreport | article | inproceedings | book
<key>    -->  <symbol> | <string>
<field>  -->  (<symbol> <string>) |  |  Bibtex files cannot be directly loaded in Skribe but the tool
skribebibtex can be use to
automatically convert Bibtex format to Skribe bibliography format.
Here is an example of a simple Skribe database. 
| 
| (book queinnec:lisp
   (author "Queinnec, C.")
   (title "Lisp In Small Pieces")
   (publisher "Cambridge University Press")
   (year "1996"))
(book scheme:ieee
   (title "IEEE Standard for the Scheme Programming Language")
   (author "IEEE Std 1178-1990")
   (publisher "Institute of Electrical and Electronic Engineers, Inc.")
   (address "New York, NY")
   (year "1991"))
(misc bigloo
   (url "http://www.inria.fr/mimosa/fp/Bigloo"))
(misc scheme:r4rs
   (title "The Revised4 Report on the Algorithmic Language Scheme")
   (author "Clinger, W. and Rees, J.")
   (month "Nov")
   (year "1991")
   (url "http://www.cs.indiana.edu/scheme-repository/R4RS/r4rs_toc.html"))
(article scheme:r5rs
   (title "The Revised5 Report on the Algorithmic Language Scheme")
   (author "Kelsey, R. and Clinger, W. and Rees, J.")
   (journal "Higher-Order and Symbolic Computation")
   (volume "11")
   (number "1")
   (month "Sep")
   (year "1998")
   (url "http://kaolin.unice.fr/Bigloo/doc/r5rs.html"))
(book as:sicp
   (author "Abelson, H. and Sussman, G.")
   (title "Structure and Interpretation of Computer Programs")
   (year "1985")
   (publisher "MIT Press")
   (address "Cambridge, Mass., USA"))
 |  |  | 6.3 Printing a bibliography
 | 
The function the-bibliographydisplays the bibliography. 
Example:| prototype | 
|---|
 | (the-bibliography :pred [:bib-table (default-bib-table)] [:sortbib-sort/authors] [:count'partial]) |  | bib-table | html latex xml | The bibliography 
               make-bib-tabletable to be displayed. |  | pred | html latex xml | A predicate filtering the bibliography entries. It takes
                      two parameters: the bibliography entry and the 
                      the-bibliography node. |  | sort | html latex xml | A function sorting a list of entries. |  | count | html latex xml | The symbol partialorfullspecifies the numbering to be applied. The valuepartialtells Skribe to count only the entries
               filtered in by pred. The valuefulltells Skribe to count all entries, event those filtered out
               by pred. |  | bib-table?make-bib-tabledefault-bib-tablebibliography |  
Ex. 26: Printing a bibliography| 
| [Scheme ,(ref :bib 'scheme:r5rs) is functional programming language. It exists
several books about this language ,(ref :bib '(as:sicp queinnec:lisp)).
,(linebreak 2)
,(center (bold [-- Bibliography --]))
,(center (frame :border 1 :margin 2 :width 90. (the-bibliography)))]
 |  |  Produces: 
| 
| Scheme [5] is functional programming language. It exists
several books about this language [1,3]. 
 -- Bibliography --
 
| 
| [1] | Abelson, H.  and Sussman, G.  -- Structure and Interpretation of Computer Programs -- MIT Press, Cambridge, Mass., USA, 1985. |  | [5] | Kelsey, R.  and Clinger, W.  and Rees, J.  -- The Revised5 Report on the Algorithmic Language Scheme -- Higher-Order and Symbolic Computation, 11(1), Sep, 1998. |  | [3] | Queinnec, C.  -- Lisp In Small Pieces -- Cambridge University Press, 1996. |  |  |  |  | 6.3.1 Filtering bibliography entries
 | 
The pred option is bound to a function of one argument
that filters bibliography entries. It is used to control which entries
must appears on a bibliography. The default behavior is to display
only the entries referenced to in the text. For instance, in order to
display all the entries of a bibliography, is it needed to
print the bibliography with a predicate returning always Example:#t. 
Ex. 27: Unfiltering bibliography entries| 
| (center 
 (frame :border 1 :margin 2 :width 90. 
        (the-bibliography :pred (lambda (m n) #t))))
 |  |  Produces: 
| 
| 
| 
| [1] | -- http://www.inria.fr/mimosa/fp/Bigloo. |  | [1] | Abelson, H.  and Sussman, G.  -- Structure and Interpretation of Computer Programs -- MIT Press, Cambridge, Mass., USA, 1985. |  | [3] | Clinger, W.  and Rees, J.  -- The Revised4 Report on the Algorithmic Language Scheme -- http://www.cs.indiana.edu/scheme-repository/R4RS/r4rs_toc.html, Nov, 1991. |  | [2] | Ieee Std 1178-1990,  -- IEEE Standard for the Scheme Programming Language -- Institute of Electrical and Electronic Engineers, Inc., New York, NY, 1991. |  | [5] | Kelsey, R.  and Clinger, W.  and Rees, J.  -- The Revised5 Report on the Algorithmic Language Scheme -- Higher-Order and Symbolic Computation, 11(1), Sep, 1998. |  | [3] | Queinnec, C.  -- Lisp In Small Pieces -- Cambridge University Press, 1996. |  |  |  |  The second example, filters out the entries that are not book
or that are not referenced to from the document.Example: 
Ex. 28: Unfiltering bibliography entries| 
| (center
 (frame :border 1 :margin 2 :width 90.
        (the-bibliography :pred (lambda (m n) 
                                   (and (eq? (markup-option m 'kind) 'book)
                                        (pair? (markup-option m 'used)))))))
 |  |  Produces: 
| 
| 
| 
| [1] | Abelson, H.  and Sussman, G.  -- Structure and Interpretation of Computer Programs -- MIT Press, Cambridge, Mass., USA, 1985. |  | [3] | Queinnec, C.  -- Lisp In Small Pieces -- Cambridge University Press, 1996. |  |  |  |  The last example, illustrates how to change the rendering of a
bibliography. It uses the [?mark processor: skr/manual.skr:7123] construction 
and it defines two [?ident writer: user/bib.skb:8293] for
displaying Example:&bib-entry-identand&bib-entry-titlemarkups. These two markups are introduced by Skribe when it loads a 
bibliography. All fields of bibliography entries are represented by
markups whose prefix are&bib-entry-. The parent of all these
markups is the bibliography entry itself. The&bib-entry-markups
are options of there parent. 
Ex. 29: Unfiltering bibliography entries| 
| (center
 (frame :border 1 :margin 2 :width 90.
        (processor :engine
                   (make-engine '_ :filter string-upcase)
                   :combinator
                   (lambda (e1 e2)
                      (let ((e (copy-engine '_ e2)))
                         (markup-writer '&bib-entry-ident e
                                        :action
                                        (lambda (n e)
                                           (let* ((be (ast-parent n))
                                                  (o (markup-option be 'author))
                                                  (y (markup-option be 'year)))
                                              (output (markup-body o) e1)
                                              (display ":")
                                              (output (markup-body y) e))))
                         (markup-writer '&bib-entry-title e
                                        :action
                                        (lambda (n e)
                                           (skribe-eval (it (markup-body n)) e)))
                         e))
                   (the-bibliography :pred 
                                     (lambda (m n)
                                        (eq? (markup-option m 'kind) 'book))))))
 |  |  Produces: 
| 
| 
| 
| [ABELSONH.SUSSMANG.:1985] | Abelson, H.  and Sussman, G.  -- Structure and Interpretation of Computer Programs -- MIT Press, Cambridge, Mass., USA, 1985. |  | [IEEE STD 1178-1990:1991] | Ieee Std 1178-1990,  -- IEEE Standard for the Scheme Programming Language -- Institute of Electrical and Electronic Engineers, Inc., New York, NY, 1991. |  | [QUEINNECC.:1996] | Queinnec, C.  -- Lisp In Small Pieces -- Cambridge University Press, 1996. |  |  |  |  | 6.3.2 Sorting bibliography entries
 | 
The sort option of the the-bibliographymarkup is used for sorting the bibliography entries. There are three
pre-existing functions for sorting entries: 
| prototype | 
|---|
 | (bib-sort/authors l) |  | (bib-sort/idents l) |  | (bib-sort/dates l) |  | l | The list of entries. |  The first function sorts the entries according to an alphabetic ordering
on authors. The second sorts according to an alphabetic ordering on 
entries identifier. The last one sorts according to entries date.Example: 
Ex. 30: Sorting bibliography entries| 
| (define (bib-sort/idents l)
   (sort l (lambda (e f) (string<? (markup-ident e) (markup-ident f))))) |  |  
In this section we present the Skribebibtex translator that compiles Bibtex
source files into a Skribe bibliography. 
| 
| ../bin/skribebibtex.bigloo [options] [input]... |  |  
This manual page is not meant to be exhaustive. It
documents the skribebibtex, a tool that translates
Bibtex files into Skribe, bibliography format. These 
files can be used by the skribe compiler to produce  
bibliography entries. 
The skribe  compiler uses file 
suffixes in order to select amongst its possible targets which to choose. 
These suffixes are:
  .biba Bibtex source file.
 -h,--helpThis help message.--optionsDisplay the options and exit.-o OUTSet the destination file. |