x davor, 3 dahinter

LaTeX3 dieser Name ist seit der Veröffentlichung von LaTeX2e ein Gesepenst, das immer mal wieder durch die wechselnden Mailinglists, Foren etc, schwirrt. Aber seit ein paar Jahren ist die Entwicklung des Nachfolgers von LaTeX2e tatsächlich im Gange und Mittlerweile kann man wirklich damit arbeiten. Joseph Wright zum Beispiel  hat große Teile seines bekannten und allseits beliebten Paketes siunitx auf l3 aufgebaut. Er beschreibt auch immer wieder kleine Einführungen in seinem Blog.  Natürlich ist l3 bei weitem noch nicht fertig, es harmoniert aber sehr gut mit LaTeX2e und kann praktisch parallel verwendet werden.
Einen guten Einstieg bekommt man neben den schon genannten Blog durch die mitgelieferte Dokumentation: texdoc -s expl3  hier lohnt sich auf jeden Fall ein Blick in die Dokumentation mit dem Namen interface3 die eigentlich alle Features von l3 abdeckt.

Absolut gelungen ist Paket xparse welches es dem Programmierer sehr leicht macht End-User Befehle anzulegen. Ein umständliches selbstgeschriebenes Argumenten Parsing entfällt.

    \NewDocumentCommand\mycommand{moos}{}

definiert zum Beispiel einen Befehl mit einem obligatorischen Argument in {} zwei optionalen in [] und einem Stern (sog. “starred commands”). Auf diese Argumente kann dann mit #1 #2 usw. zugegriffen werden.

Sehr schön ist auch das key=value Optionen Parsing in z.B. Paketoptionen (oder auch Klassen oder Befehlen). Das System hat gewisse Ähnlichkeit mit den pgfkeys ist aber derart leicht zu bedienen, dass es fast schon Spaß macht neue Optionen ein zu pflegen. Kleines Beispiel:

\keys_define:nn {modul}{
	key1 .bool_set:N=\g_prev_defined_bool,
	key1.default:n = false,
	key2 .code:n	=\cs_set:Npn\g_prev_defined_cs{ #1 },
}

Damit richte ich zwei Optionen ein, einmal eine Boolsche die anfänglich auf false steht und bei der, wenn durch den User angegeben wird key1=true, die boolsche Variable \g_prev_defined_bool auf true gestellt wird. Bei key2 wird das, was nach dem Gleichheitszeichen kommt, in die rechte Seite des Macros \g_prev_defined_cs geschrieben. (\cs_set:Npn entspricht etwa \def, es belegt ein Macro neu, initialisiert es aber nicht.)

Auch toll sind die vielen eingebauten Conditionals also die if-Abfragen. TeX kenn selbst ja nur ein paar basis Abfragen wie \ifnum oder \ifx. Wollte man bisher Strings vergleichen oder andere höhere Aufgaben erledigen so musste man sich die if-Schleifen jeweils selbst aus den Basis-Ifs bauen oder das Paket etextools bemühen (das eTeX benötigt). Das ist jetzt sozusagen im l3 Kern drin.

Das neue Konzept der Token Lists erklärt Joseph Wright in seinem Blog  sehr gut. Zumindest mir macht die Token List einiges einfacher, vorallem weil LaTeX 3 viele eingebaute Funktionen hat um diese tls zu verwenden. Manche Programmierer mögen das Konzept der nicht indizierten arrays in LaTeX etwas vermisst haben, eine tl ist im Prinzip etwas ähnliches.

Kurz um ich glaube dass LaTeX3 auf einem guten Weg ist und zumindest mir schon richtig  Spaß macht.

Ach ja und Klassen Autoren sollten sich xtemplate mal anschauen. Das ist (zumindest) der Versuch ein globales (einfaches) System zur Kontrolle des Aussehens und der typographischen Parameter zu etablieren, was bisher entweder jede Klasse selbst macht (man denke an das KOMASkript oder memoir ) oder dem Benutzer abverlangt in die Tiefen von LaTeX2e vorzudringen (wie z.B. die Standard-Klassen). Das ist zumindest ein löblicher Ansatz.

Dieser Beitrag wurde unter (La)TeX abgelegt und mit , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

4 Kommentare zu x davor, 3 dahinter

  1. cgnieder says:

    Drei Anmerkungen:
    1. der Nebensatz auf etoolbox deutet an, dass e-TeX keine Voraussetzung für l3 wäre. Tatsächlich benötigt expl3 ebenfalls e-TeX.

    2. Von LaTeX3 ist expl3 nur die unterste Ebene, die Programmiersprache. Wenn ich es richtig verstanden habe, dienen alle l3packages dazu, verschiedene l3-Konzepte schon für 2e verfügbar zu machen. Das fertige LaTeX3 wird eines Tages allerdings nicht mehr mit 2e kompatibel sein, was schon alleine durch die neue Output Routine unmöglich wird.

    3. \cs_set:Npn\g_prev_defined_cs entspricht übrigens nicht der expl3-Konvention. Entweder \tl_gset:Nn\g_prev_defined_tl oder \cs_set:Npn\prev_defined:, beide eventuell mit dem __ Marker für interne Variable/Funktionen.

    Grüße,
    Clemens

  2. Tobias says:

    Naja das mit der Kompatibilität liegt ja auch daran, dass l3 noch sehr viele Dinge 2e überlassen muss…
    Was die Namenskonvention anbelangt, ist es natürlich sehr hilfreich so was festzulegen, noch schöner wärs wenn der Compiler das auch erzwingen würde. Wie das umsetzbar wäre ist mir allerdings ein Rätsel. (Also umsetzbar ohne die TeX Maschine dahingehend umzubauen).

    • cgnieder says:

      Sicher. Außerdem ist das „l3 in 2e“ auch ein guter Test, wie die Konzepte funktionieren und angenommen werden.

      Ich bezweifle, dass erreicht werden kann, das der Kompiler die Namenskonvention erzwingen kann. Das LaTeX3-Team versucht allerdings immer wieder (im eigenen Code und v.a. in den Dokumentationen) darauf zu verweisen, wie man sie anwenden sollte. Hier fehlt aber meines Erachtens noch ein guter Guide. Schön zu sehen sind sie jedenfalls in Frank Mittelbachs Antworten auf TeX.sx, zum Beispiel hier: Making a zip macro.

      Hat Dein Blog eigentlich die Möglichkeit, eine Benachrichtigung zu verschicken, wenn eine Antwort auf einen Kommentar gegeben wird?

      • Tobias says:

        Ähmm… email Benachrichtigungen kann die Site momentan noch nicht, war bisher auch nicht nötig. Das ist aber sicher was was man mal einbauen kann. (Ich habe jetzt auch wieder etwas mehr Zeit.) Bis dahin muss ich leider auf den RSS-Feed verweisen.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Required fields are marked *

*

You may use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>