19.04.2013 Aufrufe

Christof Meigen: Das Dokument ist Programm – Anwendungen von ...

Christof Meigen: Das Dokument ist Programm – Anwendungen von ...

Christof Meigen: Das Dokument ist Programm – Anwendungen von ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

Übersicht<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong><br />

Verwendung <strong>von</strong> Bibliotheken mit LuaT E X<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong><br />

halle23, Leipzig<br />

8. März 2012<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

Übersicht<br />

Lua als Sprache in TeX<br />

Allgemeines zu Lua<br />

Lua-Bibliotheken<br />

Anwendungsbeispiele<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

Übersicht<br />

Worum geht’s nicht<br />

Dinge, die in TeX möglich waren, einfacher zu<br />

programmieren<br />

Neuerungen <strong>von</strong> LuaTeX durch “Öffnung” <strong>von</strong><br />

TeX-Routinen für Lua<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

N/S/O/W<br />

Manchmal fühlt man sich klein. . .<br />

Designer: Adobe CS / Quark XPress, alles andere <strong>ist</strong><br />

Kinderkram<br />

Büro: Microsoft Word, alles andere bringt nur Ärger<br />

<strong>Programm</strong>ierer: PDF-Erstellung? Und ich soll eine 2 GB<br />

große auf Pascal basierende Software aus den 80ern<br />

installieren?<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

N/S/O/W<br />

Dabei <strong>ist</strong> Leipzig in T E X-Hand: Nord<br />

Hotel de Saxe, Gohliser<br />

Straße<br />

Bridge-Club Leipzig<br />

DBV-Software zur Erstellung<br />

<strong>von</strong> Broschüren, Kartenverteilungsdiagrammen,<br />

Urkunden,<br />

...<br />

alles in TeX<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

N/S/O/W<br />

Süd<br />

Filmgalerie Alpha60,<br />

Karl-Liebknecht-Straße<br />

Belegdruck, Labels für Filme<br />

250’000 TeX-<strong>Dokument</strong>e seit<br />

Gründung<br />

VideoLex-Katalog als<br />

1000-seitiges Buch mit 15’000<br />

Bildern<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

N/S/O/W<br />

West<br />

mærzgalerie, Alte Spinnerei<br />

Katalog-Erstellung anhand<br />

<strong>von</strong> LAT E X-Vorlagen aus einer<br />

Bilddatenbank<br />

Über 100 individuelle<br />

Kataloge<br />

Früher: 1 Vormittag in<br />

InDesign, jetzt wenige<br />

Mausklicks mit LAT E X<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

N/S/O/W<br />

Ost<br />

CrescNet, ehem. Oststraße<br />

Kinderärzte-Netzwerk und<br />

Anbieter für<br />

Serienbriefe,<br />

Barcode-Abreißtickets,<br />

Perzentilen für Kopfumfang,<br />

Wachstumsgeschwindigkeit<br />

etc.<br />

580’000 Kinder in der<br />

Datenbank<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

Lua-Einführung<br />

Lua – Eine Scriptsprache<br />

Ähnlich wie Ruby, Perl,<br />

Python, PHP<br />

Sehr klein, sehr kons<strong>ist</strong>ent<br />

Sehr gut in andere<br />

<strong>Programm</strong>e als<br />

Erweiterungssprache<br />

integrierbar<br />

Schnell: sin-Berechnung in<br />

Lua über 1000x schneller als<br />

mit TikZ (das <strong>ist</strong> 1s vs. 20 min)<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

Lua-Einführung<br />

Wie sieht es aus?<br />

Funktionen mit Parametern<br />

Fallunterscheidungen<br />

Funktionen sind “first class<br />

citizens”<br />

OOP, Arrays, Namespaces: Alles<br />

mit Hashes (in Lua: tables)<br />

Übliche numerische und<br />

String-Funktionen<br />

flexible for-Schleife<br />

x=function(a,b)<br />

return a(b)<br />

end<br />

io.write(x(math.sin,1))<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

Lua-Einführung<br />

Ein minimales Lua-<strong>Programm</strong><br />

io.write("Hello TeX")<br />

Ok, das <strong>ist</strong> soooo 80er<br />

Ein bißchen schicker darf es<br />

schon sein<br />

Gibt es eine Lua-Schnittstelle<br />

für eine Fensterbibliothek, so<br />

wie Tcl/Tk oder Qt oder Gtk?<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

luarocks<br />

Bibliotheken einbinden<br />

Für (fast) jede Grafikbibliothek gibt es Lua-Anbindungen<br />

Nehmen wir mal wxWindows, eine plattformübergreifende<br />

Bibliothek<br />

die Bibliothek laden<br />

ein Fenster definieren<br />

das Fenster angezeigen<br />

die Kontrolle zur<br />

Behandlung <strong>von</strong><br />

Eingaben an die<br />

Bibliothek übergeben<br />

require("wx")<br />

frame = wx.wxFrame(wx.NULL,<br />

wx.wxID_ANY,<br />

"Hallo Dante!",<br />

wx.wxDefaultPosition,<br />

wx.wxSize(300,50))<br />

frame:Show(true)<br />

wx.wxGetApp():MainLoop()<br />

io.write("Auf Wiedersehen")<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

luarocks<br />

<strong>Das</strong> angezeigte Fenster<br />

<strong>Programm</strong> startet<br />

Fenster wird angezeigt<br />

Wartet auf Eingabe (Fenster schließen)<br />

Dann Ausgabe “Auf Wiedersehen” und <strong>Programm</strong>ende<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

luarocks<br />

Bibliotheken einbinden = Dateien ausführen<br />

Ok, was macht das require("wx")?<br />

Es muß die Bibliothek wxLua installiert sein<br />

Es muß der LD LIBRARY PATH und/oder LUA PATH bzw<br />

die Lua-Variable package.path so gesetzt sein, dass die<br />

Bibliothek gefunden wird<br />

Dann wird einfach die Bibliothek (wx.so oder wx.dll oder<br />

wx.lua) geladen<br />

Diese Bibliotheken sind einfach Sammlungen <strong>von</strong><br />

Funktionen und Deklarationen, ähnlich wie Packages unter<br />

LAT E X<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

luarocks<br />

Bibliotheken finden<br />

CTAN war Vorreiter für zentrale Archive <strong>von</strong><br />

Zusatz-Bibliotheken wie CPAN (Perl), CRAN<br />

(Stat<strong>ist</strong>ik-Software R) u.a.<br />

Lua(“CTAN”)=”LuaRocks”<br />

luarocks-Befehl sucht und installiert Bibliotheken<br />

Mehr Bibliotheken (ohne automatisches Einrichten):<br />

luaforge.net, lua-users.org<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

luarocks<br />

LuaRocks in Aktion<br />

cl@bird:˜/dante/lua-oauth$ luarocks search crypto<br />

Search results:<br />

===============<br />

luacrypto<br />

0.2.0-2 (rockspec) - http://luarocks.org/repositories/r<br />

cl@bird:˜/dante/lua-oauth$ sudo luarocks install luacrypto<br />

Installing http://luarocks.org/repositories/rocks/luacryp<br />

Archive: /tmp/luarocks_luarocks-rock-luacrypto-0.2.0-2-6<br />

inflating: luacrypto-0.2.0-2.rockspec<br />

extracting: luacrypto-0.2.0.tar.gz<br />

gcc -O2 -I/usr/include/lua5.1 -c src/lcrypto.c -o src/lcr<br />

gcc -shared -o crypto.so -L/usr/local/lib src/lcrypto.o -<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

Updating manifest for /usr/local/lib/luarocks/rocks<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

Grafische Oberfläche<br />

Lua-Integration in T E X<br />

LuaT E X hat einen eingebauten Lua-Interpreter<br />

Lua-Code in T E X-<strong>Dokument</strong>en mit \directlua-Befehl<br />

oder luacode-Umgebung<br />

In Lua stehen viele Funktionen zum Auslesen und<br />

Manipulieren <strong>von</strong> T E X-Daten zur Verfügung<br />

Am einfachsten: tex.print(x): Fügt x als Zeichenkette in<br />

das T E X-<strong>Dokument</strong> ein<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

Grafische Oberfläche<br />

Unser erstes LuaT E X-Doku<strong>Programm</strong><br />

Wir nutzen erstmal LAT E X<br />

Der Lua-Code wird ausgeführt<br />

Resultat <strong>ist</strong> ein <strong>Dokument</strong> mit dem Inhalt “Hallo TeX-Welt”<br />

\documentclass{article}<br />

\begin{document}<br />

\directlua{tex.print("Hallo TeX-Welt")}<br />

\end{document}<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

Grafische Oberfläche<br />

Lua in einer Extra-Datei/Umgebung<br />

hello.lua:<br />

In \directlua-Code werden zuerst TeX-Makros<br />

expandiert<br />

Bessere Trennung <strong>von</strong> Inhalt/<strong>Programm</strong><br />

Editor-Support<br />

tex.print("Hallo TeX-Welt")<br />

hello.tex:<br />

\documentclass{article}<br />

\begin{document}<br />

\directlua{require("hello.lua")}<br />

\end{document}<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

wxWindows<br />

Wenn wir sowieso schon eine Extra-Datei laden. . .<br />

Ändern wir einfach mal hello.lua in den obigen Code mit<br />

wxWindows<br />

Was passiert (wenn alle Pfade richtig gesetzt sind?)<br />

Weil in LuaT E X ein vollständiger Lua-Interpreter integriert<br />

<strong>ist</strong>, und weil wir wxWindows für Lua installiert haben, kann<br />

nur eines passieren. . .<br />

Es wird das Fenster geöffnet, LuaT E X “hängt” bis das<br />

Fenster geschlossen wird, dann wird ein leeres <strong>Dokument</strong><br />

erzeugt<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

wxWindows<br />

Warum <strong>ist</strong> das so cool?<br />

Bei jedem T E X-Lauf ein<br />

Fenster anzeigen, das<br />

man wegklicken muß?<br />

Was soll das? Wer<br />

sollte sowas wollen?<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

wxWindows<br />

Eine grafische Oberfläche zur <strong>Dokument</strong>erstellung<br />

Formulare, Vorlagen im Unternehmen:<br />

LuaT E X/wxWindows auf jedem Rechner<br />

Anpassbare T E X-Vorlagen als simple T E X-Datei<br />

Mit Mausklick starten, grafisch Eingaben tätigen, PDF<br />

erstellen<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

wxWindows<br />

Simples Beispiel<br />

\documentclass{article}<br />

\directlua{require("simpleui.lua")}<br />

\usepackage{\ChoicewxL<strong>ist</strong>Box}<br />

\usepackage{color}<br />

\begin{document}<br />

{\Huge\color{\ChoicewxRadioBox} As you like it!}<br />

\end{document}<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

wxWindows<br />

Und der entsprechende Lua-Code (50%)<br />

require("wx")<br />

function HandleEvents(event)<br />

local name = event:GetEventObject():DynamicCast("wxWindow"):GetName()<br />

tex.print(string.format(<br />

"\\global\\def\\Choice%s{%s}", name, event:GetString()))<br />

end<br />

function main()<br />

frame = wx.wxFrame(wx.NULL, wx.wxID_ANY,<br />

"Erstellen Sie Ihr PDF-<strong>Dokument</strong> mit LuaTeX",<br />

wx.wxDefaultPosition, wx.wxSize(635, 350))<br />

local choices = {"blue", "red", "green"}<br />

local radioBox = wx.wxRadioBox(frame, wx.wxID_ANY,<br />

"Farbe",wx.wxDefaultPosition, wx.wxDefaultSize,<br />

choices, 1, wx.wxRA_SPECIFY_ROWS)<br />

frame:Connect(wx.wxID_ANY,<br />

wx.wxEVT_COMMAND_RADIOBOX_SELECTED, HandleEvents)<br />

end<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

wxWindows<br />

. . . im Detail<br />

function HandleEvents(event)<br />

local name = event:<br />

GetEventObject():<br />

DynamicCast("wxWindow"):<br />

GetName()<br />

tex.print(string.format(<br />

"\\global\\def\\Choice%s{%s}",<br />

name, event:GetString()))<br />

end<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

wxWindows<br />

Und go!<br />

luatex startet<br />

zeigt das Fenster an, “hängt”<br />

erstellt das PDF-<strong>Dokument</strong> nach Vorgabe<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

Datenbankzugriff<br />

Weitere Bibliotheken<br />

Nochmal: Lua <strong>ist</strong> eine moderne <strong>Programm</strong>iersprache, mit<br />

Bibliotheken für fast alles, <strong>von</strong> OAuth<br />

Online-Athentifizierung über 3D-Grafik bis zu<br />

Datenbankanbindungen<br />

Database-Publishing: Weites Feld, umfangreiche Lösungen<br />

Manchmal aber einfach: Eine bestimmte Tabelle dynamisch<br />

in T E X einfügen<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

Datenbankzugriff<br />

lua-mysql<br />

require "luasql.mysql"<br />

env = assert (luasql.mysql())<br />

con = assert (env:connect("dbv", "dante", "dante"))<br />

con:execute("set names utf8")<br />

function jubilaeum(jahr)<br />

for name, ort in rows(con,<br />

string.format("select name, city from clubs " ..<br />

" where year(current_date) - " ..<br />

" year(established_on)=%s " ..<br />

" order by city, name",<br />

jahr)) do<br />

print(string.format("%s & %s \\\\", name, ort))<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> tex.print(string.format("%s & %s \\\\", name, halle23, ort)) Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

Datenbankzugriff<br />

Und unser T E X-<strong>Dokument</strong><br />

\directlua{require("db.lua")}<br />

\def\JubilaeumsTabelle#1{<br />

\centerline{\Large Glückwunsch zum #1.ten Jubiläum!}<br />

\begin{center}<br />

\begin{tabular}{p{9cm}p{7cm}}<br />

\directlua{jubilaeum(#1)}<br />

\end{tabular}<br />

\end{center}}<br />

\JubilaeumsTabelle{50}<br />

\JubilaeumsTabelle{17}<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

Datenbankzugriff<br />

Und das Ergebnis<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

Datenbankzugriff<br />

Die Summe der Teile<br />

Im Zusammenhang mit dem Vorigen:<br />

Grafische Oberfläche + Datenbankzugriff<br />

Zusammen in weniger als 50 Zeilen lua<br />

Dynamische <strong>Dokument</strong>e für den unbedarften Nutzer<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

Online-Zugriff<br />

Wo liegen noch Daten?<br />

Tabellen. . . Excel?<br />

Kein Problem mit Lua: luacom zur<br />

direkten Kommunikation mit Excel<br />

. . . aber nur Windows<br />

<strong>ist</strong> nicht die Zukunft. . . das<br />

Web. . . die Cloud?<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

Online-Zugriff<br />

Lua online<br />

luasocket integriert in LuaT E X(keine Extra-Installation nötig)<br />

kann beliebige Inhalte über HTTP abrufen<br />

Google-Webseite abrufen:<br />

local http = require("socket.http")<br />

local data = http.request("http://google.de")<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

Online-Zugriff<br />

Google Docs<br />

Google u.a. bieten Online-Tabellenkalkulation,<br />

Textverarbeitung etc<br />

Abruf der Daten in XML-Form möglich<br />

Wir brauchen noch einen XML-Parser<br />

luarocks to the rescue! (xmlreader)<br />

require("xmlreader")<br />

function tabledata(key)<br />

local data = http.request(<br />

"https://spreadsheets.google.com/feeds/cells/" ..<br />

key ..<br />

"/od6/public/basic")<br />

local r = xmlreader.from_string(data)<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

Online-Zugriff<br />

Online Daten einfügen<br />

Smartphones gezückt ⇒ http://goo.gl/biRtd<br />

Online-Umfrage füllt automatisch die Online-Tabelle<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

Online-Zugriff<br />

Tabelle aus den XML-Daten auslesen<br />

function print_table(key, beginCol, endCol)<br />

local data = tabledata(key)<br />

local ascii<br />

local nrow = 2 -- Titelzeile überspringen<br />

local found = true<br />

while found do<br />

found = false<br />

for ascii=beginCol, endCol do<br />

local cellname = string.char(64 + ascii) .. tostring(nrow)<br />

local val = data[ cellname ]<br />

if not(val) then<br />

break<br />

end<br />

found = true<br />

tex.print(val)<br />

if (ascii < endCol) then<br />

tex.print("&")<br />

end<br />

end<br />

nrow = nrow + 1<br />

tex.print("\\\\")<br />

end<br />

end<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

Online-Zugriff<br />

Live-Demo (toi toi toi)<br />

\documentclass{article}<br />

\usepackage[utf8]{luainputenc}<br />

\begin{document}<br />

\directlua{require("tab.lua")}<br />

\begin{tabular}{lll}<br />

Name & \TeX & Tagung\\<br />

\directlua{print_table("0Apkn6J-K7aqzdGRfRmNWdzcyeGVhYV<br />

\end{tabular}<br />

\end{document}<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

Wozu, weshalb. . .<br />

Was haben wir getan?<br />

Lua <strong>ist</strong> eine “normale”, verbreitete <strong>Programm</strong>iersprache,<br />

die in LuaT E X integriert <strong>ist</strong><br />

Bibliotheken für Lua gibt es für fast alles, und sie können<br />

einfach genutzt werden<br />

Hunderte Bibliotheken direkt herunterladbar und in LuaT E X<br />

nutzbar:<br />

luarocks.org<br />

luaforge.net<br />

lua-users.org<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

Wozu, weshalb. . .<br />

Was haben wir nicht getan?<br />

Keine ordentliche Diskussion der Integration Lua↔T E X<br />

Es gibt viel mehr als tex.print<br />

Insbesondere ConT E Xt stellt alle möglichen<br />

Funktionalitäten als Lua-Schnittstelle zur Verfügung, z. B.<br />

zur Tabellenerstellung<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>


Prolog Was <strong>ist</strong> Lua Bibliotheken in Lua Lua und T E X Grafische Oberfläche Daten dynamisch holen Online-Zugriff Epilog<br />

Wozu, weshalb. . .<br />

Vielen Dank (Lua + T E X)<br />

<strong>Chr<strong>ist</strong>of</strong> <strong>Meigen</strong> halle23, Leipzig<br />

<strong>Das</strong> <strong>Dokument</strong> <strong>ist</strong> <strong>Programm</strong>

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!