Christof Meigen: Das Dokument ist Programm â Anwendungen von ...
Christof Meigen: Das Dokument ist Programm â Anwendungen von ...
Christof Meigen: Das Dokument ist Programm â Anwendungen von ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
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>