mlBibTeX: Reporting the Experience Jean-Michel Hufflen

To cite this version:

Jean-Michel Hufflen. mlBibTeX: Reporting the Experience. TUGB, 2007, pp.157–162. ￿hal-00644467￿

HAL Id: hal-00644467 https://hal.archives-ouvertes.fr/hal-00644467 Submitted on 24 Nov 2011

HAL is a multi-disciplinary open access L’archive ouverte pluridisciplinaire HAL, est archive for the deposit and dissemination of sci- destinée au dépôt et à la diffusion de documents entific research documents, whether they are pub- scientifiques de niveau recherche, publiés ou non, lished or not. The documents may come from émanant des établissements d’enseignement et de teaching and research institutions in France or recherche français ou étrangers, des laboratoires abroad, or from public or private research centers. publics ou privés. ∗ MlBibTEX: Reporting the Experience

Jean-Michel HUFFLEN LIFC (EA CNRS 4157) University of Franche-Comté 16, route de Gray 25030 BESANÇON CEDEX FRANCE [email protected] http://lifc.univ-fcomte.fr/~hufflen

Abstract

This article reports how the different steps of the MlBibTEX project were con- ducted until the first public release. We particularly focus on the problems raised by reimplementing a program (BibTEX) that came out in the 1980’s. Since this time, implementation techniques have evolved, new requirements have appeared, as well as new programs within TEX’s galaxy. Our choices are explained and discussed. Keywords TEX, LATEX, BibTEX, reimplementation, reverse engineering, im- plementation language, program update.

Streszczenie

Artykuł omawia realizację poszczególnych kroków przedsięwzięcia MlBibTEX, w czasie do przedstawienia pierwszej publicznej wersji. W szczególności skupiamy się na problemach powstałych przy reimplementacji programu (BibTEX), powsta- łego w latach 80 zeszłego wieku. Od tego czasu rozwinęły się techniki implemen- tacyjne, powstały nowe wymagania oraz nowe programy w świecie TEX-owym. Przedstawiamy i dyskutujemy dokonane wybory. Słowa kluczowe TEX, LATEX, BibTEX, reimplementacja, reverse engineering, język implementacji, aktualizacja programu.

0 Introduction projects aim to provide new programs, based on TEX & Co.’s ideas.2 A first representative example is the In 2003, TEX’s 25th anniversary was celebrated at A 1 A LT X 3 project [32], a second is NTS [27]. the TUG conference, held at Hawaii [1]. LTEX E [28] and BibTEX [35] — the bibliography processor MlBibTEX — for ‘MultiLingual BibTEX’ — be- usually associated with the LATEX word processor — longs to such projects. Let us recall that this pro- are more recent, since they came out in the 1980’s, gram aims to be a ‘better BibTEX’, especially about shortly after TEX. All are still widely used, such multilingual features. For a end-user, MlBibTEX be- longevity being exceptional for software. However, haves exactly like ‘classical’ BibTEX: it searches bib- these programs are quite ageing. Of course, re- liography data base (.bib) files for citation keys used cent versions have incorporated many features ab- throughout a document and arranges the references sent from the first versions, what proves the robust- found into a .bbl file suitable for LATEX, w.r.. a bib- 3 ness of these systems. Nevertheless, they present liography style. MlBibTEX is written in Scheme, it 4 some limitations due to the original conception, and uses XML as a central format: when entries of .bib a major reimplementation may be needed to inte- 2 grate some modern requirements. In addition, inter- Concerning TEX, an additional point is that TEX’s de- active word processors made important progress and velopment has been frozen by its author, Donald E. Knuth [26]. If incorporating new ideas to a ‘new TEX’ leads to a ma- are serious rivals, even if they do not yield typeset- jor reimplementation, the resulting program must be named ting of such professional quality. That is why some differently. 3 The version used is described in [24]. ∗ 4 Title in Polish: MlBibTEX: raport z doświadczeń. EXtensible Markup Language. Readers interested in 1 TEX Users Group. an introductory book to this formalism can consult [37].

TUGboat, Volume 0 (2060), No. 0 — Proceedings of the 2060 Annual Meeting 1001 Jean-Michel HUFFLEN

files are parsed, they result in an XML . Bib- ming language, higher than . So we consider liography styles taking advantage as far as possible again the prototype in Scheme, we sketched in 5 7 of MlBibTEX’s new features are written using nbst, 2002. SXML [25] is chosen as the representa- 6 a variant of XSLT described in [15]. The bst lan- tion of XML texts in Scheme. Some parts of guage [34], based on handling a stack and used for MlBibTEX are directly reprogrammed from C writing bibliography styles of BibTEX, can be used to Scheme. About the other parts, this proto- in a compatibility [20]. type is a good basis for much experiment [16]. We think that the experience we have got in Nov. 2004 The version written in C is definitely developing MlBibTEX may be useful for other anal- dropped out, whereas the version in Scheme is ogous projects. In a first section, we briefly recall the adapted in order to get much efficency and be- chronology of this development. As it could be seen, comes the ‘official’ MlBibTEX [18]. this development has not been linear, and the two Sep. 2005 We decided to freeze MlBibTEX’s design next following sections focus on the problems we had and concentrate only on finishing programming. to face. We explain how we have determined which Many Scheme functions are rewritten in confor- 8 criteria are accurate when a mity to SRFIs [39]. is to be chosen for such an application. Then we May 2006 A working version is almost finished, show how the compatibility with ‘old’ data and the except for the interface with the kpathsea li- integration of modern features should be managed. brary. 1 MlBibTEX’s Chronology May 2007 Public availability of MlBibTEX’s Ver- sion 1.3. Oct. 2000 MlBibTEX’s design begins: the syntax of .bib files is enriched with multilingual anno- Besides, let us make precise that MlBibTEX is tations. Version 1.1’s prototype is written using not our only task. As an Assistant Professor in our the C programming language and tries to reuse university, we teach Computer Science. We also parts of ‘old BibTEX’s program as far as possi- participate in other projects. As a consequence, ble. MlBibTEX’s development has been somewhat an- May 2001 The first article about MlBibTEX is [9]. archic: we hardly worked on it for two or three Later, the experience of developing MlBibTEX’s months, put it aside for one or two months, and so Version 1.1 is described in [10]. on. Last, we have supervised some student projects May 2002 By discussing with some people at the about graphical tools around MlBibTEX [2, 8], pro- grammed using Ruby [31], but concerning the devel- EuroBachoTEX conference, we realise that the conventions for bibliography styles are too di- opment of the MlBibTEX program itself, we have verse, even if we consider only those of Euro- done it alone. pean countries. We realise that this first ap- 2 Choice of an implementation language proach is quite unsuitable, unless defining a new version of the bst language. So we decide to ex- There are several programming paradigms: impera- plore two directions. First, we develop a ques- tive, functional, and logic programming. There are tionnaire about problems and conventions con- also several ways to implement a programming lan- cerning bibliography styles used within Euro- guage: interpretation and compilation. Some para- pean countries. Second, we begin a prototype digms are more accurate, according to the domain in Scheme implementing the bst language [11]. of interest. Likewise, some interpreted languages Initially, this prototype is devoted to experi- are more accurate if you want to program a pro- totype quickly and are just interested in performing ments about improving this language in a sec- 9 ond version (1.2). some experiment. But compiled languages are of- Jan. 2003 Version 1.2 is stalled. The new version ten preferable if programs’ efficiency is crucial. Be- (1.3) is built out of XML formats. The nbst lan- sides, the level of a programming language has some guage is designed and presented at [12, 13]. We influence on development: in a high-level language, explain in [14] how the results of our question- low-level details of structures’ implementation do naire have influenced this new direction. not have to be made explicit, so development is Feb. 2004 It appears to us that MlBibT X should 7 Scheme implementation of XML. E 8 be developed using a very high-level program- Scheme Requests for Implementation. That is an effort to coordinate libraries and other additions to the Scheme lan- 5 New Bibliography STyles. guage between implementations. 6 eXtensible Language Stylesheet Transformations, the 9 That is the case for the graphical tools around language of transformations used for XML documents [43]. MlBibTEX programmed in Ruby by our students [2, 8].

1002 TUGboat, Volume 0 (2060), No. 0 — Proceedings of the 2060 Annual Meeting MlBibTEX: Reporting the Experience

quickier, and programs that result in are more con- gram is expressed using Lisp, except for the cise, nearer to a mathematical model. implementation of low-level functionalities. In addition to these general considerations, let Finally, our choice was Scheme, the modern di- us recall that we aim to replace an existing program alect of Lisp. We confess that we are personally by a new one. This new program is supposed to attracted by languages, be- do better than the ‘old’ one. ‘To do better’ may cause they can abstract procedures as well as data: mean ‘to have more functionalities, more expressive in this sense, they are very high-level programming power’, but for sake of credibility, it is preferable for languages. Concerning Scheme, it seems to us to be the new program to be as efficient as the ‘old’ one. undebatable that it has very good expressive power. Let us not forget that TEX and BibTEX are written In addition, it allows some operations to be pro- using an old style of programming — more precisely, grammed ‘impurely’, by side effects, like in imper- a monolithic style used in the 1970’s–1980’s — based ative programming, in order to increase efficiency. on global variables mainly, without abstract data However, we use this feature parsimoniously, on lo- types. Choosing a language implemented efficiently cal variables, because it breaks principles of func- is crucial: as a counter-example, NTS, written using tional programming. We have defined precise rules Java, has been reported 100 times slower than TEX for naming variables, as we did in C for the first ver- [42, § 5]. sion, in order to emphasise the modular decomposi- That is why we wrote MlBibTEX’s first ver- tion of our program [19]. Last but not least, Scheme sion using C, because of its efficiency. In addition, programs may be interpreted — when software is be- this language is portable on most operating systems. ing developed — or compiled, in which case they are And to make our program modular, we defined pre- more efficient. As a good example of Scheme im- cise rules for naming procedures [10, § 3]. But two plementation, [38] compiles Scheme functions problems appeared. by transforming them into C functions, then these First, MlBibTEX’s development has not been a C functions are compiled, in turn. daily task, as abovementioned. Even if we are per- If we compare the two developments in C and sonally able to program large applications in C, it Scheme, the latter is better, as it is expected from was difficult to put aside a C program and resume it a very high-level programming language. But pro- later: from this point of view, C is not a very high- gramming an application related to TEX using a lan- level language. Besides, let us not forget that we guage other than C reveals a drawback: the kpathsea are working within an open domain, as natural lan- [3] is written in C. Let us recall that kpathsea 11 guages are. Some change may be needed because of implements functions navigating through the TDS. new features concerning languages that had not yet In particular, such functions localise the files con- been integrated into MlBibTEX’s framework. The taining the specification of a class for a LATEX doc- higher the level, the more easy such change will be ument or a bibliography style when BibTEX runs. applied. If there is a compatibility mode, for ‘old’ bibliogra- Second, we want end-users of MlBibTEX to be phy styles written in bst, the functions of this com- able to influence the behaviour of this program. For patibility mode should be able to localise such files, example, many BibTEX users put LATEX commands too. Likewise, ‘new’ bibliography styles written in inside values associated with fields of .bib files, in or- nbst, should be localised by means of an analogous der to increase expressive power within bibliograph- method. This implies that the language — or, at ical data. These users should be able to specify how least, an implementation of the language — used for to handle such commands when .bib files are con- our software includes an interface with C. verted into XML trees. In particular, that is useful if Of course, what we expose above proceeds from MlBibTEX is used to produce outputs for other word general considerations. After all, we do not know processors than LATEX [21]. How to do that in C? if BibTEX++ [4] — a successor of BibTEX based unless defining a mini-language to express such func- on Java, bibliography styles are written in Java — tions? In this case, using a script language is a bet- is very less efficient than BibTEX. This may not ter choice . . . provided that this language is efficient. be the case. The advantages of script languages in Another choice is a Lisp10 dialect, as did in emacs such development appear if we consider Bibulus [45], 12 [40]: end-users can customise emacs’ behaviour by another successor of BibTEX, written using . expressions using the Emacs Lisp language [30]. This It has developed quickier than MlBibTEX, but is choice is homogeneous: the whole of the emacs pro- 11 TEX Directory Structure. 12 Practical Extraction Report Language. A didactic in- 10 LISt Processor. troduction to this language is [44].

TUGboat, Volume 0 (2060), No. 0 — Proceedings of the 2060 Annual Meeting 1003 Jean-Michel HUFFLEN

‘less’ multilingual and uses BibTEX when it runs. other example, the ConTEXt format [7] put good That is, Bibulus does not replace BibTEX wholly, as settlement into action for an homogeneous expres- MlBibTEX attempts to do. In addition, there is an sion of setup commands, by means of ‘key=value’ example where the need of a programming language syntax: with higher level than C appeared: the project of \setuplayout[backspace=4cm,topspace=2.5cm] moving Ω — a successor of T X — into a C++ plat- E Nevertheless, is it reasonable to add more and more form [36]. syntactic sugar to such old-fashioned syntax? Would We personally think that an implementation of the definition of new languages not be preferable? NTS in [41] — what was planned ini- Of course, the present languages of T X and BibT X tially — would have been preferable. As mentioned E E will still remain to be used, due to the huge num- in [46], the object-oriented features of Common Lisp 13 ber of files using them and developed by end-users. (CLOS ) have been added to the language’s basis — But if a new language is designed, it should be- like C++ object-oriented functionnalities have been come the usual way to deal with the new program. added to C — but the language itself is not actu- Of course, end-users will have to get used with the ally object-oriented. In [46], this point is viewed as new language. But that can be done progressively a drawback. First, we personally think that every- and some synergy between developers and users may thing is not an object, from a point of view related cause this new language to be improved if need be. to conception. Second, Common Lisp, even if it is a In addition, let us remark that in our case, the functional programming language, allows some op- new language for bibliography styles (nbst) is close erations to be performed more efficiently by means 14 to XSLT, so we think that users familiar with the of side effects, like Scheme. But Common Lisp’s former can get used to the latter easily. standard does not specify an interface with C, like Scheme’s, although some implementations provide 3.2 New services this service. However, we personally prefer Scheme, Now it is admitted that composite tasks are not to simpler and more modern. be done by a monolithic program, but by means of 3 Choice of strategy a cooperation among several programs. From this A 3.1 Languages point of view, the cooperation between LTEX and BibTEX is exemplar. But BibTEX is too strongly T X & Co. have been wonderful programs since the A E related to LTEX. BibTEX can be used to build bib- date they came out. However, they behave very liography for ConTEXt documents, but because this nicely, but syntaxes are quite archaic. T X’s is not E word processor belongs to TEX family. On the con- homogeneous — although LAT X 2ε and LAT X 3 [32] 15 E E trary, writing a converter from BibTEX to HTML try to correct this point — fro example, different de- by means of the bst language is impossible with- limitations are used to change size (‘{\small ...}’) out loss of quality: for example, the unbreakable or face (‘\textbf{...}’). BibT X’s syntax suffers E space character is represented by ‘~’ — as in TEX— from lack of expressive power: for example, the only when names are formatted [22], and this convention way to put a brace within a field’s value is to give cannot be changed.16 We see that such problems its code number by ‘\symbol{...}’. ‘Semantically’, can be avoided by considering an XML-like language TEX’s language provides many intelligent features, as a central format. In our case, generating bibli- as mentionned in [6], but does not meet a modern A ographies according to other formats than LTEX’s style of programming. Likewise, .bib files’ syntax A should be easy since the LTEX commands end-users can express only ‘verbatim’ values, except for some put into .bib files are removed when these files are ‘tricks’ like inserting some ‘-’ characters for a range parsed. This point is detailed in [17, 21]. of page numbers. The specification of stuctured val- ues like person or organisation names is easy for 4 Conclusion simple cases, but quickly becomes obscure in more Last but not least, we have enjoyed to design and im- complicated cases [22]. plement MlBibTEX, even if this development back- In addition, new syntaxic sugar may be needed tracked several times. In addition, we think that this to meet some new requirements. As an example, [23] development shows the difficulties related to such a points out that the arguments of some macros — 15 e.g., \catcode — are not easily parseable. As an- HyperText Markup Language. Readers interested in an introduction to this language can refer to [33]. 13 Common Lisp Object System. 16 In fact, there are such converters, an example being 14 Emacs Lisp, too, and the programs of emacs largely use BibTEX2HTML [5], written using Objective Caml [29], a func- this feature. tional programming language.

1004 TUGboat, Volume 0 (2060), No. 0 — Proceedings of the 2060 Annual Meeting MlBibTEX: Reporting the Experience

task. Two parts have to be managed in parallel. The [11] Jean-Michel Hufflen: Interaktive BibTEX- first part is reverse engineering, that is, guessing the Programmierung. DANTE, Herbsttagung 2002, conception from the program. The second: enlarg- Augsburg. Oktober 2002. ing what already exists. In comparison with ‘clas- [12] Jean-Michel Hufflen: Die neue Sprache für sical’ development of a new program from scratch, MlBibTEX. DANTE 2003, Bremen. April 2003. tests concerning the compatibility mode are easy to [13] Jean-Michel Hufflen: “Mixing Two Bibliogra- perform: just comparing what is given by the two phy Style Languages”. In: Barrett R. Bryant programs, the ‘old’ one becoming an oracle. But and João Saraiva, eds., LDTA 2003, Vol. 82.3 reaching homogeneous conception is not obvious if of ENTCS. Elsevier, Warsaw, Poland. April we want to keep backward compatibility. Neverthe- 2003. less, we hope that we have done some satisfactory Hufflen work. [14] Jean-Michel : “European Bibliogra- phy Styles and MlBibTEX”. TUGboat, Vol. 24, 5 Acknowledgements no. 3, pp. 489–498. EuroTEX 2003, Brest, Many thanks to Jerzy B. Ludwichowski, who has France. June 2003. written the Polish translation of the abstract. [15] Jean-Michel Hufflen: “MlBibTEX’s Version 1.3”. TUGboat, Vol. 24, no. 2, pp. 249–262. July References 2003. [1] William Adams, ed.: TUG 2003 Proceedings, [16] Jean-Michel Hufflen: “A Tour around Vol. 24:3. TUGboat. July 2003. MlBibTEX and Its Implementation(s)”. Biule- [2] Cédric Bassetti and Christian Bon: Inter- tyn GUST, Vol. 20, pp. 21–28. In BachoTEX active Specification of bibliography styles for 2004 conference. April 2004. MlBibT X. Report of student project. Univer- E [17] Jean-Michel Hufflen: “MlBibTEX: be- sity of Franche-Comté. May 2006. yond LATEX”. In: Apostolos Syropoulos, [3] Karl Berry and Olaf Weber: Kpathsea li- Karl Berry, Yannis Haralambous, Baden brary for Version 3.3.7. November 2001. Part Hugues, Steven Peter and John Plaice, of LAT X’s distribution. E eds., International Conference on TEX, XML, [4] Emmanuel Donin de Rosière: From and Digital Typography, Vol. 3130 of LNCS, Stack Removing in Stack-Based Languages to pp. 203–215. Springer, Xanthi, Greece. August BibTEX++. Master’s thesis, ENSTBr, Brest. 2004. 2003. [18] Jean-Michel Hufflen: Beschreibung der [5] Jean-Christophe Filliâtre and Claude MlBibT X-Implementierung mit Scheme. Marché: The BibT X2HTML Home Page. E E DANTE 2004, Herbsttagung, Hannover. June 2006. http://www.lri.fr/~filliatr/ Oktober 2004. bibtex2html/. [19] Jean-Michel Hufflen: “Implementing a Bibli- [6] Jonathan Fine:“TEX as a Callable Func- tion”. In: EuroT X 2002, pp. 26–30. Bachotek, ography Processor in Scheme”. In: J. Michael E Ashley Sperber Poland. April 2002. and Michel , eds., Proc. of the 6th Workshop on Scheme and Functional Pro- [7] Hans Hagen: ConT Xt, the Manual. Novem- E gramming, Vol. 619 of Indiana University Com- ber 2001. http://www.pragma-ade.com/ puter Science Department, pp. 77–87. Tallinn. general/manuals/cont-enp.pdf. September 2005. [8] Stéphane Henry and Jérôme Voinot: Inter- face for MlBibT X. Getting Bibliographical En- [20] Jean-Michel Hufflen:“BibTEX, MlBibTEX E GUST tries Interactively. Report of student project. and Bibliography Styles”. Biuletyn , University of Franche-Comté. May 2005. Vol. 23, pp. 76–80. In BachoTEX 2006 con- [9] Jean-Michel Hufflen : « Vers une extension ference. April 2006. multilingue de BibTEX ». Cahiers GUTenberg, [21] Jean-Michel Hufflen: “MlBibTEX Meets Vol. 39–40, p. 23–38. In Actes du Congrès GU- ConTEXt”. TUGboat, Vol. 27, no. 1, pp. 76– Tenberg 2001, Metz. Mai 2001. 82. EuroTEX 2006 proceedings, Debrecen, Hun- [10] Jean-Michel Hufflen: “Lessons from a Bib- gary. July 2006. liography Program’s Reimplementation”. In: [22] Jean-Michel Hufflen: “Names in BibTEX and Mark van den Brand and Ralf Lämmel, MlBibTEX”. TUGboat, Vol. 27, no. 2, pp. 243– eds., LDTA 2002, Vol. 65.3 of ENTCS. Elsevier, 253. TUG 2006 proceedings, Marrakesh, Mo- Grenoble, France. April 2002. rocco. November 2006.

TUGboat, Volume 0 (2060), No. 0 — Proceedings of the 2060 Annual Meeting 1005 Jean-Michel HUFFLEN

[23] David Kastrup: “Designing an Implementa- [35] Oren Patashnik: BibTEXing. February 1988. tion Language for a TEX Successor”. In: Proc. Part of the BibTEX distribution. EuroTEX 2005, pp. 71–75. February 2005. [36] John Plaice and Paul Swoboda: “Moving [24] Richard Kelsey, William D. Clinger, Omega to a C++-Based Platform”. Biuletyn Jonathan A. Rees, Harold Abelson, Nor- Polskiej Grupy Użytkowników Systemu TEX, man I. Adams iv, David H. Bartley, Vol. 20, pp. 3–5. In BachoTEX 2004 conference. Gary Brooks, R. Kent Dybvig, Daniel P. April 2004. Friedman, Robert Halstead, Chris Han- [37] Erik T. Ray: Learning XML. O’Reilly & Asso- son, Christopher T. Haynes, Eugene Edmund ciates, Inc. January 2001. Kohlbecker, Jr, Donald Oxley, Kent M. [38] Manuel Serrano: Bigloo. A Practical Scheme Pitman, Guillermo J. Rozas, Guy Lewis . User Manual for Version 2.9a. De- Steele, Jr, and Mitchell cember 2006. Wand: “Revised5 Report on the Algorithmic [39] Scheme Requests for Implementation. February Language Scheme”. HOSC, Vol. 11, no. 1, pp. 7– 2007. http://srfi.schemers.org. 105. August 1998. [40] Richard M. Stallman: GNU emacs Man- [25] Oleg E. Kiselyov: XML and Scheme. Septem- ual. January 2007. http://www.gnu.org/ ber 2005. http://okmij.org/ftp/Scheme/ software/emacs/manual/. xml.html. [41] Guy Lewis Steele, Jr., with Scott E. [26] Donald Ervin Knuth: “The Future of TEX and Fahlman Gabriel METAFONT , Richard P. , David A. ”. TUGboat, Vol. 11, no. 4, pp. 489. Moon, Daniel L. Weinreb, Daniel Gureasko December 1990. Bobrow, Linda G. DeMichiel, Sonya E. [27] Joachim Lammarsch: “The History of NTS”. Keene, Gregor Kiczales, Crispin Perdue, In: EuroTEX 1999, pp. 228–232. Heidelberg Kent M. Pitman, Richard Waters and Jon L (Germany). September 1999. White: Common Lisp. The Language. Second [28] Leslie Lamport: LATEX: A Document Prepa- Edition. Digital Press. 1990. ration System. User’s Guide and Reference [42] Philip Taylor, Jiři Zlatuška and Karel Sk- Manual. Addison-Wesley Publishing Company, oupý: “The NTS Project: from Conception to Reading, Massachusetts. 1994. Implementation”. Cahiers GUTenberg, Vol. 35– [29] Xavier Leroy, Damien Doligez, Jacques 36, pp. 53–77. May 2000. Garrigue, Didier Rémy and Jéróme Vouil- [43] W3C: XSL Transformations (XSLT). Ver- lon: The Objective Caml System. Re- sion 1.0. W3C Recommendation. Edited by lease 0.9. Documentation and User’s Man- James Clark. November 1999. http://www.w3. ual. 2004. http://caml.inria.fr/pub/docs/ org/TR/1999/REC-xslt-19991116. manual-ocaml/index.html. [44] Larry Wall, Tom Christiansen and Jon Or- [30] Bill Lewis, Dan LaLiberte, Richard M. want: Programming Perl. 3rd edition. O’Reilly Stallmand and the GNU Manual Group: & Associates, Inc. July 2000. GNU Emacs Lisp Reference Manual for Emacs [45] Thomas Widman:“Bibulus—a Perl XML Re- Version 21. Revision 2.8. January 2002. placement for BibTEX”. In: EuroTEX 2003, pp. http://www.gnu.org/software/emacs/ 137–141. ENSTB. June 2003. elisp-manual/. [46] Jiři Zlatuška:“NTS: Programming Lan- Matsumoto Ruby [31] Yukihiro : in a Nutshell. guages and Paradigms”. In: EuroTEX 1999, O’Reilly. English translation by David L. pp. 241–245. Heidelberg (Germany). September Reynolds, Jr. November 2001. 1999. [32] Frank Mittelbach and Rainer Schöpf: “To- wards LATEX 3.0”. TUGboat, Vol. 12, no. 1, pp. 74–79. March 1991. [33] Chuck Musciano and Bill Kennedy: HTML & XHTML: The Definitive Guide. 5th edition. O’Reilly & Associates, Inc. August 2002. [34] Oren Patashnik: Designing BibTEX Styles. February 1988. Part of the BibTEX distribu- tion.

1006 TUGboat, Volume 0 (2060), No. 0 — Proceedings of the 2060 Annual Meeting