1 speedata Publisher a different approach to typesetting using LuaTEX TEX Users Group online conference July 24-26, 2020 Patrick Gundlach gundlach@speedata.de @speedata TUG 2020 speedata GmbH Berlin, Germany
A presentation at TUG 2020 online conference in July 2020 in by speedata
1 speedata Publisher a different approach to typesetting using LuaTEX TEX Users Group online conference July 24-26, 2020 Patrick Gundlach gundlach@speedata.de @speedata TUG 2020 speedata GmbH Berlin, Germany
2 speedata Publisher – a presentation in three parts TUG 2020 i) database publishing ii) speedata Publisher iii) demo
3 TUG 2020 i) database publishing
4 What is database Publishing? mysql XML data address source list (XML) CSV JSON word processor output template layout TUG 2020 Excel database publishing: strict separation of data and layout
5 Use cases Licht für Büro und Verwaltung SL 730 Lichtband-Pendelleuchte mit Spiegelraster Lichtband-Pendelleuchte mit Spiegelraster für direkt/indirekte Beleuchtung für T16 Lampen. Leuchtengehäuse aus Alu-Strangpressprofil, Kopfstücke aus Aluminiumdruckguß, pulverbeschichtet. Spiegelraster aus Reinstaluminium (Al 99,98), vakuumbedampft, hochglänzend. Vorbereitet für Lichtbandmontage, inkl. Durchgangsverdrahtung mit Steckverbinder (Stecker bzw. Buchse), montiertem Direktverbinder und einseitiger Y-Stahlseilabhängung. Max. Gewicht: 4,5 kg Ausführung RAL 9006 struktur EVG EVG digital dimmbar (DALI) Länge x Breite x Höhe Fassung T16 1 x 28 / 54 W Ausführung 730.481.54.3L18 730.481.54.6L18 1200 x 223 x 32 mm G5 T16 1 x 35 / 49 / 80 W 730.481.80.3L18 730.481.80.6L18 1500 x 223 x 32 mm G5 T16 3 x 28 / 54 W 730.483.54.3L18 730.483.54.6L18 1200 x 223 x 32 mm G5 T16 3 x 35 / 49 W 730.483.49.3L18 730.483.49.6L18 1500 x 223 x 32 mm G5 1185 / 1485 Zubehör (bitte extra bestellen!) 1200/ 1500 Installations-Set für Endeinspeisung (transparente Zuleitung, Y-Seilabhängung 1,5 m, 2 Kopfstücke in RAL 9006 struktur) 730.322.150-18 Installations-Set für Mitteneinspeisung (transparente Zuleitung, Y-Seilabhängung 1,5 m, 2 Kopfstücke in RAL 9006 struktur) 730.323.150-18 32 223 150° 150° 120° 120° 200 150 100 T16 3 x 54 W indirekt / direkt 80 / 20% 150° 150° 90° 90° 120° 120° 90° 90° UGR 11,3 / 11,6 730.0090 Grenzausstrahlwinkel/1000 cd/m 65° Sonderfarbe Wirkungsgrad 85% Deckenauslassdose rund, RAL 9006 struktur 900.001-18 Deckenauslassdose quadratisch, RAL 9006 struktur 900.004-18 250 cd/klm Lichtband Falls Sie die Leuchte oder weitere Komponenten in weiß (RAL 9016 struktur) wünschen, schreiben Sie den Farbcode „-10“ anstatt „-18“ falls Sie graphit (DB 703 struktur) wünschen, schreiben Sie bitte „-12“. SL 730 Lichtband-Pendelleuchte mit Spiegelraster Lichtband-Pendelleuchte mit Spiegelraster für direkt/indirekte Beleuchtung für T16 Lampen. Leuchtengehäuse aus Alu-Strangpressprofil, Kopfstücke aus Aluminiumdruckguß, pulverbeschichtet. Spiegelraster aus Reinstaluminium (Al 99,98), vakuumbedampft, hochglänzend. Vorbereitet für Lichtbandmontage, inkl. Durchgangsverdrahtung mit Steckverbinder (Stecker bzw. Buchse), montiertem Direktverbinder und einseitiger Y-Stahlseilabhängung. Max. Gewicht: 5,0 kg Ausführung RAL 9006 struktur EVG EVG digital dimmbar (DALI) T16 2 x 28 / 54 W 730.482.54.3L18 730.482.54.6L18 T16 2 x 35 / 49 W 730.482.49.3L18 T16 2 x 35 / 49 / 80 W Ausführung 730.482.80.3L18 730.482.80.6L18 Länge x Breite x Höhe Fassung 1200 x 223 x 32 mm G5 1500 x 223 x 32 mm G5 1500 x 223 x 32 mm G5 Falls Sie die Leuchte oder weitere Komponenten in weiß (RAL 9016 struktur) wünschen, schreiben Sie den Farbcode „-10“ anstatt „-18“ falls Sie graphit (DB 703 struktur) wünschen, schreiben Sie bitte „-12“. 1185 / 1485 Zubehör (bitte extra bestellen!) 1200/ 1500 Installations-Set für Endeinspeisung (transparente Zuleitung, Y-Seilabhängung 1,5 m, 2 Kopfstücke in RAL 9006 struktur) 730.322.150-18 Installations-Set für Mitteneinspeisung (transparente Zuleitung, Y-Seilabhängung 1,5 m, 2 Kopfstücke in RAL 9006 struktur) 730.323.150-18 32 223 120° 120° 150° 150° 150° 150° 120° 120° T16 2 x 54 W indirekt / direkt 55 / 45% UGR 14,4 / 15,1 60° 60° 120 30° 30° 180 30° 30° 300 cd/klm 60° 60° 730.0090 Grenzausstrahlwinkel/1000 cd/m 65° Sonderfarbe Wirkungsgrad 85% Deckenauslassdose rund, RAL 9006 struktur 900.001-18 Deckenauslassdose quadratisch, RAL 9006 struktur 900.004-18 109 03_buero_produkte.indd 109 28.05.2010 16:46:22 Uhr speedata GmbH · Bolivarallee 20 · 14050 Berlin product catalogs datasheets, reports TUG 2020 … speedata GmbH Bolivarallee 20 · 14050 Berlin gundlach@speedata.de Telefon 030 57 70 50 55 GLS Gemeinschaftsbank eG IBAN: DE18 4306 0967 1128 0618 00 BIC: GENODEM1GLS Geschäftsführer: Patrick Gundlach Amtsgericht Charlottenburg HRB 135360 B USt.-ID: DE 278023065
6 Page optimisation 473 Schwimmwesten Mountain Equipment Classic 500 Allround-Schlafsack. Die Daunen sind in eine Trapez-Kammer-Konstruktion gefüllt. Anatomisch geformtes Fußteil. Details: 2Wege- RV mit Abdeckleiste, regulierbarer Wärmekragen, Konturkapuze mit Kordelzug. Inkl. Pack- und Aufbewahrungs-Netzbeutel. Koppelbar. ocean dark ink Classic 500 SM bis 175 cm Körperlänge 13.58.71 RV Links oder Rechts Classic 500 STD bis 185 cm Körperlänge 13.58.71 RV Links oder Rechts Classic 500 XL bis 200 cm Körperlänge 13.58.71 RV Links oder Rechts w 219,95 w 219,95 w 239,95 Yeti Sunrizer 600 Women Spezieller Frauenschlafsack. H-Kammer-Konstruktion, befüllt mit hochwertiger Crystal Down. Das Innenmaterial ist angenehm weiches ID Emboss Soft Cell (100% Nylon). Komfort bieten das Kopfkissenfach mit integrierter Füllung und ein Fleece-Einschub im Fußbereich für warme Füße. Der umlaufende 2-Wege-RV mit Abdeckleiste ermöglicht ein Öffnen zur Decke. Konturkapuze mit Kordelzug, Wärmekragen, Innentasche. Inkl. Packund Aufbewahrungsbeutel. Koppelbar. Spree hinter Spremberg. Foto: MIchael von Einem zinfandel/black Sunrizer 600 Women S bis 165 cm Körperlänge 13.28.83 RV Links oder Rechts Sunrizer 600 Women M bis 175 cm Körperlänge 13.28.83 RV Links oder Rechts w 229,95 w 239,95 Austauschset Inshore Automatik Schlafsäcke Marinepool Inshore Manuell Marinepool Automatic Life Jacket Kids Auftrieb: 150 N (15 - 40 kg). Prüfzeichen: CE. Leichte, automatische Rettungsweste für Kinder mit 15 bis 40 kg Körpergewicht. Durch Zug an der Reißleine oder Kontakt zum Wasser bläst sich die Rettungsweste automatisch auf. Rücken- und Bauchgurt sind längenverstellbar; ein massiver MetallD-Ring ermöglicht die Befestigung einer Lifeline. Material: 100% Nylon. Inkl. Signalpfeife und 24 g CO2-Patrone. Gewicht: 900 g Auftrieb: 150 N (40+ kg). Prüfzeichen: CE. Kurz geschnittene, manuelle Rettungsweste - geeignet für Personen von 45 - 120 kg. Konzipiert für den Einsatz auf See, bläst sie sich nach Zug an der Reißleine automatisch auf. Zusätzliches Mundventil. 100% Polyester, inkl. Signalpfeife und 33 g CO2-Patrone. Gewicht: 675 g marine 11.71.63 11.83.77 33 g CO2-Patrone w 72,95 w 14,95 rot The North Face Gold Kazoo Superleichter und komfortabel geschnittener Daunenschlafsack. H-Kammer-Konstruktion mit zusätzlichen trapezförmig geschnittenen Kammern im seitlichen Bereich. Ergonomisch geformte Kunstfasereinsätze im Rücken-, Gesäß- und Kopfbereich verhindern einen Wärmeverlust in diesen besonders druckintensiven Bereichen. Wärmewulst über dem Brustbereich. Kleine Innentasche, nachleuchtender RV-Anhänger. Inkl. Netzaufbewahrungs- und Kompressions-Packbeutel. Koppelbar. Gold Kazoo regular bis 183 cm Körperlänge 17.25.22 RV Links oder Rechts 17.25.22 12.23.55 Füllmaterial Füllmenge Packbeutelmaß Packvolumen Körperlänge Schulterbreite Kniebreite Fußbreite Gewicht * gemäß EN Norm 13537 w 19,95 18.22.10 w 19,95 Marinepool Europe Baby Sea Kayak Vest Frauen Auftriebsklasse: 100 N (für Binnengewässer) Prüfzeichen: CE. Vollwertige Rettungsweste für Babys/Kleinkinder. Mit Kragen, RV, Schnellverschluss, Höschen, Signalpfeife und 3M-Reflexstreifen. Material: Nylon & PE-Schaum. Gewicht: 490 g 10.49.67 5 - 10 kg 10.49.68 10 - 15 kg w 199,95 The North Face Gold Kazoo 3 °C / -2 °C / -18 °C Buttery Soft Fabrics 100% Nylon Supersoft 100% Nylon 90/10 Gänsedaune, +650 cuin 90% Daune/10% Federn 380 g / 402 g 43 cm x 14,5 cm ø 6,2 l / 6,5 l 183 cm / 198 cm 78 cm / 82 cm 72 cm / 73 cm 47 cm / 47 cm 994 cm / 1004 g Mountain Equipment Classic 500 2 °C / -4 °C / -20 °C DWR 100% Nylon (Ripstop) Ultrasoft 4040’s 100% Nylon 90/10 Daune, 675+ cuin 90% Daune/10% Federn 500 g / 500 g / 550 g 34 cm x 19 cm ø 7,4 l / 7,9 l / 8,5 l 175 cm / 185 cm / 200 cm 79 cm / 79 cm / 80 cm 56 cm / 56 cm / 58 cm 40 cm / 40 cm / 42 cm 1080 g / 1100 g / 1180 g w 34,95 w 34,95 Yeti Sunrizer 600 Women 1 °C / -5 °C / -21 °C ID Soft 100% Nylon ID Emboss Soft Cell 100% Nylon 90/10,600+cuin Crystal Down 90% Daune/10% Federn 570 g / 600 g 15 cm x 15 cm x 32 cm 8,0 l / 8,5 l 165 cm / 175 cm 75 cm / 78 cm 53 cm / 56 cm 50 cm / 51 cm 1064 g / 1145 g Camaro Sea Kayak Vest Eng anliegend, aber keineswegs beengend! Durch große Aussparungen an den Ärmellöchern und einen kurzen Schnitt wird viel Bewegungsspielraum beim Paddeln geboten. Die Kajakweste passt sich dem Körper ergonomisch an und das sehr leichte, extrem elastische PU/Elasthan-Material ist weich und angenehm zu tragen. Mit Front-RV. Im Brust-, Seiten- und Rückenbereich sind Marine-Schaum Auftriebskörper integriert. Die Kajakweste fungiert als Schwimmhilfe, nicht als Rettungsweste! Material: 100% Elasthan, PU-beschichtet. Gewicht: 500 g/M Männergrößen: XS, S, M, L, XL, XXL schwarz/ rot 17.96.25 w 99,95 Frauengrößen: XS, S, M, L, XL schwarz/ hellblau 17.96.26 Marinepool Ocean Pro Soft Auftrieb: 100 N (70+ kg). Prüfzeichen: CE. Durch den geteilten PVC-Softschaum passt sich diese Weste perfekt der jeweiligen Anatomie an. Dank des Sicherheitskragens werden ohnmächtige Personen im Wasser sofort in die stabile Rückenlage gebracht. Zusätzlich ist die Weste mit Reflektorstreifen, Schrittgurt und einer Signalpfeife ausgestattet. Gewicht: 540 g/40 - 60 kg orange 10.49.61 10 - 20 kg, 20 - 30 kg, 30 - 40 kg, 40 - 60 kg, 60 - 70 kg 70 - 90 kg ab 90 kg w 34,95 w 39,95 w 44,95 Zubehör | Messer | Service Material innen 12.23.54 w 89,95 Marinepool Austauschset Inshore Automatik bunt RV Links oder Rechts Temperatur* Material außen rot Marinepool 24 g CO2-Ersatzpatrone für die Inshore Automatik Rettungsweste. Sea Kayak Vest Männer w 189,95 Auftrieb: 150 N (40+ kg). Prüfzeichen: CE. Automatische Rettungsweste, die sich entweder manuell durch Zug an der Reißleine oder automatisch bei Kontakt mit Wasser aufbläst. Sie trägt sich sehr angenehm und scheuert nicht im Nacken. Der Rückengurt ist verstellbar, auf dem Auftriebskörper sind Reflektorstreifen angebracht. Am Bauchgurt befindet sich ein massiver Metall-D-Ring zur Befestigung einer Lifeline, mit der man sich am Segelboot sichern kann. Der Auftriebskörper lässt sich auch durch einen Mundschlauch mit Rückschlagventil aufblasen. Hergestellt aus Nylon (100%) in Einheitsgröße für Personen von 45 - 120 kg, inkl. Signalpfeife und 33 g CO2-Patrone. Gewicht: 750 g Wassersport Gold Kazoo long bis 198 cm Körperlänge Marinepool Inshore Automatik Marinepool 33 g CO2-Ersatzpatrone für die Inshore Automatik Rettungsweste. 17.76.73 w 89,95 Austauschset Automatic Kids lifejacket sunshine yellow TUG 2020 575 Einstieg | Bekleidung | Schuhe & Socken | Kinder | Fahrrad | Brillen | Rucksäcke & Taschen | Schlafsäcke | Outdoormöbel | Zelte | Bergsport How to layout the page when you have one more item on it? Mumienschlafsäcke | Daune w 99,95 Optimisation needs programming – database publishing needs optimisation
7 Classic solution with LaTEX Python/Perl/Ruby/… script, that creates LaTEX source code print(“\documentclass{article}”) print(“\begin{document}”) print(“\begin{tabular}{lll}”) while read(data) do print(data[1] .. ” & ” .. data[2] .. ” & ” data[3] .. “\”) end TUG 2020 print(“\end{tabular}”) print(“\end{document}”) “poor man’s database publishing”
8 Problems “funny characters” in the input: % & # $ … no general solution (automatic) positioning in TEX is no fun … same goes to macro programming no DTP elements (text frames, non-linear text flow, image shape) TUG 2020 good justified text in TEX is not easy to get (line sticks out into the right margin)
9 Overview of available tools high DTP (InDesign, QuarkXPress) speedata publisher TUG 2020 Layout quality ConTEXt low LaTEX PDF libraries TEX Reporting software XSL-FO (XML based) Text processor manual Degree of automation fully automatic
10 TUG 2020 ii) speedata Publisher
11 What is database Publishing? mysql XML data source (XML) CSV JSON word processor output layout TUG 2020 Excel database publishing: strict separation of data and layout
12 speedata Publisher mysql XML data source (XML) CSV JSON TUG 2020 Excel output (PDF) layout (XML) database publishing: strict separation of data and layout
13 “Hello, world” example <Layout xmlns=”urn:speedata.de:2009/publisher/en”> <greeting name=”TUG”/>
<!— optionally define colors, fonts, paper size, … —>TUG 2020 <Record element=”greeting”> <PlaceObject> <Textblock> <Paragraph> <Value>Hello </Value> <Value select=”@name”/> </Paragraph> </Textblock> xpath </PlaceObject> </Record> </Layout> Hello TUG expression layout.xml data.xml
<Layout xmlns=”urn:speedata.de:2009/publisher/en”> <LoadFontfile name=”PunkNova” filename=”punknova-regular.otf” /> TUG 2020 <DefineFontfamily name=”titlefont” fontsize=”14” leading=”17”> <Regular fontface=”PunkNova” /> <Bold fontface=”…” /> <Italic fontface=”…” /> <BoldItalic fontface=”….” /> </DefineFontfamily> <Record element=”data”> <PlaceObject> <Textblock fontface=”titlefont”> <Paragraph> <Value>Hello TUG</Value> </Paragraph> </Textblock> </PlaceObject> </Record> </Layout> Fonts 14
Colors <Layout xmlns=”urn:speedata.de:2009/publisher/en”> <DefineColor name=”mygreen” model=”spotcolor” colorname=”PANTONE 3415 C” /> <DefineColor name=”title” value=”#f0f0f0” /> <DefineColor name=”somecolor” model=”cmyk” c=”33” m=”43” y=”80” k=”82” <Record element=”data”> <PlaceObject> <Box height=”4” width=”3” backgroundcolor=”mygreen” /> </PlaceObject> </Record> TUG 2020 </Layout> /> 15
16 Typesetting on a grid <SetGrid width=”5mm” height=”12pt” /> TUG 2020 <PlaceObject column=”3” row=”2”> <Textblock> <Paragraph> <Value>Hello world</Value> </Paragraph> </Textblock> </PlaceObject>
17 Grid (2) <SetGrid nx=”6” dx=”5mm” height=”10pt” /> TUG 2020 size of leading to get perfectly aligned lines
18 Grid (3) <PlaceObject row=”3” column=”22”> <Image width=”15” file=”rhslogo.pdf”/> </PlaceObject> TUG 2020 <PlaceObject column=”1” row=”1” allocate=”auto”> <Textblock width=”30”> <Paragraph> <Value>Seit zwei Jahren…</Value> </Paragraph> </Textblock> </PlaceObject>
19 Virtual objects (box in TEX) <Group name=”my virtual area”> <Contents> <PlaceObject> <!— image / table / text / anything —> </PlaceObject> </Contents> </Group> <!— not visible until placed —> <PlaceObject groupname=”my virtual area” /> Get information about the are virtual area TUG 2020 <Message select=”sd:group-width(‘my virtual area’)” /> …sd:group-height(…)” />
20 Programming TUG 2020 <Switch> <Case test=”$myvar > 5 “> <!— do this —> </Case> <Case test=”sd:current-page() = 7”> <!— or this —> </Case> <Otherwise> <!— or that—> </Otherwise> </Switch> also: variables loops while/until and more grid + virtual areas + programming = optimisation = very flexible layouts
21 TUG 2020 iii) demo time
22 TEX can be fun – if used properly Patrick Gundlach gundlach@speedata.de @speedata TUG 2020 speedata GmbH Berlin, Germany www.speedata.de