The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

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.220

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2024 Frank Seitz

LICENSE

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