diff options
author | Mojca Miklavec <mojca.miklavec@gmail.com> | 2014-05-05 20:29:55 +0000 |
---|---|---|
committer | Mojca Miklavec <mojca.miklavec@gmail.com> | 2014-05-05 20:29:55 +0000 |
commit | ba9a57343987f1c2c72396e7c38f1fa30352c24c (patch) | |
tree | 66a8b12cdf67427ce96770fd0e9e581759aade1c /Master/texmf-dist/doc/context/manuals/allkind | |
parent | 15242121b8ddf7d4a041fb3998d295dd8232e1eb (diff) |
ConTeXt 2014.04.28 23:24
git-svn-id: svn://tug.org/texlive/trunk@33856 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/context/manuals/allkind')
3 files changed, 1730 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/context/manuals/allkind/mkiv-publications.bib b/Master/texmf-dist/doc/context/manuals/allkind/mkiv-publications.bib new file mode 100644 index 00000000000..e94f43202fe --- /dev/null +++ b/Master/texmf-dist/doc/context/manuals/allkind/mkiv-publications.bib @@ -0,0 +1,34 @@ +@book{demo-001, + author = "Hans Hagen", + title = "\BIBTEX, the \CONTEXT\ way", + year = "2013", +} + +@book{demo-002, + crossref = "demo-001" + year = "2014", +} + +@book{demo-003, + author = "Hans Hagen and Ton Otten", + title = "Typesetting education documents", + year = "1996", + comment = "a non-existing document", +} + +@book{demo-004, + author = "Luigi Scarso", + title = "Designing high speed trains", + year = "2021", + comment = "still to be published", +} + +@book{demo-005, + author = "author", + title = "title", + year = "year", + serial = "serial", + doi = "doi", + url = "url", + pages = "pages" +} diff --git a/Master/texmf-dist/doc/context/manuals/allkind/mkiv-publications.tex b/Master/texmf-dist/doc/context/manuals/allkind/mkiv-publications.tex new file mode 100644 index 00000000000..0a81467fca4 --- /dev/null +++ b/Master/texmf-dist/doc/context/manuals/allkind/mkiv-publications.tex @@ -0,0 +1,1327 @@ +% language=uk + +% \setupbtxrendering[continue=yes] +% \btxfield{manipulator_a->manipulator_b->fieldname} + +% engine=luajittex + +% criterium: all + sorttype=cite => citex before rest +% criterium: all + sorttype=database => database order +% criterium: used +% +% numbering: label, short, indexinlist, indexused +% +% maybeyear +% +% \cite[data][whatever] + +% \showframe + +% \usemodule[lua-checkheads] + +\usemodule[abr-02] +\usemodule[set-11] + +\loadsetups[publications-en.xml] \enablemode[interface:setup:defaults] + +\setupbackend + [export=yes, + xhtml=yes, + css=export-example.css] + +\setupexport + [hyphen=yes, + width=60em] + +% \input publ-tmp.mkiv + +\setupbodyfont + [dejavu,10pt] + +\setuphead + [chapter] + [header=high, + style=\bfc, + color=darkmagenta] + +\setuplayout + [topspace=2cm, + bottomspace=1cm, + header=0cm, + width=middle, + height=middle] + +\setupwhitespace + [big] + +\setuptyping + [color=darkmagenta] + +\setuptyping + [keeptogether=yes] + +\setuptype + [color=darkcyan] + +\setupfootertexts + [pagenumber] + +\setupMPgraphics + [mpy=\jobname.mpy] + +\setupinteraction + [state=start, + color=darkcyan, + contrastcolor=darkyellow] + +\starttext + +\startMPpage + + StartPage ; + + % input "mkiv-publications.mpy" ; + + picture pic ; pic := image ( + path pth ; pth := ((0,0) for i=1 step 2 until 20 : -- (i,1) -- (i+1,0) endfor) ; + for i=0 upto 9 : draw pth shifted (0,2*i) ; endfor ; + ) ; + + % picture btx ; btx := textext("\ssbf BIBTEX") ; + % picture ctx ; ctx := textext("\ssbf THE CONTEXT WAY") ; + picture btx ; btx := image(graphictext("\ssbf BIBTEX") withfillcolor white) ; + picture ctx ; ctx := image(graphictext("\ssbf THE CONTEXT WAY") withfillcolor white) ; + + pic := pic shifted - llcorner pic ; + btx := btx shifted - llcorner btx ; + ctx := ctx shifted - llcorner ctx ; + + pic := pic xysized (PaperWidth,PaperHeight) ; + btx := btx xsized (2PaperWidth/3) shifted (.25PaperWidth,.15PaperHeight) ; + ctx := ctx xsized (2PaperWidth/3) shifted (.25PaperWidth,.075PaperHeight) ; + + fill Page withcolor \MPcolor{darkcyan} ; + + draw pic withcolor \MPcolor{darkmagenta} ; + draw btx withcolor \MPcolor{lightgray} ; + draw ctx withcolor \MPcolor{lightgray} ; + + % draw boundingbox btx ; + % draw boundingbox ctx ; + + StopPage ; + +\stopMPpage + + +\startfrontmatter + +\starttitle[title=Contents] + \placelist[chapter,section][color=black] +\stoptitle + +\startchapter[title=Introduction] + +This manual describes how \MKIV\ handles bibliographies. Support in \CONTEXT\ +started in \MKII for \BIBTEX, using a module written by Taco Hoekwater. Later his +code was adapted to \MKIV, but because users demanded more, I decided that +reimplementing made more sense than patching. In particular, through the use of +\LUA, the \BIBTEX\ data files can be easily directly parsed, thus liberating +\CONTEXT\ from the dependency on an external \BIBTEX\ executable. The CritEd +project (by Thomas Schmitz, Alan Braslau, Luigi Scarso and myself) was a good +reason to undertake this rewrite. As part that project users were invited to come +up with ideas about extensions. Not all of them are (yet) honored, but the +rewrite makes more functionality possible. + +This manual is dedicated to Taco Hoekwater who in a previous century implemented +the first \BIBTEX\ module and saw it morf into a \TEX||\LUA\ hybrid in this +century. The fact that there was support for bibliographies made it possible for +users to use \CONTEXT\ in an academic environment, dominated by bibliographic +databases encoded in the \BIBTEX\ format. + +\startlines +Hans Hagen +PRAGMA ADE +Hasselt NL +\stoplines + +\stopchapter + +\stopfrontmatter + +\startbodymatter + +\startchapter[title=The database] + +The \BIBTEX\ format is rather popular in the \TEX\ community and even with its +shortcomings it will stay around for a while. Many publication websites can +export and many tools are available to work with this database format. It is +rather simple and looks a bit like \LUA\ tables. Unfortunately the content can be +polluted with non|-|standardized \TEX\ commands which complicates pre- or +postprocessing outside \TEX. In that sense a \BIBTEX\ database is often not coded +neutrally. Some limitations, like the use of commands to encode accented +characters root in the \ASCII\ world and can be bypassed by using \UTF\ instead +(as handled somewhat in \LATEX\ through extensions such as \type {bibtex8}). + +The normal way to deal with a bibliography is to refer to entries using a unique +tag or key. When a list of entries is typeset, this reference can be used for +linking purposes. The typeset list can be processed and sorted using the \type +{bibtex} program that converts the database into something more \TEX\ friendly (a +\type {.bbl} file). I never used the program myself (nor bibliographies) so I +will not go into too much detail here, if only because all I say can be wrong. + +In \CONTEXT\ we no longer use the \type {bibtex} program: we just use +database files and deal with the necessary manipulations directly in \CONTEXT. +One or more such databases can be used and combined with additional entries +defined within the document. We can have several such datasets active at the same +time. + +A \BIBTEX\ file looks like this: + +\starttyping +@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", +} +\stoptyping + +Normally a value is given between quotes (or curly brackets) but single words are +also OK (there is no real benefit in not using quotes, so we advise to always use +them). There can be many more fields and instead of strings one can use +predefined shortcuts. The title for example quite often contains \TEX\ macros. +Some fields, like \type {pages} have funny characters such as the endash +(typically as \type {--}) so we have a mixture of data and typesetting +directives. If you are covering non||english references, you often need +characters that are not in the \ASCII\ subset but \CONTEXT\ is quite happy with +\UTF. If your database file uses old|-|fashioned \TEX\ accent commands then these +will be internally converted automatically to \UTF. Commands (macros) are +converted to an indirect call, which is quite robust. + +The \BIBTEX\ files are loaded in memory as \LUA\ table but can be converted to +\XML\ so that we can access them in a more flexible way, but that is a subject +for specialists. + +In the old \MKII\ setup we have two kinds of entries: the ones that come from the +\BIBTEX\ run and user supplied ones. We no longer rely on \BIBTEX\ output but we +do still support the user supplied definitions. These were in fact prepared in a +way that suits the processing of \BIBTEX\ generated entries. The next variant +reflects the \CONTEXT\ recoding of the old \BIBTEX\ output. + +\starttyping +\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 +\stoptyping + +The split \type {\artauthor} fields are collapsed into a single \type {author} +field as we deal with the splitting later when it gets parsed in \LUA. The \type +{\artauthor} syntax is only kept around for backward compatibility with the +previous use of \BIBTEX. + +In the new setup we support these variants as well: + +\starttyping +\startpublication[k=Hagen:Third,t=article] + \author{Hans Hagen} + \title{Who knows who?} + ... +\stoppublication +\stoptyping + +and + +\starttyping +\startpublication[tag=Hagen:Third,category=article] + \author{Hans Hagen} + \title{Who knows who?} + ... +\stoppublication +\stoptyping + +and + +\starttyping +\startpublication + \tag{Hagen:Third} + \category{article} + \author{Hans Hagen} + \title{Who knows who?} + ... +\stoppublication +\stoptyping + +Because internally the entries are \LUA\ tables, we also support loading of \LUA\ +based definitions: + +\starttyping +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", + }, +} +\stoptyping + +Files set up like this can be loaded too. The following \XML\ input is rather +close to this, and is also accepted as input. + +\starttyping +<?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> +\stoptyping + +{\em Todo: Add some remarks about loading EndNote and RIS formats, but first we +need to complete the tag mapping (on Alan's plate).} + +So the user has a rather wide choice of formatting style for bibliography +database files. + +\stopchapter + +You can load more data than you actually need. Only entries that are referred to +explicitly through the \type {\cite} and \type {\nocite} commands will be shown +in lists. We will cover these details later. + +\startchapter[title=Commands in entries] + +One unfortunate aspect commonly found in \BIBTEX\ files is that they often +contain \TEX\ commands. Even worse is that there is no standard on what these +commands can be and what they mean, at least not formally, as \BIBTEX\ is a +program intended to be used with many variants of \TEX\ style: plain, \LATEX, and +others. This means that we need to define our use of these typesetting commands. +However, in most cases, they are just abbreviations or font switches and these +are often known. Therefore, \CONTEXT\ will try to resolve them before reporting +an issue. In the log file there is a list of commands that has been seen in the +loaded databases. For instance, loading \type {tugboat.bib} gives a long list of +commands of which we show a small set here: + +\starttyping +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 +\stoptyping + +You can define unknown commands, or overload existing definitions in the +following way: + +\starttyping +\definebtxcommand\TUB {TUGboat} +\definebtxcommand\sltt{\tt} +\definebtxcommand\<#1>{\type{#1}} +\stoptyping + +Unknown commands do not stall processing, but their names are then typeset in a +mono|-|spaced font so they probably stand out for proofreading. You can +access the commands with \type {\btxcommand {...}}, as in: + +\startbuffer +commands like \btxcommand{MySpecialCommand} are handled in an indirect way +\stopbuffer + +\typebuffer + +As this is an undefined command we get: \quotation {\inlinebuffer}. + +?? + +\stopchapter + +\startchapter[title=Datasets] + +Normally in a document you will use only one bibliographic database, whether or +not distributed over multiple files. Nevertheless we support multiple databases as well +which is why we talk of datasets instead. A dataset is loaded with the \type +{\usebtxdataset} command. Although currently it is not necessary to define a +(default) dataset you can best do this because in the future we might provide more +options. Here are some examples: + +\starttyping +\definebtxdataset[standard] + +\usebtxdataset[standard][tugboat.bib] +\usebtxdataset[standard][mtx-bibtex-output.xml] +\usebtxdataset[standard][test-001-btx-standard.lua] +\stoptyping + +These three suffixes are understood by the loader. Here the dataset has the name +\type {standard} and the three database files are merged, where later entries having the +same tag overload previous ones. Definitions in the document source (coded in \TEX\ +speak) are also added, and they are saved for successive runs. This means that if +you load and define entries, they will be known at a next run beforehand, so that +references to them are independent of when loading and definitions take place. + +\showsetup{setupbtxdataset} + +\showsetup{definebtxdataset} + +\showsetup{usebtxdataset} + +In this document we use some example databases, so let's load one of them now: + +\startbuffer +\definebtxdataset[example] + +\usebtxdataset[example][mkiv-publications.bib] +\stopbuffer + +\typebuffer \getbuffer + +You can ask for an overview of entries in a dataset with: + +\startbuffer +\showbtxdatasetfields[example] +\stopbuffer + +\typebuffer + +this gives: + +\getbuffer + +You can set the current active dataset with + +\starttyping +\setbtxdataset[standard] +\stoptyping + +but most publication|-|related commands accept optional arguments that denote the +dataset and references to entries can be prefixed with a dataset identifier.. More +about that later. + +Sometimes you want to check a database. One way of doing that is the following: + +\startbuffer +\definebtxdataset[check] + +\usebtxdataset[check][mkiv-publications-check.bib] + +\showbtxdatasetcompleteness[check] +\stopbuffer + +\typebuffer + +The database like like this: + +\typefile{mkiv-publications-check.bib} + +The completeness check shows (with green field names) the required fields and +when one is missing this is indicated in red. In blue we show what gets +inherited. + +\getbuffer + +\stopchapter + +\startchapter[title=Renderings] + +A list of publications can be rendered at any place in the document. A database +can be much larger than needed for a document. The same is true for the fields +that make up an entry. Here is the list of fields that are currently handled, but +of course there can be additional ones: + + +\startalignment[flushleft,verytolerant,nothyphenated] +\startluacode +local fields = publications.tracers.fields + +for i=1,#fields do + if i > 1 then + context(", ") + end + context.type(fields[i]) +end +\stopluacode +\stopalignment + +If you want to see what publications are in the database, the easiest way is to +ask for a complete list: + +\startbuffer +\definebtxrendering + [example] + [dataset=example, + method=local, + alternative=apa] +\placelistofpublications % \placebtxrendering + [example] + [criterium=all] +\stopbuffer + +\typebuffer + +This gives: + +\getbuffer + +The rendering itself is somewhat complex to set up because we have not only many +different standards but also many fields that can be set up. This means that +there are several commands involved. Often there is a prescribed style to render +bibliographic descriptions, for example \type {apa}. A rendering is setup and +defined with: + +\showsetup[setupbtxrendering] +%showrootvalues[btxrendering] +\showsetup[definebtxrendering] + +And a list of such descriptions is generated with: + +\showsetup[placebtxrendering] + +A dataset can have all kind of entries: + +\startalignment[flushleft,verytolerant,nothyphenated] +\startluacode + local categories = publications.tracers.categories + + for i=1,#categories do + if i > 1 then + context(", ") + end + context.type(categories[i]) + end +\stopluacode +\stopalignment + +Each has its own rendering variant. To keep things simple we have their settings +separated. However, these settings are shared for all rendering alternatives. In +practice this is seldom a problem in a publication as only one rendering +alternative will be active. If this be not sufficient, you can always group local +settings in a setup and hook that into the specific rendering. + +\showsetup[setupbtxlistvariant] +%showrootvalues[btxlistvariant] +\showsetup[definebtxlistvariant] + +Examples of list variants are: + +\startluacode + local variants = publications.tracers.listvariants + + for i=1,#variants do + context.showinstancevalues( { "btxlistvariant" }, { variants[i] }) + end +\stopluacode + +The exact rendering of list entries is determined by the \type {alternative} key +and defaults to \type {apa} which uses definitions from \type +{publ-imp-apa.mkiv}. 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. + +% \showsetup{setuplists} + +There are a couple of accessors and helpers to get the job done. When you want to +fetch a field from the current entry you use \type {\btxfield}. In most cases +you want to make sure this field has a value, for instance because you don't want +fences or punctuation that belongs to a field. + +\starttyping +\btxdoif {title} { + \bold{\btxfield{title}}, +} +\stoptyping + +There are three test macros: + +\starttyping +\btxdoifelse{fieldname}{action when found}{action when not found} +\btxdoif {fieldname}{action when found} +\btxdoifnot {fieldname} {action when not found} +\stoptyping + +An extra conditional is available for testing interactivity: + +\starttyping +\btxdoifelseinteraction{action when true}{action when false} +\stoptyping + +In addition there is also a conditional \type {\btxinteractive} which is +more efficient, although in practice efficiency is not so important here. + +There are three commands to flush data: + +\starttabulate[|||] % Funny usage here! Could not tabulate work without + % even specifying the number of columns? +\NC \type {\btxfield} \NC fetch a explicit field (e.g. \type {year}) \NC \NR +\NC \type {\btxdetail} \NC fetch a derived field (e.g. \type {short}) \NC \NR +\NC \type {\btxflush} \NC fetch a derived or explicit field \NC \NR +\stoptabulate + +Normally you can use \type {\btxfield} or \type {\btxflush} as derived fields +just like analyzed author fields are flushed in a special way. + +You can improve readability by using setups, for instance: + +\starttyping +\btxdoifelse {author} { + \btxsetup{btx:apa:author:yes} +} { + \btxsetup{btx:apa:author:nop} +} +\stoptyping + +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: + +\starttabulate[|||] +\NC \type {\btxspace } \NC before \btxspace after \NC \NR +\NC \type {\btxperiod } \NC before \btxperiod after \NC \NR +\NC \type {\btxcomma } \NC before \btxcomma after \NC \NR +\NC \type {\btxlparent } \NC before \btxlparent after \NC \NR +\NC \type {\btxrparent } \NC before \btxrparent after \NC \NR +\NC \type {\btxlbracket} \NC before \btxlbracket after \NC \NR +\NC \type {\btxrbracket} \NC before \btxrbracket after \NC \NR +\stoptabulate + +So, the previous example setup can be rewritten as: + +\starttyping +\btxdoif {title} { + \bold{\btxfield{title}} + \btxcomma +} +\stoptyping + +There is a special command for rendering a (combination) of authors: + +\starttyping +\btxflushauthor{author} +\btxflushauthor{editor} +\btxflushauthor[inverted]{editor} +\stoptyping + +Instead of the last one you can also use: + +\starttyping +\btxflushauthorinverted{editor} +\stoptyping + +You can use a (configurable) default or pass directives: Valid directives are + +\starttabulate +\NC \bf conversion \NC \bf rendering \NC \NR +\HL +\NC \type{inverted} \NC the Frog jr, Kermit \NC \NR +\NC \type{invertedshort} \NC the Frog jr, K \NC \NR +\NC \type{normal} \NC Kermit, the Frog, jr \NC \NR +\NC \type{normalshort} \NC K, the Frog, jr \NC \NR +\stoptabulate + +The list itself is not a list in the sense of a regular \CONTEXT\ structure related +list. We do use the list mechanism to keep track of used entries but that is mostly +because we can then reuse filtering mechanisms. The actual rendering of a reference +and entry runs on top of so called constructions (other examples of constructions are +descriptions, enumerations and notes). + +\showsetup[setupbtxlist] + +You need to be aware what command is used to achieve the desired result. For instance, +in order to put parentheses around a number reference you say: + +\starttyping +\setupbtxlistvariant + [num] + [left=(, + right=)] +\stoptyping + +If you want automated width calculations, the following does the trick: + +\starttyping +\setupbtxrendering + [standard] + [width=auto] +\stoptyping + +but if you want to control it yourself you say something: + +\starttyping +\setupbtxrendering + [width=none] + +\setupbtxlist + [standard] + [width=3cm, + distance=\emwidth, + color=red, + headcolor=blue, + headalign=flushright] +\stoptyping + +In most cases the defaults will work out fine. + +\stopchapter + +\startchapter[title=Citations] + +Citations are references to bibliographic entries that normally show up in lists +someplace in the document: at the end of a chapter, in an appendix, at the end of +an article, etc. We discussed the rendering of these lists in the previous chapter. +A citation is normally pretty short as its main purpose is to refer uniquely to a more +detailed description. But, there are several ways to refer, which is why the citation +subsystem is configurable and extensible. Just look at the following commands: + +\startbuffer +\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] +\stopbuffer + +\typebuffer + +\startlines \getbuffer \stoplines + +The first argument is optional. +% What is the default? How can one set this up? + +\showsetup[cite] + +You can tune the way a citation shows up: + +\startbuffer +\setupbtxcitevariant[author] [sorttype=author,color=darkyellow] +\setupbtxcitevariant[authoryear] [sorttype=author,color=darkyellow] +\setupbtxcitevariant[authoryears][sorttype=author,color=darkyellow] + +\cite[author][example::demo-004,demo-003] +\cite[authoryear][example::demo-004,demo-003] +\cite[authoryears][example::demo-004,demo-003] +\stopbuffer + +\typebuffer + +Here we sort the authors and color the citation: + +\startlines \getbuffer \stoplines + +For reasons of backward compatibility the \type {\cite} command is a bit picky +about spaces between the two arguments, of which the first is optional. This is +a consequence of allowing its use with the key specified between curly brackets +as is the traditional practice. (We do encourage users to adopt the more +coherent \CONTEXT\ syntax by using square brackets for keywords and reserving +curly brackets to regroup text to be typeset.) +% Just how is it picky? + +The \type {\citation} command is synonymous but is more flexible with respect to +spacing of its arguments: + +\starttyping +\citation[author] [example::demo-004,demo-003] +\citation[authoryear] [example::demo-004,demo-003] +\citation[authoryears][example::demo-004,demo-003] +\stoptyping + +% The first argument of cite and citation is optional. What is the default and how does one set it? + +There is a whole bunch of cite options and more can be easily defined. + +\startluacode +local variants = publications.tracers.citevariants + +context.starttabulate { "|l|p|" } + context.NC() context.bold("key") + context.NC() context.bold("rendering") + context.NC() context.NR() context.FL() + for i=1,#variants do + local variant = variants[i] + context.NC() context.type(variant) + context.NC() context.citation( { variant }, { "example::demo-005" }) + context.NC() context.NR() + end +context.stoptabulate() +\stopluacode + +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: + +\showsetup[setupbtxcitevariant] + +On top of that we can define instances that inherit either from a given parent or +from the topmost setup. + +\showsetup[definebtxcitevariant] + +% The default values are: + +% \showrootvalues[btxcitevariant] + +But, specific variants can have them overloaded: + +% \showinstancevalues[setupbtxcitevariant][author] +% \showinstancevalues[setupbtxcitevariant][authornum] + +\startluacode + local variants = publications.tracers.citevariants + + for i=1,#variants do + context.showinstancevalues( { "btxcitevariant" }, { variants[i] }) + end +\stopluacode + +A citation variant is defined in several steps and if you really want to know +the dirty details, you should look into the \type {publ-imp-*.mkiv} files. Here +we stick to the concept. + +\starttyping +\startsetups btx:cite:author + \btxcitevariant{author} +\stopsetups +\stoptyping + +You can overload such setups if needed, but that only makes sense when you cannot +configure the rendering with parameters. The \type {\btxcitevariant} command is +one of the build in accessors and it calls out to \LUA\ where more complex +manipulation takes place if needed. If no manipulation is known, the field with +the same name (if found) will be flushed. A command like \type {\btxcitevariant} +assumes that a dataset and specific tag has been set. This is normally done in +the wrapper macros, like \type {\cite}. For special purposes you can use these +commands + +\starttyping +\setbtxdataset[example] +\setbtxentry[hh2013] +\stoptyping + +But don't expect too much support for such low level rendering control. + +Unless you use \type {criterium=all} only publications that are cited will end up +in the lists. You can force a citation into a list using \type {\usecitation}, for +example: + +\starttyping +\usecitation[example::demo-004,demo-003] +\stoptyping + +This command has two synonyms: \type {\nocite} and \type {\nocitation} so you can +choose whatever fits you best. + +\showsetup[nocite] + +\stopchapter + +\startchapter[title=The \LUA\ view] + +Because we manage data at the \LUA\ end it is tempting to access it there for +other purposes. This is fine as long as you keep in mind that aspects of the +implementation may change over time, although this is unlikely once the modules +become stable. + +The entries are collected in datasets and each set has a unique name. In this +document we have the set named \type {example}. A dataset table has several +fields, and probably the one of most interest is the \type {luadata} field. Each +entry in this table describes a publication: + +\startluacode + context.tocontext(publications.datasets.example.luadata["demo-001"]) +\stopluacode + +This is \type {publications.datasets.example.luadata["demo-001"]}. There can be +a companion entry in the parallel \type {details} table. + +\startluacode + context.tocontext(publications.datasets.example.details["demo-001"]) +\stopluacode + +These details are accessed as \type +{publications.datasets.example.details["demo-001"]} and by using a separate table +we can overload fields in the original entry without losing the original. + +You can loop over the entries using regular \LUA\ code combined with \MKIV\ +helpers: + +\startbuffer +local dataset = publications.datasets.example + +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() +end +context.stoptabulate() +\stopbuffer + +\typebuffer + +This results in: + +\ctxluabuffer + +You can manipulate a dataset after loading. Of course this assumes that you know +what kind of content you have and what you need for rendering. As example we +load a small dataset. + +\startbuffer +\definebtxdataset[drumming] +\usebtxdataset[drumming][mkiv-publications.lua] +\stopbuffer + +\typebuffer \getbuffer + +Because we're going to do some \LUA, we could also have loaded the dataset +with: + +\starttyping +publications.load("drumming","mkiv-publications.lua","lua") +\stoptyping + +The dataset has three entries: + +\typefile{mkiv-publications.lua} + +As you can see, we can have a subtitle. We will combine the title and subtitle +into one: + +\startbuffer +\startluacode +for tag, entry in next, publications.datasets.drumming.luadata do + if entry.subtitle then + if entry.title then + entry.title = entry.title .. ", " .. entry.subtitle + else + entry.title = entry.subtitle + end + entry.subtitle = nil + logs.report("btx","combining title and subtitle of entry tagged %a",tag) + end +end +\stopluacode +\stopbuffer + +\typebuffer \getbuffer + +We can now typeset the entries with: + +\startbuffer +\definebtxrendering[drumming][dataset=drumming,method=dataset] +\placebtxrendering[drumming] +\stopbuffer + +\typebuffer + +Because we just want to show the entries, and have no citations that force them +to be shown, we have to the \type {method} to \type {dataset}. \footnote {Gavin +Harrison is in my opinion one of the most creative, diverse and interesting +drummers of our time. It's also fascinating to watch him play and a welcome +distraction from writing code and manuals.} + +\blank \getbuffer \blank + +\stopchapter + +\startchapter[title=The \XML\ view] + +The \type {luadata} table can be converted into an \XML\ representation. This is +a follow up on earlier experiments with an \XML|-|only approach. I decided in the end +to stick to a \LUA\ approach and provide some simple \XML\ support in addition. + +Once a dataset is accessible as \XML\ tree, you can use the regular \type {\xml...} +commands. We start with loading a dataset, in this case from just one file. + +\startbuffer +\usebtxdataset[tugboat][tugboat.bib] +\stopbuffer + +\typebuffer \getbuffer + +The dataset has to be converted to \XML: + +\startbuffer +\convertbtxdatasettoxml[tugboat] +\stopbuffer + +\typebuffer \getbuffer + +The tree is now accessible by its root reference \type {btx:tugboat}. If we want simple +field access we can use a few setups: + +\startbuffer +\startxmlsetups btx:initialize + \xmlsetsetup{#1}{bibtex|entry|field}{btx:*} + \xmlmain{#1} +\stopxmlsetups + +\startxmlsetups btx:field + \xmlflushcontext{#1} +\stopxmlsetups + +\xmlsetup{btx:tugboat}{btx:initialize} +\stopbuffer + +\typebuffer \getbuffer + +The two setups are predefined in the core already, but you might want to change them. They are +applied in for instance: + +\startbuffer +\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 +\stopbuffer + +\typebuffer \getbuffer + +\startbuffer +\startxmlsetups btx:demo + \xmlcommand + {#1} + {/bibtex/entry[string.find(@tag,'Hagen')][1]}{btx:table} +\stopxmlsetups + +\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} +\stopbuffer + +\typebuffer \getbuffer + +Here is another example: + +\startbuffer +\startxmlsetups btx:row + \NC \xmlatt{#1}{tag} + \NC \xmlfirst{#1}{/field[@name='title']} + \NC \NR +\stopxmlsetups + +\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} +\stoptabulate +\stopbuffer + +\typebuffer \getbuffer + +A more extensive example is the following. Of course this assumes that you +know what \XML\ support mechanisms and macros are available. + +\startbuffer +\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 + +\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 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} +\stopbuffer + +\typebuffer \getbuffer + +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. + +\stopchapter + +\startchapter[title=Standards] + +The rendering of bibliographic entries is often standardized and prescribed by +the publisher. If you submit an article to a journal, normally it will be +reformatted (or even re|-|keyed) and the rendering will happen at the publishers +end. In that case it may not matter how entries were rendered when writing the +publication, because the publisher will do it his or her way. +This means that most users probably will stick to the standard \APA\ rules and for +them we provide some configuration. Because we use setups it is easy to overload +specifics. If you really want to tweak, best look in the files that deal with it. + +Many standards exist and support for other renderings may be added to the core. +Interested users are invited to develop and to test alternate standard renderings +according to their needs. + +Todo: maybe a list of categories and fields. + +\stopchapter + +\startchapter[title=Cleaning up] + +Although the \BIBTEX\ format is reasonably well defined, in practice there are +many ways to organize the data. For instance, one can use predefined string +constants that get used (either or not combined with other strings) later on. A string +can be enclosed in curly braces or double quotes. The strings can contain \TEX\ commands +but these are not standardized. The databases often have somewhat complex +ways to deal with special characters and the use of braces in their definition is also +not normalized. + +The most complex to deal with are the fields that contain names of people. At some point it +might be needed to split a combination of names into individual ones that then get split into +title, first name, optional inbetweens, surname(s) and additional: \type {Prof. Dr. Alfred +B. C. von Kwik Kwak Jr. II and P. Q. Olet} is just one example of this. The convention seems +to be not to use commas but \type {and} to separate names (often each name will be specified +as lastname, firstname). + +We don't see it as challenge nor as a duty to support all kinds of messy definitions. Of +course we try to be somewhat tolerant, but you will be sure to get better results if you +use nicely setup, consistent databases. + +Todo: maybe some examples of bad. + +\stopchapter + +\startchapter[title=Transition] + +In the original bibliography support module usage was as follows (example taken +from the contextgarden wiki): + +\starttyping +% 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 +\stoptyping + +For \MKIV\ the modules were partly rewritten and ended up in the core so the two +{\usemodule} commands were no longer needed. The overhead associated with the +automatic loading of the bibliography macros can be neglected these days, so +standardized modules such as \type {bib} are all being moved to the core and do +not need to be explicitly loaded. + +The first \type {\setupbibtex} command in this example is needed to bootstrap +the process: it tells what database has to be processed by \BIBTEX\ between +runs. The second \type {\setuppublications} command is optional. Each citation +(tagged with \type {\cite}) ends up in the list of publications. + +In the new approach we no longer use \BIBTEX so we don't need to setup \BIBTEX. +Instead we define dataset(s). We also no longer set up publications with one +command, but have split that up in rendering-, list-, and cite|-|variants. The +basic \type {\cite} command remains. The above example becomes: + +\starttyping +\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 +\stoptyping + +So, we have a few more commands to set up things. If you intend to use just a +single dataset and rendering, the above preamble can be simplified to: + +\starttyping +\usebtxdataset + [mybibfile.bib] + +\setupbtxrendering + [numbering=yes] +\stoptyping + +But keep in mind that compared to the old \MKII\ derived method we have moved +some of the options to the rendering, list and cite setup variants. + +Another difference is now the use of lists. When you define a rendering, you +also define a list. However, all entries are collected in a common list tagged +\type {btx}. Although you will normally configure a rendering you can still set +some properties of lists, but in that case you need to prefix the list +identifier. In the case of the above example this is \type {btx:document}. + +\stopchapter + +\startchapter[title=\MLBIBTEX] + +Todo: how to plug in \MLBIBTEX\ for sorting and other advanced operations. + +\stopchapter + +\startchapter[title=Extensions] + +As \TEX\ and \LUA\ are both open and accessible in \CONTEXT\ it is possible to +extend the functionality of the bibliography related code. For instance, you can add +extra loaders. + +\starttyping +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 +\stoptyping + +This then permits loading a database (into a dataset) with the command: + +\starttyping +\usebtxdataset[standard][myfile.myformat] +\stoptyping + +The \type {myformat} suffix is recognized automatically. If you want to use another +suffix, you can do this: + +\starttyping +\usebtxdataset[standard][myformat::myfile.txt] +\stoptyping + +\stopchapter + +\startchapter[title=Notes] + +The move from external \BIBTEX\ processing to internal processing has the +advantage that we stay within the same run. In the traditional approach we had +roughly the following steps: + +\startitemize[packed] +\startitem the first run information is collected and written to file \stopitem +\startitem after that run the \BIBTEX\ program converts that file to another one \stopitem +\startitem successive runs use that data for references and producing lists \stopitem +\stopitemize + +In the \MKIV\ approach the bibliographic database is loaded in memory each run +and processing also happens each run. On paper this looks less efficient but as +\LUA\ is quite fast, in practice performance is much better. + +Probably most demanding is the treatment of authors as we have to analyze names, +split multiple authors and reassemble firstnames, vons, surnames and juniors. +When we sort by author sorting vectors have to be made which also has a penalty. +However, in practice the user will not notice a performance degradation. We did +some tests with a list of 500.000 authors, sorted them and typeset them as list +(producing some 5400 dense pages in a small font and with small margins). This is +typical one of these cases where using \LUAJITTEX\ saves quite time. On my +machine it took just over 100 seconds to get this done. Unfortunately not all +operating systems performed equally well: 32 bit versions worked fine, but 64 bit +\LINUX\ either crashed (stalled) the machine or ran out of memory rather fast, +while \MACOSX\ and \WINDOWS\ performed fine. In practice you will never run into +this, unless you produce massive amounts of bibliographic entries. \LUAJIT\ has +some benefits but also some drawbacks. + +\stopchapter + +\stopbodymatter + +\stoptext + +Todo: + +\setuplabeltext[en][reprint=reprint] +\setuplabeltext[de][reprint=Nachdruck] + +note = {\labeltext{reprint} 2004} + diff --git a/Master/texmf-dist/doc/context/manuals/allkind/publications-en.xml b/Master/texmf-dist/doc/context/manuals/allkind/publications-en.xml new file mode 100644 index 00000000000..ea577ccf4b7 --- /dev/null +++ b/Master/texmf-dist/doc/context/manuals/allkind/publications-en.xml @@ -0,0 +1,369 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- bibliographies --> + +<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="publications" language="en" version="2013.12.22"> + + <!-- datasets --> + + <cd:command name="setupbtxdataset" file="publ-ini.mkiv" category="publications" hash="btxdataset"> + <cd:sequence> + <cd:string value="setupbtxdataset"/> + </cd:sequence> + <cd:arguments> + <cd:keywords n="1" optional="yes"> + <cd:constant type="cd:name"/> + </cd:keywords> + <cd:assignments n="2" optional="yes"> + <!-- todo --> + </cd:assignments> + </cd:arguments> + </cd:command> + + <cd:command name="definebtxdataset" file="publ-ini.mkiv" category="publications" hash="btxdataset"> + <cd:sequence> + <cd:string value="definebtxdataset"/> + </cd:sequence> + <cd:arguments> + <cd:keywords n="1"> + <cd:constant type="cd:name"/> + </cd:keywords> + <cd:assignments n="2" optional="yes"> + <cd:inherit name="setupbtxdataset" n="2"/> + </cd:assignments> + </cd:arguments> + </cd:command> + + <cd:command name="usebtxdataset" file="publ-ini.mkiv" category="publications" hash="btxdataset"> + <cd:sequence> + <cd:string value="usebtxdataset"/> + </cd:sequence> + <cd:arguments> + <cd:keywords n="1"> + <cd:constant type="cd:name"/> + </cd:keywords> + <cd:keywords n="2"> + <cd:constant type="cd:file"/> + </cd:keywords> + </cd:arguments> + </cd:command> + + <!-- rendering --> + + <cd:command name="setupbtxrendering" file="publ-ini.mkiv" category="publications" hash="btxrendering"> + <cd:sequence> + <cd:string value="setupbtxrendering"/> + </cd:sequence> + <cd:arguments> + <cd:keywords n="1" optional="yes"> + <cd:constant type="cd:name"/> + </cd:keywords> + <cd:assignments n="2"> + <cd:parameter name="alternative"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="dataset"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="setups"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="method"> + <cd:constant type="local"/> + <cd:constant type="global"/> + <cd:constant type="none"/> + <cd:constant type="force"/> + </cd:parameter> + <cd:parameter name="sorttype"> + <cd:constant type="short"/> + <cd:constant type="reference"/> + <cd:constant type="dataset"/> + <cd:constant type="default"/> + </cd:parameter> + <cd:parameter name="criterium"> + <cd:constant type="cd:text"/> <!-- todo --> + </cd:parameter> + <cd:parameter name="refcommand"> + <cd:constant type="cd:text"/> <!-- todo --> + </cd:parameter> + <cd:parameter name="numbering"> + <cd:constant type="yes"/> + <cd:constant type="cite"/> + </cd:parameter> + <cd:parameter name="width"> + <cd:constant type="cd:dimension"/> + <cd:constant type="auto"/> + </cd:parameter> + <cd:parameter name="distance"> + <cd:constant type="cd:dimension"/> + </cd:parameter> + <cd:parameter name="continue"> + <cd:constant type="yes"/> + <cd:constant type="no"/> + </cd:parameter> + </cd:assignments> + </cd:arguments> + </cd:command> + + <cd:command name="definebtxrendering" file="publ-ini.mkiv" category="publications" hash="btxrendering"> + <cd:sequence> + <cd:string value="definebtxrendering"/> + </cd:sequence> + <cd:arguments> + <cd:keywords n="1"> + <cd:constant type="cd:name"/> + </cd:keywords> + <cd:keywords n="2" optional="yes"> + <cd:constant type="cd:name"/> + </cd:keywords> + <cd:assignments n="3" optional="yes"> + <cd:inherit name="setupbtxrendering" n="2"/> + </cd:assignments> + </cd:arguments> + </cd:command> + + <cd:command name="placebtxrendering" file="publ-ini.mkiv" category="publications" hash="btxrendering"> + <cd:sequence> + <cd:string value="placebtxrendering"/> + </cd:sequence> + </cd:command> + + <!-- lists --> + + <cd:command name="setupbtxlistvariant" file="publ-ini.mkiv" category="publications" hash="btxlistvariant"> + <cd:sequence> + <cd:string value="setupbtxlistvariant"/> + </cd:sequence> + <cd:arguments> + <cd:keywords n="1" optional="yes"> + <cd:constant type="cd:name"/> + </cd:keywords> + <cd:assignments n="2"> + <cd:parameter name="namesep"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="lastnamesep"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="finalnamesep"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="firstnamesep"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="juniorsep"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="vonsep"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="surnamesep"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="surnamejuniorsep"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="juniorjuniorsep"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="surnamefirstnamesep"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="surnameinitialsep"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="etallimit"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="etaldisplay"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="etaltext"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="monthconversion"> + <cd:constant type="number"/> + <cd:constant type="month"/> + <cd:constant type="month:mnem"/> + </cd:parameter> + <cd:parameter name="authorconversion"> + <cd:constant type="normal"/> + <cd:constant type="inverted"/> + <cd:constant type="normalshort"/> + <cd:constant type="invertedshort"/> + </cd:parameter> + </cd:assignments> + </cd:arguments> + </cd:command> + + <cd:command name="definebtxlistvariant" file="publ-ini.mkiv" category="publications" hash="btxlistvariant"> + <cd:sequence> + <cd:string value="definebtxlistvariant"/> + </cd:sequence> + <cd:arguments> + <cd:keywords n="1"> + <cd:constant type="cd:name"/> + </cd:keywords> + </cd:arguments> + </cd:command> + + <!-- variants --> + + <cd:command name="setupbtxcitevariant" file="publ-ini.mkiv" category="publications" hash="btxcitevariant"> + <cd:sequence> + <cd:string value="setupbtxcitevariant"/> + </cd:sequence> + <cd:arguments> + <cd:keywords n="1" optional="yes"> + <cd:constant type="cd:name"/> + </cd:keywords> + <cd:assignments n="2"> + <cd:parameter name="alternative"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="setups"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="interaction"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="andtext"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="otherstext"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="compress"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="putsep"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="lastputsep"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="inbetween"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="right"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="middle"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="left"> + <cd:constant type="cd:text"/> + </cd:parameter> + </cd:assignments> + </cd:arguments> + </cd:command> + + <cd:command name="definebtxcitevariant" file="publ-ini.mkiv" category="publications" hash="btxcitevariant"> + <cd:sequence> + <cd:string value="definebtxcitevariant"/> + </cd:sequence> + <cd:arguments> + <cd:keywords n="1"> + <cd:constant type="cd:name"/> + </cd:keywords> + <cd:keywords n="2" optional="yes"> + <cd:constant type="cd:name"/> + </cd:keywords> + <cd:assignments n="3" optional="yes"> + <cd:inherit name="setupbtxvariant" n="3"/> + </cd:assignments> + </cd:arguments> + </cd:command> + + <!-- refering --> + + <cd:command name="cite" file="publ-ini.mkiv" category="publications"> + <cd:sequence> + <cd:string value="cite"/> + </cd:sequence> + <cd:arguments> + <cd:keywords n="1" optional="yes"> + <cd:constant type="cd:name"/> + </cd:keywords> + <cd:keywords n="2"> + <cd:constant type="cd:name"/> + </cd:keywords> + </cd:arguments> + </cd:command> + + <cd:command name="nocite" file="publ-ini.mkiv" category="publications"> + <cd:sequence> + <cd:string value="nocite"/> + </cd:sequence> + <cd:arguments> + <cd:keywords n="1"> + <cd:constant type="cd:name"/> + </cd:keywords> + </cd:arguments> + </cd:command> + + <!-- list entries --> + + + <cd:command name="setupbtxlist" file="publ-ini.mkiv" category="publications" hash="btxlist"> + <cd:sequence> + <cd:string value="setupbtxlist"/> + </cd:sequence> + <cd:arguments> + <cd:assignments n="1"> + <cd:parameter name="alternative"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="style"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="color"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="headstyle"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="headcolor"> + <cd:constant type="cd:text"/> + </cd:parameter> + <cd:parameter name="width"> + <cd:constant type="cd:dimension"/> + </cd:parameter> + <cd:parameter name="distance"> + <cd:constant type="cd:dimension"/> + </cd:parameter> + <cd:parameter name="hang"> + <cd:constant type="cd:number"/> + </cd:parameter> + <cd:parameter name="align"> + <cd:resolve name="align"/> + </cd:parameter> + <cd:parameter name="headalign"> + <cd:resolve name="symalign"/> + </cd:parameter> + <cd:parameter name="margin"> + <cd:constant type="cd:yes"/> + <cd:constant type="cd:no"/> + </cd:parameter> + <cd:parameter name="before"> + <cd:constant type="cd:command" default="\blank"/> + </cd:parameter> + <cd:parameter name="inbetween"> + <cd:constant type="cd:command"/> + </cd:parameter> + <cd:parameter name="after"> + <cd:constant type="cd:command" default="\blank"/> + </cd:parameter> + <cd:parameter name="display"> + <cd:constant type="cd:yes"/> + <cd:constant type="cd:no"/> + </cd:parameter> + <cd:parameter name="command"> + <cd:constant type="cd:command"/> + </cd:parameter> + </cd:assignments> + </cd:arguments> + </cd:command> + + +</cd:interface> |