NAME

Quiq::TeX::Code - Generator für TeX Code

BASE CLASS

Quiq::Hash

DESCRIPTION

Ein Objekt der Klasse repräsentiert einen TeX Code-Generator. Mit den Methoden der Klasse kann aus einem Perl-Programm heraus TeX-Code erzeugt werden.

METHODS

Konstruktor

new() - Instantiiere TeX Code-Generator

Synopsis

    $t = $class->new;

Description

Instantiiere einen TeX Code-Generator und liefere eine Referenz auf dieses Objekt zurück.

Objektmethoden

c() - Erzeuge TeX Codezeile

Synopsis

    $code = $t->c($fmt,@args,@opts);

Arguments

$fmt

Codezeile mit sprintf Formatelementen.

@args

Argumente, die für die Formatelemente in $fmt eingesetzt werden. Kommt eine Arrayreferenz vor, wird diese zu einem kommaseparierten String expandiert.

Options

-nl => $n (Default: 1)

Beende den Code mit $n Zeilenumbrüchen.

-pnl => $n (Default: 0)

Beginne den Code mit $n Zeilenumbrüchen.

Returns

TeX Code (String)

Description

Erzeuge eine TeX Codezeile und liefere das Resultat zurück.

Example

Makro mit Option und Parameter

    $documentClass = 'article';
    $fontSize = '12pt';
    ...
    $t->c('\documentclass[%s]{%s}',$fontSize,$documentClass);

produziert

    \documentclass[12pt]{article}\n

Expansion von Array-Parameter

    my @opt;
    push @opt,'labelsep=colon';
    push @opt,'labelfont=bf';
    push @opt,'skip=1.5ex';
    $t->c('\usepackage[%s]{caption}',\@opt);

produziert

    \usepackage[labelsep=colon,labelfont=bf,skip=1.5ex]{caption}

ci() - Erzeuge TeX Code inline

Synopsis

    $code = $t->ci($fmt,@args,@opts);

Arguments

$fmt

Codezeile mit sprintf Formatelementen.

@args

Argumente, die in den Formatstring eingesetzt werden. Kommt unter den Argumenten eine Arrayreferenz vor, wird diese zu einem kommaseparierten String expandiert.

Options

-nl => $n (Default: 0)

Beende den Code mit $n Zeilenumbrüchen.

Returns

TeX Code (String)

Description

Erzeuge TeX Code und liefere das Resultat zurück. Die Methode ist identisch zu Methode $t->c(), nur dass per Default kein Newline am Ende des Code hinzugefügt wird. Das i im Methodennamen steht für "inline".

Example

Vergleich von $t->ci(), sprintf(), $t->c()

    $t->ci('\thead[%sb]{%s}','c','Ein Text');

ist identisch zu

    sprintf '\thead[%sb]{%s}','c','Ein Text';

ist identisch zu

    $t->c('\thead[%sb]{%s}','c','Ein Text',-nl=>0);

und produziert

    \thead[cb]{Ein Text}

macro() - Erzeuge TeX Macro

Synopsis

    $code = $t->macro($name,@args);

Options

-nl => $n (Default: 1)

Newline, füge $n Zeilenumbrüche am Ende hinzu.

-o => $options
-o => \@options

Füge eine Option/Optionsliste [...] hinzu. Ein Array wird in eine kommaseparierte Liste von Werten übersetzt.

-p => $parameters
-p => \@parameters

Füge einen Parameter/eine Parameterliste {...} hinzu. Ein Array wird in eine kommaseparierte Liste von Werten übersetzt.

-pnl => $n (Default: 0)

Preceeding newline, setze $n Zeilenumbrüche an den Anfang.

Description

Erzeuge ein TeX Macro und liefere den resultierenden Code zurück. Diese Methode zeichnet sich gegenüber den Methoden $t->c() und $t->ci() dadurch aus, dass undefinierte/leere Optionen und Parameter vollständig weggelassen werden.

Examples

Macro ohne Argumente

    $t->macro('\LaTeX');

produziert

    \LaTeX

Kommando mit undefiniertem Argument

    $t->macro('\LaTeX',-p=>undef);

produziert

    \LaTeX

Macro mit Leerstring-Argument

    $t->macro('\LaTeX',-p=>'');

produziert

    \LaTeX{}

Macro mit leerer Optionsliste und Parameter

    @opt = ();
    $t->macro('\documentclass',-o=>\@opt,-p=>'article');

produziert

    \documentclass{article}

Macro mit Opton und Parameter

    $t->macro('\documentclass',
        -o => '12pt',
        -p => 'article',
    );

produziert

    \documentclass[12pt]{article}

Macro mit Parameter und mehreren Optionen (Variante 1)

    $t->macro('\documentclass',
        -o => 'a4wide,12pt',
        -p => 'article',
    );

produziert

    \documentclass[a4wide,12pt]{article}

Macro mit Parameter und mehreren Optionen (Variante 2)

    @opt = ('a4wide','12pt');
    $t->macro('\documentclass',
        -o => \@opt,
        -p => 'article',
    );

produziert

    \documentclass[a4wide,12pt]{article}

comment() - Erzeuge TeX-Kommentar

Synopsis

    $code = $l->comment($text,@opt);

Options

-nl => $n (Default: 1)

Füge $n Zeilenumbrüche am Ende hinzu.

-pnl => $n (Default: 0)

Setze $n Zeilenumbrüche an den Anfang.

Description

Erzeuge einen TeX-Kommentar und liefere den resultierenden Code zurück.

Examples

Kommentar erzeugen

    $l->comment("Dies ist\nein Kommentar");

produziert

    % Dies ist
    % ein Kommentar

modifyLength() - Wende Berechnung auf Länge an

Synopsis

    $newLength = $l->modifyLength($length,$expr);

Arguments

$length

Eine einfache TeX-Länge. Beispiel: '1ex'.

$expr

Ein arithmetischer Ausdruck, der auf den Zahlenwert der Länge angewendet wird. Beispiel: '*2' (multipliziere Länge mit 2).

Returns

TeX-Länge (String)

Description

Wende den arithmetischen Ausdruck $expr auf TeX-Länge $length an und liefere das Resultat zurück. Leerstring oder undef werden unverändert geliefert.

Example

    $l->modifyLength('1.5ex','*1.5');
    # 2.25ex

toLength() - Wandele Länge in TeX-Länge

Synopsis

    $length = $this->toLength($val);

Arguments

$val

Länge, die in die TeX-Länge umgerechnet wird.

Returns

TeX-Länge (String)

Examples

Keine Angabe:

    $class->toLength(undef);
    # undef

Angabe in Pixeln ohne Einheit:

    $class->toLength(100);
    # '75pt'

Angabe in Pixeln mit Einheit:

    $class->toLength('100px');
    # '75pt'

Alle anderen Werte bleiben unverändert:

    $class->toLength($val);
    # $val

VERSION

1.134

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2019 Frank Seitz

LICENSE

This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.