Experimental Packages Demonstrating A Possible LaTeX3 Programming Convention ======================================== 2008/08/05 WHERE TO GET IT --------------- The files in this distribution represent a snapshot of selected files from the Subversion (SVN) repository of the LaTeX3 Project. To obtain current versions of the files, visit which contains further instructions. OVERVIEW -------- The files of the expl3 bundle provide a low-level API for TeX programmers with special syntax conventions, completely separating it from document level syntax. Hence, the commands provided are not intended for use at the document level nor for use in describing design layouts in document class files. This API provides the foundation on which the LaTeX3 kernel and other advanced extensions are built. Special care has been taken so that they can be used within a LaTeX2e context as regular packages. While the existing code is approaching a stable state, we cannot guarantee that names of packages or commands they define will not change. This is also related to the history of the code: It has been developed over time and has been used in previous versions for prototypes implementations, experiments, etc. It may therefore occasionally contain references to parts that are at present not distributed. THE GUILTY PERSONS ------------------ Frank Mittelbach, Denys Duchier, Johannes Braams, Michael Downes, David Carlisle, Alan Jeffrey, Chris Rowley, Rainer Schoepf Javier Bezos, Morten Hoegholm, Thomas Lotze DISCUSSION ---------- Discussion concerning the approach, suggestions for improvements, changes, additions, etc. should be addressed to the list LATEX-L. You can subscribe to this list by sending mail to listserv@urz.uni-heidelberg.de with the body containing subscribe LATEX-L BUGS ---- If you find a real bug that makes a package stop working you can report it via the standard LaTeX bug reporting mechanism of the LaTeX distribution (see bugs.txt there) using the category "Experimental LaTeX kernel". However please do *not* use this method for suggestions / comments / improvements / etc. For this the list LATEX-L should be used instead. Also please don't expect these package to work with *any* code that floats around in the LaTeX2e world. :-) MANIFEST -------- The following packages are in this release: l3names ======= Documents the general naming scheme, and gives new names to all the TeX primitives. If this package is used with the option [removeoldnames] then the original TeX primitive names (\hbox, \def, ...) are made *undefined* and so free to be defined for other purposes if needed. Of course this breaks almost all existing LaTeX2 code, but it may be used for testing purposes, see test2.tex. The option removeoldnames has been disabled temporarily. l3basics ======== Some basic definitions that are used by the other packages. l3chk ===== Functions that check definitions. (Comparable to LaTeX2's \newcommand/\renewcommand.) l3alloc ======= Generic functions for allocating registers. l3toks ====== TeX's token registers. (Can be compiled with checking enabled) l3tlp ===== Token List Pointers. A basic LaTeX3 datatype for storing token lists. (These are essentially macros with no arguments.) The module also provides functions for arbitrary token lists. (Package can be compiled with checking enabled.) l3expan ======= The argument expansion module. One of the main features of the language proposed here is a systematic treatment of the handling of argument expansion. The basic functions for preprocessing command arguments are defined here. l3quark ======= A `quark' is a command that is defined to expand to itself. So it may not be directly used (it would generate an infinite loop) but has many uses as special markers within LaTeX code. l3seq ===== A module implementing the basic list and stack datatypes. l3clist ======= A module implementing the handling of comma separated lists l3prop ====== Property lists are the datatype for handling key/value assignments. l3int ===== Integer and fake integer registers. With eTeX/Omega becoming more and more accessible this module is, at least in parts only of historical significance. (Can be compiled with checking enabled) l3num ===== Storing numbers as token-lists in macros l3skip ====== Dealing with length registers l3precom ========= Low-level pointer-related code, with further checking and tracing. l3io ==== Low-level input and ouput. l3prg ===== Experimental control structures. This covers booleans and various other code. l3box ===== Low level box handling code l3token ===== Functions that investigate tokens and determine of which categories they are. For instance, is the token in question expandable or not? Is it a macro taking arguments? Also functions for peeking ahead in the token stream. l3xref ===== Module providing the low-level interface for cross references. This module also contains a test file which is generated along with the package. l3messages ===== Module providing a new mechanism to provide longer warning and error messages based on storing the messages in external files. l3calc ===== Module for using infix notation for the built-in register types (lengths and counters). l3keyval ===== Module for extracting data from a key=val list for further processing. ===================================================================== Install file ============= l3.ins ====== Process with plain TeX or LaTeX2e to generate the experimental packages. ===================================================================== Experimental LaTeX3 Format ========================== l3vers.dtx ========== This file contains the version information and other release related coding. l3final.dtx =========== This file is reserved for the last minute coding for producing a format (such as the dump instruction). source3.tex =========== Run this file with pdfLaTeX in extended mode: pdflatex "*source3.tex" to produce the documentation. Doing this will produce three extra files (source3.ist, l3doc.cfg and l3full.cfg). The first of these is a style file for makeindex; the others or configuration files for the documentation class. If you want to full documentation including the code listings than rename l3full.cfg to l3doc.cfg and run LaTeX again. Alternatively, run (in extended mode) pdflatex "\PassOptionsToClass{full}{l3doc}\input{source3}" After that run makeindex to produce the index, like so: makeindex -s source3.ist source3 and rerun LaTeX. l3format.ins ============ Process with plain TeX or LaTeX2e to generate the experimental format file lbase.ltx and its companion lbase.ini. The run pdfetex --ini "*lbase.ini" to produce the experimental format. ===================================================================== Test Files ========== Two test files show the expansion module at work. test1.tex ========= Test document showing the expansion module at work. test2.tex ========= The same test as the file test1, but this time the l3names package is loaded with [removeoldnames]. This is useful for testing, but as it breaks all LaTeX2 code, it is not so useful for documents. (For example {document} would generate an error.) In this mode \RequirePackage may be used to load further packages, as demonstrated in this file, but any other LaTeX2 command is likely to fail. The option removeoldnames has been disabled temporarily and so this test file is of limited use. test3.tex ========= This tests the io and precomp modules. ===================================================================== --- Copyright 1998 -- 2008 The LaTeX3 Project. All rights reserved ---