==The database==
</pre>
this gives:
{| |+ |
tag
| |
category
| |
fields
| |+ |
demo-001
| |
book
| |
author index title year
| |+ |
demo-002
| |
book
| |
crossref index year
| |+ |
demo-003
| |
book
| |
author comment index title year
| |+ |
demo-004
| |
book
| |
author comment index title year
| |+ |
demo-005
| |
book
| |
author doi index pages serial title url year
| |}
<br/>
You can set the current active dataset with
<br/>
<tt>setupbtxlistvariant : artauthor</tt>
{| |+ |
<tt>no specific settings</tt>
| | | |}
||}
<br/>
<tt>setupbtxlistvariant : author</tt>
{| |+ |
<tt>no specific settings</tt>
| | | |}
||}
<br/>
<tt>setupbtxlistvariant : editor</tt>
{| |+ |
<tt>no specific settings</tt>
| | | |}
||}
<br/>
The exact rendering of list entries is determined by the <tt>alternative</tt> key and defaults to <tt>apa</tt> which uses definitions from <tt>publ-imp-apa.mkiv</tt>. If you look at that file you will see that each category has its own setup. You may also notice that additional tests are needed to make sure that empty fields don’t trigger separators and such.
<br/>
There are three commands to flush data:
{| |+ |
<tt>\btxfield</tt>
| |
fetch a explicit field (e.g. <tt>year</tt>)
| |+ |
<tt>\btxdetail</tt>
| |
fetch a derived field (e.g. <tt>short</tt>)
| |+ |
<tt>\btxflush</tt>
| |
fetch a derived or explicit field
| |}
<br/>
Normally you can use <tt>\btxfield</tt> or <tt>\btxflush</tt> as derived fields just like analyzed author fields are flushed in a special way.
<br/>
Keep in mind that normally you don’t need to mess with definitions like this because standard rendering styles are provided. These styles use a few helpers that inject symbols but also take care of leading and trailing spaces:
{| |+ |
<tt>\btxspace</tt>
| |
before after
| |+ |
<tt>\btxperiod</tt>
| |
before. after
| |+ |
<tt>\btxcomma</tt>
| |
before, after
| |+ |
<tt>\btxlparent</tt>
| |
before (after
| |+ |
<tt>\btxrparent</tt>
| |
before) after
| |+ |
<tt>\btxlbracket</tt>
| |
before [after
| |+ |
<tt>\btxrbracket</tt>
| |
before] after
| |}
<br/>
So, the previous example setup can be rewritten as:
<br/>
You can use a (configurable) default or pass directives: Valid directives are
{| |+ |
conversion
| |
rendering
| |+ |
<tt>inverted</tt>
| |
the Frog jr, Kermit
| |+ |
<tt>invertedshort</tt>
| |
the Frog jr, K
| |+ |
<tt>normal</tt>
| |
Kermit, the Frog, jr
| |+ |
<tt>normalshort</tt>
| |
K, the Frog, jr
| |}
<br/>
There is a whole bunch of cite options and more can be easily defined.
{| |+ |
key
| |
rendering
| |+ |
<tt>author</tt>
| |
(author)
| |+ |
<tt>authornum</tt>
| |
[author [btx error 1]]
| |+ |
<tt>authoryear</tt>
| |
(author (year))
| |+ |
<tt>authoryears</tt>
| |
(author, year)
| |+ |
<tt>doi</tt>
| |
[todo: doi]
| |+ |
<tt>key</tt>
| |
[demo-005]
| |+ |
<tt>none</tt>
||
| | |+ |
<tt>num</tt>
| |
[[btx error 1]]
| |+ |
<tt>page</tt>
| |
pages
| |+ |
<tt>serial</tt>
| |
[5]
| |+ |
<tt>short</tt>
| |
[aut00]
| |+ |
<tt>type</tt>
| |
[book]
| |+ |
<tt>url</tt>
| |
[todo: url]
| |+ |
<tt>year</tt>
| |
(year)
| |}
<br/>
Because we are dealing with database input and because we generally need to manipulate entries, much of the work is delegated to Lua. This makes it easier to maintain and extend the code. Of course TEX still does the rendering. The typographic details are controlled by parameters but not all are used in all variants. As with most ConTEXt commands, it starts out with a general setup command:
<br/>
<tt>setupbtxcitevariant : author</tt>
{| |+ |
<tt>right</tt>
| |
<tt>)</tt>
| |+ |
<tt>middle</tt>
| |
<tt>, </tt>
| |+ |
<tt>left</tt>
| |
<tt>(</tt>
| |}
<br/>
<tt>setupbtxcitevariant : authornum</tt>
{| |+ |
<tt>right</tt>
| |
<tt>]</tt>
| |+ |
<tt>middle</tt>
| |
<tt>, </tt>
| |+ |
<tt>left</tt>
| |
<tt>[</tt>
| |}
<br/>
<tt>setupbtxcitevariant : authoryear</tt>
{| |+ |
<tt>compress</tt>
| |
<tt>yes</tt>
| |+ |
<tt>inbetween</tt>
| |
<tt>, </tt>
| |+ |
<tt>right</tt>
| |
<tt>)</tt>
| |+ |
<tt>middle</tt>
| |
<tt>, </tt>
| |+ |
<tt>left</tt>
| |
<tt>(</tt>
| |}
<br/>
<tt>setupbtxcitevariant : authoryears</tt>
{| |+ |
<tt>compress</tt>
| |
<tt>yes</tt>
| |+ |
<tt>inbetween</tt>
| |
<tt>, </tt>
| |+ |
<tt>right</tt>
| |
<tt>)</tt>
| |+ |
<tt>middle</tt>
| |
<tt>, </tt>
| |+ |
<tt>left</tt>
| |
<tt>(</tt>
| |}
<br/>
<tt>setupbtxcitevariant : doi</tt>
{| |+ |
<tt>right</tt>
| |
<tt>]</tt>
| |+ |
<tt>left</tt>
| |
<tt>[</tt>
| |}
<br/>
<tt>setupbtxcitevariant : key</tt>
{| |+ |
<tt>right</tt>
| |
<tt>]</tt>
| |+ |
<tt>left</tt>
| |
<tt>[</tt>
| |}
<br/>
<tt>setupbtxcitevariant : none</tt>
{| |+ |
<tt>no specific settings</tt>
| | | |}
||}
<br/>
<tt>setupbtxcitevariant : num</tt>
{| |+ |
<tt>compress</tt>
| |
<tt>yes</tt>
| |+ |
<tt>inbetween</tt>
| |
<tt>--</tt>
| |+ |
<tt>right</tt>
| |
<tt>]</tt>
| |+ |
<tt>left</tt>
| |
<tt>[</tt>
| |}
<br/>
<tt>setupbtxcitevariant : page</tt>
{| |+ |
<tt>inbetween</tt>
| |
<tt>–</tt>
| |}
<br/>
<tt>setupbtxcitevariant : serial</tt>
{| |+ |
<tt>right</tt>
| |
<tt>]</tt>
| |+ |
<tt>left</tt>
| |
<tt>[</tt>
| |}
<br/>
<tt>setupbtxcitevariant : short</tt>
{| |+ |
<tt>right</tt>
| |
<tt>]</tt>
| |+ |
<tt>left</tt>
| |
<tt>[</tt>
| |}
<br/>
<tt>setupbtxcitevariant : type</tt>
{| |+ |
<tt>right</tt>
| |
<tt>]</tt>
| |+ |
<tt>left</tt>
| |
<tt>[</tt>
| |}
<br/>
<tt>setupbtxcitevariant : url</tt>
{| |+ |
<tt>right</tt>
| |
<tt>]</tt>
| |+ |
<tt>left</tt>
| |
<tt>[</tt>
| |}
<br/>
<tt>setupbtxcitevariant : year</tt>
{| |+ |
<tt>right</tt>
| |
<tt>)</tt>
| |+ |
<tt>left</tt>
| |
<tt>(</tt>
| |}
A citation variant is defined in several steps and if you really want to know the dirty details, you should look into the <tt>publ-imp-*.mkiv</tt> files. Here we stick to the concept.
<pre detail='typing'>\startsetups btx:cite:author
<br/>
This results in:
{| |+ |
<tt>demo-001</tt>
| |
Hag13
| |
bibTEX, the ConTEXt way
| |+ |
<tt>demo-002</tt>
| |
Hag14
| |
bibTEX, the ConTEXt way
| |+ |
<tt>demo-003</tt>
| |
HO96
| |
Typesetting education documents
| |+ |
<tt>demo-004</tt>
| |
Sca21
| |
Designing high speed trains
| |+ |
<tt>demo-005</tt>
| |
aut00
| |
title
| |}
\stoptabulate
</pre>
{| |+ |
<tt>tag</tt>
| |
Hagen:TB17-1-54
| |+ |
<tt>title</tt>
| |
PPCHTEX: typesetting chemical formulas in TEX
| |}
<pre detail='buffer'>\startxmlsetups btx:demo
\xmlcommand
\xmlsetup{btx:tugboat}{btx:demo}
{| |+ |
<tt>tag</tt>
| |
Hagen:TB17-1-54
| |+ |
<tt>title</tt>
| |
PPCHTEX: typesetting chemical formulas in TEX
| |}
<br/>
Here is another example:
\stoptabulate
{| |+ |
Knuth:TB10-1-31
| |
Typesetting Concrete Mathematics
| |+ |
Knuth:TB10-1-8
| |
TEX would find it difficult …
| |+ |
Knuth:TB10-3-325
| |
The new versions of TEX and MF
| |+ |
Knuth:TB10-4-529
| |
The errors of TEX
| |+ |
Knuth:TB11-1-13
| |
Virtual Fonts: More Fun for Grand Wizards
| |+ |
Knuth:TB11-2-165
| |
Exercises for TEX: The Program
| |+ |
Knuth:TB11-4-489
| |
The future of TEX and MF
| |+ |
Knuth:TB11-4-497
| |
Arthur Lee Samuel, 1901--1990
| |+ |
Knuth:TB11-4-499
| |
Answers to Exercises for TEX: The Program
| |+ |
Knuth:TB12-2-313
| |
Fixed-point glue setting: Errata
| |+ |
Knuth:TB14-4-387
| |
Icons for TEX and MF
| |+ |
Knuth:TB17-1-29
| |
Important message regarding CM fonts
| |+ |
Knuth:TB2-3-5
| |
The current state of things
| |+ |
Knuth:TB3-1-10
| |
Fixed-point glue settingDash an example of WEB
| |+ |
Knuth:TB31-2-121
| |
An Earthshaking Announcement
| |+ |
Knuth:TB4-2-64
| |
A note on hyphenation
| |+ |
Knuth:TB5-1-4
| |
TEX incunabula
| |+ |
Knuth:TB5-1-67
| |
Comments on quality in publishing
| |+ |
Knuth:TB5-2-105
| |
A course on MF programming
| |+ |
Knuth:TB6-1-36
| |
Recipes and fractions
| |+ |
Knuth:TB7-2-101
| |
The TEX logo in various fonts
| |+ |
Knuth:TB7-2-95
| |
Remarks to celebrate the publication of Computers & Typesetting
| |+ |
Knuth:TB8-1-14
| |
Mixing right-to-left texts with left-to-right texts
| |+ |
Knuth:TB8-1-6
| |
It happened: announcement of TEX 2.1
| |+ |
Knuth:TB8-1-73
| |
Problem for a Saturday afternoon
| |+ |
Knuth:TB8-2-135
| |
Fonts for digital halftones
| |+ |
Knuth:TB8-2-210
| |
Saturday morning problemDash solution
| |+ |
Knuth:TB8-2-217
| |
Reply: Printing out selected pages
| |+ |
Knuth:TB8-3-309
| |
Macros for Jill
| |+ |
Knuth:TB9-2-152
| |
A Punk Meta-Font
| |}
<br/>
A more extensive example is the following. Of course this assumes that you know what xml support mechanisms and macros are available.
\xmlsetup{btx:tugboat}{btx:sorter}
{| |+ |
1984
| |
Knuth:TB5-1-67
| |
Don Knuth
| |+ |
1984
| |
Knuth:TB5-1-4
| |
Donald E. Knuth
| |+ |
1984
| |
Knuth:TB5-2-105
| |
Donald E. Knuth
| |+ |
1985
| |
Knuth:TB6-1-36
| |
Donald E. Knuth
| |+ |
1986
| |
Knuth:TB7-2-101
| |
Donald E. Knuth
| |+ |
1987
| |
Knuth:TB8-2-135
| |
Donald E. Knuth
| |+ |
1987
| |
Knuth:TB8-3-309
| |
Donald E. Knuth
| |+ |
1988
| |
Knuth:TB9-2-152
| |
Donald E. Knuth
| |+ |
1989
| |
Knuth:TB10-3-325
| |
Donald E. Knuth
| |+ |
1989
| |
Knuth:TB10-4-529
| |
Donald E. Knuth
| |+ |
1990
| |
Knuth:TB11-4-489
| |
Donald E. Knuth
| |+ |
1993
| |
Knuth:TB14-4-387
| |
Donald E. Knuth
| |+ |
1996
| |
Knuth:TB17-1-29
| |
Donald E. Knuth
| |+ |
1987
| |
Knuth:TB8-1-14
| |
Donald Knuth and Pierre MacKay
| |+ |
1981
| |
Knuth:TB2-3-5
| |
Donald Knuth
| |+ |
1982
| |
Knuth:TB3-1-10
| |
Donald Knuth
| |+ |
1983
| |
Knuth:TB4-2-64
| |
Donald Knuth
| |+ |
1986
| |
Knuth:TB7-2-95
| |
Donald Knuth
| |+ |
1987
| |
Knuth:TB8-1-6
| |
Donald Knuth
| |+ |
1987
| |
Knuth:TB8-1-73
| |
Donald Knuth
| |+ |
1987
| |
Knuth:TB8-2-210
| |
Donald Knuth
| |+ |
1987
| |
Knuth:TB8-2-217
| |
Donald Knuth
| |+ |
1989
| |
Knuth:TB10-1-8
| |
Donald Knuth
| |+ |
1989
| |
Knuth:TB10-1-31
| |
Donald Knuth
| |+ |
1990
| |
Knuth:TB11-1-13
| |
Donald Knuth
| |+ |
1990
| |
Knuth:TB11-2-165
| |
Donald Knuth
| |+ |
1990
| |
Knuth:TB11-4-497
| |
Donald Knuth
| |+ |
1990
| |
Knuth:TB11-4-499
| |
Donald Knuth
| |+ |
1991
| |
Knuth:TB12-2-313
| |
Donald Knuth
| |+ |
2010
| |
Knuth:TB31-2-121
| |
Donald Knuth
| |}
<br/>
The original data is stored in a Lua table, hashed by tag. Starting with Lua 5.2 each run of Lua gets a different ordering of such a hash. In older versions, when you looped over a hash, the order was undefined, but the same as long as you used the same binary. This had the advantage that successive runs, something we often have in document processing gave consistent results. In today’s Lua we need to do much more sorting of hashes before we loop, especially when we save multi--pass data. It is for this reason that the xml tree is sorted by hash key by default. That way lookups (especially the first of a set) give consistent outcomes.