Changes

Jump to navigation Jump to search
no edit summary
==The data­base==
<br/>
A bibTEX file looks like this:
<pre detail='typing'> @Article{sometag,  author = "An Author and Another One",  title = "A hopefully meaningful title",  journal = maps,  volume = "25",  number = "2",  pages = "5--9",  month = mar,  year = "2013",  ISSN = "1234-5678", 
</pre>
<br/>
<br/>
In the old MkII setup we have two kinds of en­tries: the ones that come from the bibTEX run and user sup­plied ones. We no longer rely on bibTEX out­put but we do still sup­port the user sup­plied de­f­i­n­i­tions. These were in fact pre­pared in a way that suits the pro­cess­ing of bibTEX gen­er­ated en­tries. The next vari­ant re­flects the ConTEXt re­cod­ing of the old bibTEX out­put.
<pre detail='typing'> \startpublication[k=Hagen:Second,t=article,a={Hans Hagen},y=2013,s=HH01]  \artauthor[]{Hans}[H.]{}{Hagen}  \arttitle{Who knows more?}  \journal{MyJournal}  \pubyear{2013}  \month{8}  \volume{1}  \issue{3}  \issn{1234-5678}  \pages{123--126}  \stoppublication 
</pre>
<br/>
<br/>
In the new setup we sup­port these vari­ants as well:
<pre detail='typing'> \startpublication[k=Hagen:Third,t=article]  \author{Hans Hagen}  \title{Who knows who?}  ...  \stoppublication 
</pre>
<br/>
and
<pre detail='typing'> \startpublication[tag=Hagen:Third,category=article]  \author{Hans Hagen}  \title{Who knows who?}  ...  \stoppublication  </pre>
<br/>
and
<pre detail='typing'> \startpublication  \tag{Hagen:Third}  \category{article}  \author{Hans Hagen}  \title{Who knows who?}  ...  \stoppublication 
</pre>
<br/>
Be­cause in­ter­nally the en­tries are Lua ta­bles, we also sup­port load­ing of Lua based de­f­i­n­i­tions:
<pre detail='typing'> return {  ["Hagen:First"] = {  author = "Hans Hagen",  category = "article",  issn = "1234-5678",  issue = "3",  journal = "MyJournal",  month = "8",  pages = "123--126",  tag = "Hagen:First",  title = "Who knows nothing?",  volume = "1",  year = "2013",  }, 
</pre>
<br/>
Files set up like this can be loaded too. The fol­low­ing xml in­put is rather close to this, and is also ac­cepted as in­put.
<pre detail='typing'> <?xml version="2.0" standalone="yes" ?> 
<bibtex>
 
<entry tag="Hagen:First" category="article">
 
<field name="author">Hans Hagen</field>
 
<field name="category">article</field>
 
<field name="issn">1234-5678</field>
 
<field name="issue">3</field>
 
<field name="journal">MyJournal</field>
 
<field name="month">8</field>
 
<field name="pages">123--126</field>
 
<field name="tag">Hagen:First</field>
 
<field name="title">Who knows nothing?</field>
 
<field name="volume">1</field>
 
<field name="year">2013</field>
 
</entry>
 
</bibtex>
 
</pre>
<br/>
One un­for­tu­nate as­pect com­monly found in bibTEX files is that they of­ten con­tain TEX com­mands. Even worse is that there is no stan­dard on what these com­mands can be and what they mean, at least not for­mally, as bibTEX is a pro­gram in­tended to be used with many vari­ants of TEX style: plain, LATEX, and oth­ers. This means that we need to de­fine our use of these type­set­ting com­mands. How­ever, in most cases, they are just ab­bre­vi­a­tions or font switches and these are of­ten known. There­fore, ConTEXt will try to re­solve them be­fore re­port­ing an is­sue. In the log file there is a list of com­mands that has been seen in the loaded data­bases. For in­stance, load­ing <tt>tugboat.bib</tt> gives a long list of com­mands of which we show a small set here:
<pre detail='typing'> publications > start used btx commands  publications > standard CONTEXT 1 known  publications > standard ConTeXt 4 known  publications > standard TeXLive 3 KNOWN  publications > standard eTeX 1 known  publications > standard hbox 6 known  publications > standard sltt 1 unknown  publications > stop used btxcommands 
</pre>
<br/>
You can de­fine un­known com­mands, or over­load ex­ist­ing de­f­i­n­i­tions in the fol­low­ing way:
<pre detail='typing'> \definebtxcommand\TUB {TUGboat}  \definebtxcommand\sltt{\tt}  \definebtxcommand\<#1>{\type{#1}} 
</pre>
<br/>
Un­known com­mands do not stall pro­cess­ing, but their names are then type­set in a mono- spaced font so they prob­a­bly stand out for proof­read­ing. You can ac­cess the com­mands with <tt>\btxcommand{...}</tt>, as in:
<pre detail='buffer'> commands like \btxcommand{MySpecialCommand} are handled in an indirect way 
</pre>
<br/>
Nor­mally in a doc­u­ment you will use only one bib­li­o­graphic data­base, whether or not dis­trib­uted over mul­ti­ple files. Nev­er­the­less we sup­port mul­ti­ple data­bases as well which is why we talk of datasets in­stead. A dataset is loaded with the <tt>\usebtxdataset</tt> com­mand. Al­though cur­rently it is not nec­es­sary to de­fine a (de­fault) dataset you can best do this be­cause in the fu­ture we might pro­vide more op­tions. Here are some ex­am­ples:
<pre detail='typing'> \definebtxdataset[standard]  \usebtxdataset[standard][tugboat.bib]  \usebtxdataset[standard][mtx-bibtex-output.xml]  \usebtxdataset[standard][test-001-btx-standard.lua] 
</pre>
<br/>
These three suf­fixes are un­der­stood by the loader. Here the dataset has the name <tt>standard</tt> and the three data­base files are merged, where later en­tries hav­ing the same tag over­load pre­vi­ous ones. De­f­i­n­i­tions in the doc­u­ment source (coded in TEX speak) are also added, and they are saved for suc­ces­sive runs. This means that if you load and de­fine en­tries, they will be known at a next run be­fore­hand, so that ref­er­ences to them are in­de­pen­dent of when load­ing and de­f­i­n­i­tions take place.
<br/>
In this doc­u­ment we use some ex­am­ple data­bases, so let’s load one of them now:
<pre detail='buffer'> \definebtxdataset[example] 
</pre>
\usebtxdataset[example][mkiv-publications.bib]
<br/>
You can ask for an overview of en­tries in a dataset with:
<pre detail='buffer'> \showbtxdatasetfields[example] 
</pre>
this gives:
{|
|+
|
tag
|
|
cat­e­gory
|
|
fields
|
|+
|
demo-001
|
|
book
|
|
au­thor in­dex ti­tle year
|
|+
|
demo-002
|
|
book
|
|
cross­ref in­dex year
|
|+
|
demo-003
|
|
book
|
|
au­thor com­ment in­dex ti­tle year
|
|+
|
demo-004
|
|
book
|
|
au­thor com­ment in­dex ti­tle year
|
|+
|
demo-005
|
|
book
|
|
au­thor doi in­dex pages se­r­ial ti­tle url year
|
|}
<br/>
You can set the cur­rent ac­tive dataset with
<pre detail='typing'> \setbtxdataset[standard] 
</pre>
<br/>
<br/>
If you want to see what pub­li­ca­tions are in the data­base, the eas­i­est way is to ask for a com­plete list:
<pre detail='buffer'> \definebtxrendering  [example]  [dataset=example,  method=local,  alternative=apa]  \placelistofpublications % \placebtxrendering  [example]  [criterium=all] 
</pre>
<br/>
This gives:1 Hans Ha­gen , H. and Ton Ot­ten , T. (1996). Type­set­ting ed­u­ca­tion doc­u­ments2 Luigi Scarso , L. (2021). De­sign­ing high speed trains3 au­thor (year). ti­tle pages p.
<br/>
The ren­der­ing it­self is some­what com­plex to set up be­cause we have not only many dif­fer­ent stan­dards but also many fields that can be set up. This means that there are sev­eral com­mands in­volved. Of­ten there is a pre­scribed style to ren­der bib­li­o­graphic de­scrip­tions, for ex­am­ple <tt>apa</tt>. A ren­der­ing is setup and de­fined with:
<br/>
And a list of such de­scrip­tions is gen­er­ated with:
<br/>
A dataset can have all kind of en­tries:
<br/>
<br/>
Each has its own ren­der­ing vari­ant. To keep things sim­ple we have their set­tings sep­a­rated. How­ever, these set­tings are shared for all ren­der­ing al­ter­na­tives. In prac­tice this is sel­dom a prob­lem in a pub­li­ca­tion as only one ren­der­ing al­ter­na­tive will be ac­tive. If this be not suf­fi­cient, you can al­ways group lo­cal set­tings in a setup and hook that into the spe­cific ren­der­ing.
<br/>
Ex­am­ples of list vari­ants are:
<br/>
{|
|+
|
<tt>no specific settings</tt>
|
|
|
|}
{|
|+
|
<tt>no specific settings</tt>
|
|
|
|}
{|
|+
|
<tt>no specific settings</tt>
|
|
|
|}
<br/>
There are a cou­ple of ac­ces­sors and helpers to get the job done. When you want to fetch a field from the cur­rent en­try you use <tt>\btxfield</tt>. In most cases you want to make sure this field has a value, for in­stance be­cause you don’t want fences or punc­tu­a­tion that be­longs to a field.
<pre detail='typing'> \btxdoif {title} {  \bold{\btxfield{title}}, 
</pre>
<br/>
There are three test macros:
<pre detail='typing'> \btxdoifelse{fieldname}{action when found}{action when not found}  \btxdoif {fieldname}{action when found}  \btxdoifnot {fieldname} {action when not found} 
</pre>
<br/>
An ex­tra con­di­tional is avail­able for test­ing in­ter­ac­tiv­ity:
<pre detail='typing'> \btxdoifelseinteraction{action when true}{action when false} 
</pre>
<br/>
{|
|+
|
<tt>\btxfield</tt>
|
|
fetch a ex­plicit field (e.g. <tt>year</tt>)
|
|+
|
<tt>\btxdetail</tt>
|
|
fetch a de­rived field (e.g. <tt>short</tt>)
|
|+
|
<tt>\btxflush</tt>
|
|
fetch a de­rived or ex­plicit field
|
|}
<br/>
You can im­prove read­abil­ity by us­ing se­tups, for in­stance:
<pre detail='typing'> \btxdoifelse {author} {  \btxsetup{btx:apa:author:yes}  } {  \btxsetup{btx:apa:author:nop} 
</pre>
<br/>
{|
|+
|
<tt>\btxspace</tt>
|
|
be­fore af­ter
|
|+
|
<tt>\btxperiod</tt>
|
|
be­fore. af­ter
|
|+
|
<tt>\btxcomma</tt>
|
|
be­fore, af­ter
|
|+
|
<tt>\btxlparent</tt>
|
|
be­fore (af­ter
|
|+
|
<tt>\btxrparent</tt>
|
|
be­fore) af­ter
|
|+
|
<tt>\btxlbracket</tt>
|
|
be­fore [af­ter
|
|+
|
<tt>\btxrbracket</tt>
|
|
be­fore] af­ter
|
|}
<br/>
So, the pre­vi­ous ex­am­ple setup can be rewrit­ten as:
<pre detail='typing'> \btxdoif {title} {  \bold{\btxfield{title}}  \btxcomma  </pre>
<br/>
There is a spe­cial com­mand for ren­der­ing a (com­bi­na­tion) of au­thors:
<pre detail='typing'> \btxflushauthor{author}  \btxflushauthor{editor}  \btxflushauthor[inverted]{editor} 
</pre>
<br/>
In­stead of the last one you can also use:
<pre detail='typing'> \btxflushauthorinverted{editor} 
</pre>
<br/>
{|
|+
|
con­ver­sion
|
|
ren­der­ing
|
|+
|
<tt>inverted</tt>
|
|
the Frog jr, Ker­mit
|
|+
|
<tt>invertedshort</tt>
|
|
the Frog jr, K
|
|+
|
<tt>normal</tt>
|
|
Ker­mit, the Frog, jr
|
|+
|
<tt>normalshort</tt>
|
|
K, the Frog, jr
|
|}
Ci­ta­tions are ref­er­ences to bib­li­o­graphic en­tries that nor­mally show up in lists some­place in the doc­u­ment: at the end of a chap­ter, in an ap­pen­dix, at the end of an ar­ti­cle, etc. We dis­cussed the ren­der­ing of these lists in the pre­vi­ous chap­ter. A ci­ta­tion is nor­mally pretty short as its main pur­pose is to re­fer uniquely to a more de­tailed de­scrip­tion. But, there are sev­eral ways to re­fer, which is why the ci­ta­tion sub­sys­tem is con­fig­urable and ex­ten­si­ble. Just look at the fol­low­ing com­mands:
<pre detail='buffer'> \cite[author][example::demo-003]  \cite[authoryear][example::demo-003]  \cite[authoryears][example::demo-003]  \cite[author][example::demo-003,demo-004]  \cite[authoryear][example::demo-003,demo-004]  \cite[authoryears][example::demo-003,demo-004]  \cite[author][example::demo-004,demo-003]  \cite[authoryear][example::demo-004,demo-003]  \cite[authoryears][example::demo-004,demo-003] 
</pre>
(Hans Ha­gen and Ton Ot­ten) (Hans Ha­gen and Ton Ot­ten (1996)) (Hans Ha­gen and Ton Ot­ten, 1996) (Hans Ha­gen and Ton Ot­ten, Luigi Scarso) (Hans Ha­gen and Ton Ot­ten (1996), Luigi Scarso (2021)) (Hans Ha­gen and Ton Ot­ten, 1996, Luigi Scarso, 2021) (Luigi Scarso, Hans Ha­gen and Ton Ot­ten) (Luigi Scarso (2021), Hans Ha­gen and Ton Ot­ten (1996)) (Luigi Scarso, 2021, Hans Ha­gen and Ton Ot­ten, 1996)
<br/>
The first ar­gu­ment is op­tional.
<br/>
You can tune the way a ci­ta­tion shows up:
<pre detail='buffer'> \setupbtxcitevariant[author] [sorttype=author,color=darkyellow]  \setupbtxcitevariant[authoryear] [sorttype=author,color=darkyellow]  \setupbtxcitevariant[authoryears][sorttype=author,color=darkyellow] 
</pre>
\cite[author][example::demo-004,demo-003]\cite[authoryear][example::demo-004,demo-003]\cite[authoryears][example::demo-004,demo-003]
\cite[authoryear][example::demo-004,demo-003]
 
\cite[authoryears][example::demo-004,demo-003]
 
<br/>
Here we sort the au­thors and color the ci­ta­tion:
(Hans Ha­gen and Ton Ot­ten, Luigi Scarso) (Hans Ha­gen and Ton Ot­ten (1996), Luigi Scarso (2021)) (Hans Ha­gen and Ton Ot­ten, 1996, Luigi Scarso, 2021) <br/>For rea­sons of back­ward com­pat­i­bil­ity the <tt>\cite</tt> com­mand is a bit picky about spaces be­tween the two ar­gu­ments, of which the first is op­tional. This is a con­se­quence of al­low­ing its use with the key spec­i­fied be­tween curly brack­ets as is the tra­di­tional prac­tice. (We do en­cour­age users to adopt the more co­her­ent ConTEXt syn­tax by us­ing square brack­ets for key­words and re­serv­ing curly brack­ets to re­group text to be type­set.)
<br/>
For rea­sons of back­ward com­pat­i­bil­ity the The <tt>\citecitation</tt> com­mand is a bit picky about spaces be­tween the two syn­ony­mous but is more flex­i­ble with re­spect to spac­ing of its ar­gu­ments, of which the first is op­tional. : <pre detail='typing'> \citation[author] [example::demo-004,demo-003]  \citation[authoryear] [example::demo-004,demo-003]  \citation[authoryears][example::demo-004,demo-003] 
</pre>
<br/>
{|
|+
|
key
|
|
ren­der­ing
|
|+
|
<tt>author</tt>
|
|
(au­thor)
|
|+
|
<tt>authornum</tt>
|
|
[au­thor [btx er­ror 1]]
|
|+
|
<tt>authoryear</tt>
|
|
(au­thor (year))
|
|+
|
<tt>authoryears</tt>
|
|
(au­thor, year)
|
|+
|
<tt>doi</tt>
|
|
[todo: doi]
|
|+
|
<tt>key</tt>
|
|
[demo-005]
|
|+
|
<tt>none</tt>
|
|
|
|+
|
<tt>num</tt>
|
|
[[btx er­ror 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/>
Be­cause we are deal­ing with data­base in­put and be­cause we gen­er­ally need to ma­nip­u­late en­tries, much of the work is del­e­gated to Lua. This makes it eas­ier to main­tain and ex­tend the code. Of course TEX still does the ren­der­ing. The ty­po­graphic de­tails are con­trolled by pa­ra­me­ters but not all are used in all vari­ants. As with most ConTEXt com­mands, it starts out with a gen­eral setup com­mand:
<br/>
On top of that we can de­fine in­stances that in­herit ei­ther from a given par­ent or from the top­most setup.
<br/>
But, spe­cific vari­ants can have them over­loaded:
<br/>
{|
|+
|
<tt>right</tt>
|
|
<tt>)</tt>
|
|+
|
<tt>middle</tt>
|
|
<tt>, </tt>
|
|+
|
<tt>left</tt>
|
|
<tt>(</tt>
|
|}
{|
|+
|
<tt>right</tt>
|
|
<tt>]</tt>
|
|+
|
<tt>middle</tt>
|
|
<tt>, </tt>
|
|+
|
<tt>left</tt>
|
|
<tt>[</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>
|
|}
{|
|+
|
<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>
|
|}
{|
|+
|
<tt>right</tt>
|
|
<tt>]</tt>
|
|+
|
<tt>left</tt>
|
|
<tt>[</tt>
|
|}
{|
|+
|
<tt>right</tt>
|
|
<tt>]</tt>
|
|+
|
<tt>left</tt>
|
|
<tt>[</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>
|
|}
{|
|+
|
<tt>inbetween</tt>
|
|
<tt>–</tt>
|
|}
{|
|+
|
<tt>right</tt>
|
|
<tt>]</tt>
|
|+
|
<tt>left</tt>
|
|
<tt>[</tt>
|
|}
{|
|+
|
<tt>right</tt>
|
|
<tt>]</tt>
|
|+
|
<tt>left</tt>
|
|
<tt>[</tt>
|
|}
{|
|+
|
<tt>right</tt>
|
|
<tt>]</tt>
|
|+
|
<tt>left</tt>
|
|
<tt>[</tt>
|
|}
{|
|+
|
<tt>right</tt>
|
|
<tt>]</tt>
|
|+
|
<tt>left</tt>
|
|
<tt>[</tt>
|
|}
{|
|+
|
<tt>right</tt>
|
|
<tt>)</tt>
|
|+
|
<tt>left</tt>
|
|
<tt>(</tt>
|
|}
<br/>
A ci­ta­tion vari­ant is de­fined in sev­eral steps and if you re­ally want to know the dirty de­tails, you should look into the <tt>publ-imp-*.mkiv</tt> files. Here we stick to the con­cept.
<pre detail='typing'> \startsetups btx:cite:author  \btxcitevariant{author}  \stopsetups 
</pre>
<br/>
You can over­load such se­tups if needed, but that only makes sense when you can­not con­fig­ure the ren­der­ing with pa­ra­me­ters. The <tt>\btxcitevariant</tt> com­mand is one of the build in ac­ces­sors and it calls out to Lua where more com­plex ma­nip­u­la­tion takes place if needed. If no ma­nip­u­la­tion is known, the field with the same name (if found) will be flushed. A com­mand like <tt>\btxcitevariant</tt> as­sumes that a dataset and spe­cific tag has been set. This is nor­mally done in the wrap­per macros, like <tt>\cite</tt>. For spe­cial pur­poses you can use these com­mands<pre detail='typing'> \setbtxdataset[example]  \setbtxentry[hh2013] 
</pre>
<br/>
<br/>
Un­less you use <tt>criterium=all</tt> only pub­li­ca­tions that are cited will end up in the lists. You can force a ci­ta­tion into a list us­ing <tt>\usecitation</tt>, for ex­am­ple:
<pre detail='typing'> \usecitation[example::demo-004,demo-003] 
</pre>
<br/>
This com­mand has two syn­onyms: <tt>\nocite</tt> and <tt>\nocitation</tt> so you can choose what­ever fits you best.
<br/>
The en­tries are col­lected in datasets and each set has a unique name. In this doc­u­ment we have the set named <tt>example</tt>. A dataset ta­ble has sev­eral fields, and prob­a­bly the one of most in­ter­est is the <tt>luadata</tt> field. Each en­try in this ta­ble de­scribes a pub­li­ca­tion:
<pre detail='typing'> t={  ["author"]="Hans Hagen",  ["category"]="book",  ["index"]=1,  ["tag"]="demo-001",  ["title"]="\\btxcmd{BIBTEX}, the \\btxcmd{CONTEXT}\\ way",  ["year"]="2013",  </pre>This is <tt>publications.datasets.example.luadata["demo-001"]</tt>. There can be a com­pan­ion en­try in the par­al­lel <tt>details</tt> ta­ble. <pre detail='typing'> t={  ["author"]={  ["firstnames"]={ "Hans" },  ["initials"]={ "H" },  ["original"]="Hans Hagen",  ["surnames"]={ "Hagen" },  ["vons"]={},  },  },  ["short"]="Hag13", 
</pre>
These de­tails are ac­cessed as <tt>publications.datasets.example.details["demo-001"]</tt> and by us­ing a sep­a­rate ta­ble we can over­load fields in the orig­i­nal en­try with­out los­ing the orig­i­nal.
<br/>
You can loop over the en­tries us­ing reg­u­lar Lua code com­bined with MkIV helpers:
<pre detail='buffer'> local dataset = publications.datasets.example 
</pre>
context.starttabulate { "|l|l|l|" }  for tag, entry in table.sortedhash(dataset.luadata) do  local detail = dataset.details[tag] or { }context.NC() context.type(tag)context.NC() context(detail.short)context.NC() context(entry.title)context.NC() context.NR()endcontext.stoptabulate()
context.NC() context.type(tag)
 
context.NC() context(detail.short)
 
context.NC() context(entry.title)
 
context.NC() context.NR()
 
end
 
context.stoptabulate()
 
<br/>
This re­sults in:
{|
|+
|
<tt>demo-001</tt>
|
|
Hag13
|
|
bibTEX, the ConTEXt way
|
|+
|
<tt>demo-002</tt>
|
|
Hag14
|
|
bibTEX, the ConTEXt way
|
|+
|
<tt>demo-003</tt>
|
|
HO96
|
|
Type­set­ting ed­u­ca­tion doc­u­ments
|
|+
|
<tt>demo-004</tt>
|
|
Sca21
|
|
De­sign­ing high speed trains
|
|+
|
<tt>demo-005</tt>
|
|
aut00
|
|
ti­tle
|
|}
<br/>
Once a dataset is ac­ces­si­ble as xml tree, you can use the reg­u­lar <tt>\xml...</tt> com­mands. We start with load­ing a dataset, in this case from just one file.
<pre detail='buffer'> \usebtxdataset[tugboat][tugboat.bib] 
</pre>
<br/>
The dataset has to be con­verted to xml:
<pre detail='buffer'> \convertbtxdatasettoxml[tugboat] 
</pre>
<br/>
The tree is now ac­ces­si­ble by its root ref­er­ence <tt>btx:tugboat</tt>. If we want sim­ple field ac­cess we can use a few se­tups:
<pre detail='buffer'> \startxmlsetups btx:initialize  \xmlsetsetup{#1}{bibtex|entry|field}{btx:*}  \xmlmain{#1}  \stopxmlsetups 
</pre>
\startxmlsetups btx:field  \xmlflushcontext{#1}  \stopxmlsetups
\xmlsetup{btx:tugboat}{btx:initialize}
<br/>
The two se­tups are pre­de­fined in the core al­ready, but you might want to change them. They are ap­plied in for in­stance:
<pre detail='buffer'> \starttabulate[|||]  \NC \type {tag} \NC \xmlfirst {btx:tugboat}  {/bibtex/entry[string.find(@tag,'Hagen')]/attribute('tag')}  \NC \NR  \NC \type {title} \NC \xmlfirst {btx:tugboat}  {/bibtex/entry[string.find(@tag,'Hagen')]/field[@name='title']}  \NC \NR  \stoptabulate 
</pre>
{|
|+
|
<tt>tag</tt>
|
|
Ha­gen:TB17-1-54
|
|+
|
<tt>title</tt>
|
|
PPCHTEX: type­set­ting chem­i­cal for­mu­las in TEX
|
|}
<pre detail='buffer'> \startxmlsetups btx:demo  \xmlcommand  {#1}  {/bibtex/entry[string.find(@tag,'Hagen')][1]}{btx:table}  \stopxmlsetups 
</pre>
\startxmlsetups btx:table  \starttabulate[|||]  \NC \type {tag} \NC \xmlatt{#1}{tag} \NC \NR  \NC \type {title} \NC \xmlfirst{#1}{/field[@name='title']} \NC \NR  \stoptabulate  \stopxmlsetups
\xmlsetup{btx:tugboat}{btx:demo}
{|
|+
|
<tt>tag</tt>
|
|
Ha­gen:TB17-1-54
|
|+
|
<tt>title</tt>
|
|
PPCHTEX: type­set­ting chem­i­cal for­mu­las in TEX
|
|}
<br/>
Here is an­other ex­am­ple:
<pre detail='buffer'> \startxmlsetups btx:row  \NC \xmlatt{#1}{tag}  \NC \xmlfirst{#1}{/field[@name='title']}  \NC \NR\stopxmlsetups</pre> \startxmlsetups btx:demo\xmlfilter {#1} {/bibtex/entry[@category='article']/field[@name='author' and (find(text(),'Knuth') or find(text(),'DEK'))]/../command(btx:row)}\stopxmlsetups
\starttabulate[|||]\xmlsetup{btx:tugboat}{btx:demo}\stoptabulatestopxmlsetups
</pre>
\startxmlsetups btx:demo  \xmlfilter {#1} {|
|+ /bibtex
| Knuth:TB10-1-31| /entry[@category='article']
/field[@name='author' and (find(text(),'Knuth') or find(text(),'DEK'))]  /../command(btx:row)  }  \stopxmlsetups  \starttabulate[|||]  \xmlsetup{btx:tugboat}{btx:demo}  \stoptabulate  {|  |+   | Knuth:TB10-1-31| |
Type­set­ting Con­crete Math­e­mat­ics
|
|+
|
Knuth:TB10-1-8
|
|
TEX would find it dif­fi­cult …
|
|+
|
Knuth:TB10-3-325
|
|
The new ver­sions of TEX and MF
|
|+
|
Knuth:TB10-4-529
|
|
The er­rors of TEX
|
|+
|
Knuth:TB11-1-13
|
|
Vir­tual Fonts: More Fun for Grand Wiz­ards
|
|+
|
Knuth:TB11-2-165
|
|
Ex­er­cises for TEX: The Pro­gram
|
|+
|
Knuth:TB11-4-489
|
|
The fu­ture of TEX and MF
|
|+
|
Knuth:TB11-4-497
|
|
Arthur Lee Samuel, 1901--1990
|
|+
|
Knuth:TB11-4-499
|
|
An­swers to Ex­er­cises for TEX: The Pro­gram
|
|+
|
Knuth:TB12-2-313
|
|
Fixed-point glue set­ting: Er­rata
|
|+
|
Knuth:TB14-4-387
|
|
Icons for TEX and MF
|
|+
|
Knuth:TB17-1-29
|
|
Im­por­tant mes­sage re­gard­ing CM fonts
|
|+
|
Knuth:TB2-3-5
|
|
The cur­rent state of things
|
|+
|
Knuth:TB3-1-10
|
|
Fixed-point glue set­ting­Dash an ex­am­ple of WEB
|
|+
|
Knuth:TB31-2-121
|
|
An Earth­shak­ing An­nounce­ment
|
|+
|
Knuth:TB4-2-64
|
|
A note on hy­phen­ation
|
|+
|
Knuth:TB5-1-4
|
|
TEX in­cunab­ula
|
|+
|
Knuth:TB5-1-67
|
|
Com­ments on qual­ity in pub­lish­ing
|
|+
|
Knuth:TB5-2-105
|
|
A course on MF pro­gram­ming
|
|+
|
Knuth:TB6-1-36
|
|
Recipes and frac­tions
|
|+
|
Knuth:TB7-2-101
|
|
The TEX logo in var­i­ous fonts
|
|+
|
Knuth:TB7-2-95
|
|
Re­marks to cel­e­brate the pub­li­ca­tion of Com­put­ers & Type­set­ting
|
|+
|
Knuth:TB8-1-14
|
|
Mix­ing right-to-left texts with left-to-right texts
|
|+
|
Knuth:TB8-1-6
|
|
It hap­pened: an­nounce­ment of TEX 2.1
|
|+
|
Knuth:TB8-1-73
|
|
Prob­lem for a Sat­ur­day af­ter­noon
|
|+
|
Knuth:TB8-2-135
|
|
Fonts for dig­i­tal halftones
|
|+
|
Knuth:TB8-2-210
|
|
Sat­ur­day morn­ing prob­lem­Dash so­lu­tion
|
|+
|
Knuth:TB8-2-217
|
|
Re­ply: Print­ing out se­lected pages
|
|+
|
Knuth:TB8-3-309
|
|
Macros for Jill
|
|+
|
Knuth:TB9-2-152
|
|
A Punk Meta-Font
|
|}
<br/>
A more ex­ten­sive ex­am­ple is the fol­low­ing. Of course this as­sumes that you know what xml sup­port mech­a­nisms and macros are avail­able.
<pre detail='buffer'> \startxmlsetups btx:getkeys  \xmladdsortentry{btx}{#1}{\xmlfilter{#1}{/field[@name='author']/text()}}  \xmladdsortentry{btx}{#1}{\xmlfilter{#1}{/field[@name='year' ]/text()}}\xmladdsortentry{btx}{#1}{\xmlatt{#1}{tag}}\stopxmlsetups</pre> \startxmlsetups btx:sorter\xmlresetsorter{btx}% \xmlfilter{#1}{entry/command(btx:getkeys)}\xmlfilter{#1}{/bibtex/entry[@category='article']/field[@name='author' and find(text(),'Knuth')]/../command(btx:getkeys)}\xmlsortentries{btx}\starttabulate[||||]\xmlflushsorter{btx}{btx:entry:flush}\stoptabulate\stopxmlsetups
\startxmlsetups xmladdsortentry{btx:entry:flush\NC \xmlfilter}{#1}{/field[@name='year' ]/context()}\NC \xmlatt{#1}{tag}\NC \xmlfilter{#1}{/field[@name='author']/context()}\NC \NR\stopxmlsetups
\xmlsetup{btx:tugboat}{btx:sorter}stopxmlsetups
</pre>
\startxmlsetups btx:sorter  \xmlresetsorter{|btx}
|+ % \xmlfilter{#1}{entry/command(btx:getkeys)}
| 1984| \xmlfilter{#1}{
| Knuth:TB5-1-67| /bibtex
/entry[@category='article']  /field[@name='author' and find(text(),'Knuth')]  /../command(btx:getkeys)}  \xmlsortentries{btx}  \starttabulate[||| |]  \xmlflushsorter{btx}{btx:entry:flush}  \stoptabulateDon Knuth \stopxmlsetups  \startxmlsetups btx:entry:flush  \NC \xmlfilter{#1}{/field[@name='year' ]/context()}  \NC \xmlatt{#1}{tag}  \NC \xmlfilter{#1}{/field[@name='author']/context()}  \NC \NR  \stopxmlsetups  \xmlsetup{btx:tugboat}{btx:sorter}  {|
|+
|
1984
|
|
Knuth:TB5-1-467
|
|
Don­ald E. Don Knuth
|
|+
|
1984
|
|
Knuth:TB5-1-4
|
|
Don­ald E. Knuth
|
 
|+
|
1984
|
|
Knuth:TB5-2-105
|
|
Don­ald E. Knuth
|
|+
|
1985
|
|
Knuth:TB6-1-36
|
|
Don­ald E. Knuth
|
|+
|
1986
|
|
Knuth:TB7-2-101
|
|
Don­ald E. Knuth
|
|+
|
1987
|
|
Knuth:TB8-2-135
|
|
Don­ald E. Knuth
|
|+
|
1987
|
|
Knuth:TB8-3-309
|
|
Don­ald E. Knuth
|
|+
|
1988
|
|
Knuth:TB9-2-152
|
|
Don­ald E. Knuth
|
|+
|
1989
|
|
Knuth:TB10-3-325
|
|
Don­ald E. Knuth
|
|+
|
1989
|
|
Knuth:TB10-4-529
|
|
Don­ald E. Knuth
|
|+
|
1990
|
|
Knuth:TB11-4-489
|
|
Don­ald E. Knuth
|
|+
|
1993
|
|
Knuth:TB14-4-387
|
|
Don­ald E. Knuth
|
|+
|
1996
|
|
Knuth:TB17-1-29
|
|
Don­ald E. Knuth
|
|+
|
1987
|
|
Knuth:TB8-1-14
|
|
Don­ald Knuth and Pierre MacKay
|
|+
|
1981
|
|
Knuth:TB2-3-5
|
|
Don­ald Knuth
|
|+
|
1982
|
|
Knuth:TB3-1-10
|
|
Don­ald Knuth
|
|+
|
1983
|
|
Knuth:TB4-2-64
|
|
Don­ald Knuth
|
|+
|
1986
|
|
Knuth:TB7-2-95
|
|
Don­ald Knuth
|
|+
|
1987
|
|
Knuth:TB8-1-6
|
|
Don­ald Knuth
|
|+
|
1987
|
|
Knuth:TB8-1-73
|
|
Don­ald Knuth
|
|+
|
1987
|
|
Knuth:TB8-2-210
|
|
Don­ald Knuth
|
|+
|
1987
|
|
Knuth:TB8-2-217
|
|
Don­ald Knuth
|
|+
|
1989
|
|
Knuth:TB10-1-8
|
|
Don­ald Knuth
|
|+
|
1989
|
|
Knuth:TB10-1-31
|
|
Don­ald Knuth
|
|+
|
1990
|
|
Knuth:TB11-1-13
|
|
Don­ald Knuth
|
|+
|
1990
|
|
Knuth:TB11-2-165
|
|
Don­ald Knuth
|
|+
|
1990
|
|
Knuth:TB11-4-497
|
|
Don­ald Knuth
|
|+
|
1990
|
|
Knuth:TB11-4-499
|
|
Don­ald Knuth
|
|+
|
1991
|
|
Knuth:TB12-2-313
|
|
Don­ald Knuth
|
|+
|
2010
|
|
Knuth:TB31-2-121
|
|
Don­ald Knuth
|
|}
In the orig­i­nal bib­li­og­ra­phy sup­port mod­ule us­age was as fol­lows (ex­am­ple taken from the con­textgar­den wiki):
<pre detail='typing'> % engine=pdftex  \usemodule[bib]  \usemodule[bibltx]  \setupbibtex  [database=xampl]  \setuppublications  [numbering=yes]  \starttext  As \cite [article-full] already indicated, bibtex is a \LATEX||centric  program.  \completepublications  \stoptext 
</pre>
<br/>
For MkIV the mod­ules were partly rewrit­ten and ended up in the core so the two com­mands are not were no longer needed there. One ad­van­tage The over­head as­so­ci­ated with the au­to­matic load­ing of ex­plic­itly load­ing a mod­ule is that a job that doesn’t need ref­er­ences to pub­li­ca­tions doesn’t suf­fer from the as­so­ci­ated over­head. Nowa­days this over­head bib­li­og­ra­phy macros can be ne­glected. The first setup com­mand in this ex­am­ple is needed to boot­strap the process: it tells what data­base has to be processed by bibTEX be­tween runs. The sec­ond setup com­mand is op­tional. Each ci­ta­tion (tagged with these days, so stan­dard­ized mod­ules such as <tt>\citebib</tt>) ends up in are all be­ing moved to the list of pub­li­ca­tionscore and do not need to be ex­plic­itly loaded.
<br/>
In The first <tt>\setupbibtex</tt> com­mand in this ex­am­ple is needed to boot­strap the new ap­proach again the code process: it tells what data­base has to be processed by bibTEX be­tween runs. The sec­ond <tt>\setuppublications</tt> com­mand is op­tional. Each ci­ta­tion (tagged with <tt>\cite</tt>) ends up in the ConTEXt ker­nel, so no mod­ules need to be loadedlist of pub­li­ca­tions. But, as <br/>In the new ap­proach we no longer use bibTEX, bibTEXso we don’t need to setup bibTEX. In­stead we de­fine dataset(s). We also no longer set up pub­li­ca­tions with one com­mand, but have split that up in ren­der­ing-, list-, and cite-vari­ants. The ba­sic <tt>\cite</tt> com­mand re­mains. The above ex­am­ple be­comes: <pre detail='typing'> \definebtxdataset  [document]  \usebtxdataset  [document]  [mybibfile.bib]  \definebtxrendering  [document]  \setupbtxrendering  [document]  [numbering=yes]  \starttext  As \cite [article-full] already indicated, bibtex is a \LATEX||centric  program.  \completebtxrendering[document]  \stoptext 
</pre>
<br/>
So, we have a few more com­mands to set up things. If you in­tend to use just one a sin­gle dataset and ren­der­ing, the above pre­am­ble can be sim­pli­fied to: <pre detail='typing'> \usebtxdataset  [mybibfile.bib]  \setupbtxrendering  [numbering=yes] 
</pre>
<br/>
But keep in mind, that com­pared to the old MkII de­rived method we have moved some of the setup op­tions to set­ting up the ren­der­ing, list and cite setup vari­ants.
<br/>
An­other dif­fer­ence is now the use of lists. When you de­fine a ren­der­ing, you also de­fine a list. How­ever, all en­tries are col­lected in a com­mon list tagged <tt>btx</tt>. Al­though you will nor­mally con­fig­ure a ren­der­ing you can still set some prop­er­ties of lists, but in that case you need to pre­fix the list iden­ti­fier. In the case of the above ex­am­ple this is <tt>btx:document</tt>.
As TEX and Lua are both open and ac­ces­si­ble in ConTEXt it is pos­si­ble to ex­tend the func­tion­al­ity of the bib­li­og­ra­phy re­lated code. For in­stance, you can add ex­tra load­ers.
<pre detail='typing'> function publications.loaders.myformat(dataset,filename)  local t = { }  -- Load data from 'filename' and convert it to a Lua table 't' with  -- the key as hash entry and fields conforming the luadata table  -- format.  loaders.lua(dataset,t)  end 
</pre>
<br/>
This then per­mits load­ing a data­base (into a dataset) with the com­mand:
<pre detail='typing'> \usebtxdataset[standard][myfile.myformat] 
</pre>
<br/>
The <tt>myformat</tt> suf­fix is rec­og­nized au­to­mat­i­cally. If you want to use an­other suf­fix, you can do this:
<pre detail='typing'> \usebtxdataset[standard][myformat::myfile.txt] 
</pre>

Navigation menu