Lua a LuaTeX - tutorial

Podobné dokumenty
5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

. Seznámení se systémem TEX. Zpracování textů na počítači. Ing. Pavel Haluza, Ph.D. ústav informatiky PEF MENDELU v Brně haluza@mendelu.

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

Maturitní otázky z předmětu PROGRAMOVÁNÍ

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

O makrech, která umí aritmetiku s velkými čísly. Macros Which Handle Arithmetics with Big Numbers. Jan Šustek KMa PřF OU. Brejlov

Úvod do TeXu. Jan Vaněk. Nové Hrady 2011

Typografické programy (1) WYSIWYG

(Nepříliš) stručně o systémech TEX a L A TEX

Masarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace

Vstupní požadavky, doporučení a metodické pokyny

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

WSH Windows Script Hosting. OSY 2 Přednáška číslo 2 opravená verze z

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Příkazové skripty Procedurální jazyky Lua a ostatní

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

MBI - technologická realizace modelu

Programovací jazyk Pascal

LaTeX Martin Popel, 23. března 2011,Odborné vyjadřování a styl

Typografické programy (1) WYSIWYG

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

IB111 Úvod do programování skrze Python Přednáška 7

8 Třídy, objekty, metody, předávání argumentů metod

PSK3-9. Základy skriptování. Hlavička

Algoritmizace řazení Bubble Sort

Martin Hejtmánek hejtmmar

Tvorba dopisů v Latexu. T ř í d a l e t t e r. Petr Slamenec SLA280

NPRG030 Programování I, 2017/18 1 / :22:16

Algoritmizace. 1. Úvod. Algoritmus

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

První kapitola úvod do problematiky

Algoritmizace a programování

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Překladač a jeho struktura

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

ČÁST 1. Základy 32bitového programování ve Windows

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Typy souborů ve STATISTICA. Tento článek poslouží jako přehled hlavních typů souborů v programu

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

MATLAB Úvod. Úvod do Matlabu. Miloslav Čapek

Program a životní cyklus programu

NPRG030 Programování I, 2010/11

O datových typech a jejich kontrole

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

C2184 Úvod do programování v Pythonu podzim Mgr. Stanislav Geidl Národní centrum pro výzkum biomolekul Masarykova univerzita.

PHP PHP je skriptovací programovací jazyk dynamických internetových stránek PHP je nezávislý na platformě

Obsah. Začínáme programovat v Ruby on Rails 9. Úvod Vítejte v Ruby 15. O autorovi 9 Poděkování 9

Úvod do Matlabu. Praha & EU: Investujeme do vaší budoucnosti. 1 / 24 Úvod do Matlabu

NPRG030 Programování I, 2016/17 1 / :58:13

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Algoritmizace, základy programování, VY_32_INOVACE_PRG_ALGO_01

Počítačová simulace logistických procesů I. 11. přednáška Programování v SimTalk. ŠAVŠ, Fábry

VISUAL BASIC. Přehled témat

Úvod do programovacího jazyka Python

Sazba zdrojových kódů (balíček listings)

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Stručný návod k programu Octave

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

7. Datové typy v Javě

ŠVP Gymnázium Ostrava-Zábřeh Úvod do programování

Programovani v Maplu Procedura

IB111 Programování a algoritmizace. Programovací jazyky

Úvod do programování

6. Příkazy a řídící struktury v Javě

Základy programování Proměnné Procedury, funkce, události Operátory a podmínková logika Objekt Range a Cells, odkazy Vlastnosti, metody a události

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

Základy algoritmizace a programování

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout. tel:

dovolují dělení velkých úloh na menší = dekompozice

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

cyklus s daným počtem opakování cyklus s podmínkou na začátku (cyklus bez udání počtu opakování)

Funkce, podmíněný příkaz if-else, příkaz cyklu for

C2184 Úvod do programování v Pythonu podzim Stanislav Geidl Národní centrum pro výzkum biomolekul Masarykova univerzita. Úvod.

6 Příkazy řízení toku

Kurz LSL skriptování. Shiny Iceberg 2009

ŘÍDÍCÍ STRUKTURY - PODMÍNKY

CASE. Jaroslav Žáček

Rozklad na prvočinitele. 3. prosince 2010

Operační systémy. Cvičení 4: Programování v C pod Unixem

Skripty základy VB, vestavěné objekty, příklady

Specifikace projektu Ocerus

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Úvod do programovacího jazyka Python

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Jazyk PL/SQL Úvod, blok

NPRG030 Programování I, 2015/16 1 / :25:32

Operační systémy. Cvičení 3: Programování v C pod Unixem

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

Sada 1 - Základy programování

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Náznak ukázky syntaxe a sémantiky pro projekt. 1 Syntaktické prvky. Poslední aktualizace: 8.

Implementace LL(1) překladů

Transkript:

Lua a LuaTeX - tutorial TeX si zaslouží, abychom mu dovolili občas používat computer aneb Lua není žádný pofiderní skriptovací jazyk! Jaroslav Hajtmar TEXperience 2012

Abstrakt Tutorial je určen víceméně naprostým začátečníkům, kteří mají zájem začít konečně Lua v TeXu prakticky využívat. Bude rozčleněn do tří částí: všeobecný úvod, stručné seznámení s Lua a LuaTeXem (historie, koncepce, atd.) seznámení se základy jazyka Lua, psaní jednoduchých programů možnosti začleňování Luakódu do TeXových maker a práce s LuaTeXem (LuaLa- TeXem, ConTeXtem) Autor se bude ve svém tutorialu snažit vyvrátit představu o Lua jako o "pofiderním skriptovacím jazyku, kterým lze obcházet nedokonalosti TeXu". Snad se mu podaří ukázat, že není třeba mít strach z Lua jako z něčeho, co by mohlo diskvalifikovat nebo vyautovat milovaný TeX. Nemějme strach, Lua nikdy nesebere TeXu to, co je jeho doménou. Lua je silným a výkonným nástrojem v rukou TeXu! Stařičký ale nestárnoucí TeX si Lua rozhodně zaslouží! Dopřejme mu (třeba aspoň občas) připojit k jeho výjímečnému abakusu computer a používat jej! Bude s vámi jistě sdílet vaši radost!

Všeobecný úvod stručné seznámení s Lua a LuaTeXem (historie, koncepce, atd.)

Modelová ukázka přístupu k Lua(TeXu) Vyjádření účastníka XY diskuze v konferenci CsTEX: XY:, nicmene koncept LuaTeXu se mi principialne nelibi (obchazet nedokonalosti TEXu jakymsi pofidernim skriptovacim jazykem ) Reakce oponentů: PS: je radove snazsi resit nektere veci pristupem k internim datovym strukturam TEXu nez makroexpanzi. Karel tam nektere takove priklady uvadel. Presto se snazi [sememrskacsky] v pripravovanem baliku pro objektovou praci se strukturovanymi datovymi strukturami v TEXu v maximalni mire pouzit expanzi. JH: zaverem chci rici, ze rozumim jiste "nelibosti" pana XY. I mne totiz opravdu obcas mrzi (mysleno spise sentimentalne a nostalgicky), ze bych nektere veci mohl sice udelat pomoci TEXovych maker, ale nakonec mi prijde jednodussi a pohodlnejsi si napsat jednoduchy luaskript a ten nechat volat TEXovym makrem. ZW: Mám to snad chápat tak, že nemám právo používat SQL databázi naprogramovanou v něčem jiném než v TEXu? Že nemám právo výstup z databáze zpracovat jiným nástrojem než makrojazykem TEXu? Já tohle za pofiderní nepovažuju!.

Motivace k vytvoření tutorialu Snaha o vysvětlení základní filozofie LuaTeXu neznalým uživatelům TEXu. Odstranění předsudků (některých konzervativních - neznalých) TEXistů o tom, že Lua je jen jakýsi pofiderní skriptovací jazyk, kterým lze obcházet nedokonalosti TEXu. Přiblížení toho, že Lua může TEXu velmi dobře sloužit a přitom vůbec nemusí uživatele omezovat. Motivovat uživatele k tomu, aby se nebáli začít začleňovat Luakód do TEXu (Plainu, LaTEXu, ConTeXtu)

Jak TEX k Lua přišel? První myšlenka na vkládání Lua do TEXu experimenty H.H. s textovým editorem SciTE. Cíl: integrovat Lua do pdftexu tak aby šlo jednoduše z TEXu volat Lua a následně výsledky zpracování pomocí Lua jazyka tisknout TEXem. Fungování TEXu je optimalizováno, ale od doby vzniku uplynulo 30 let! (Technologie neuvěřitelně pokročila).

Záměry vs. realita Otázka: Jaký byl původní záměr E. Knutha? Pro každou TEXovou publikaci si autor napíše konkrétní sbírku maker? Následná realita (????): Roste obliba TEXu u neprogramátorů. Důsledky? pro neprogramátory vznikají makrobalíčky (BLACK BOXy) V balíčcích jsou makra zabývající se pismy, strukturou a rozvržením stránek, grafickým členěním. Jsou ale k dispozici i balíčky maker pro řízení procesů, konverze, manipulace s řetězci. (Neexistence datového typu FLOAT je kompenzována zneužíváním rozměrů registrů! Z hlediska programování tzv. "vyšší dívčí".) existence makrobalíčků akceleruje rozšíření TeXu existence makrobalíčků učí uživatele neprogramovat! zčásti (nebo zcela úplně) odpadá potřeba cokoliv v TeXu programovat! (Chyba???)

Realita: V TeXu není jednoduché programovat!!! (Větší nebo aspoň značná) část uživatelů pracuje s TeXem jen jako s jakýmsi "šablonovacím systémem". (Viz studenti píšící "z donucení" diplomové práce atd.) Druhy uživatelů TeXu některé možnosti J : A) nepotřebují a nechtějí programovat (studenti, autoři článků, šablonisti, atd.) B) potřebují, ale nechtějí programovat J z různých důvodů (no comment) C) nepotřebují, ale chtějí programovat (???, ale vítejte v klubu J)

Cílová skupina tohoto tutorialu uživatelé, kteří "potřebují" a "chtějí" programovat. Ty lze taky rozdělit: D) umějí programovat v TeXu, ale chtějí programovat jen v TeXu J (konzervatisté z principu, z nostalgie, ) těžké je přesvědčovat J E) umějí programovat v TeXu, ale myslí si, že by to mohlo být v něčem jiném než v TeXu jednodušší a produktivnější naši lidé (netřeba přesvědčovat) F) neumějí programovat v TeXu (nebo jen velmi blbě, tak jako já J), ale umějí programovat v nějakém jiném programovacím jazyce a "nemohou" programovat v TeXu, kvůli "náročnosti" TeXového makrojazyka naši lidé (stačí málo) G) neumějí programovat v "ničem", ale rádi by J (???, ale nechci nikoho odrazovat)

Otázky: Je v TeXu vůbec třeba programovat J? Lze uživatele typu D vůbec přesvědčit? Co užitatelům typu E předvést, aby zjistili, že Lua "je to pravé ořechové"? Jak uživatele typu F motivovat a nenásilně "přivést" k "jinému" programování v TeXu a umožnit mu dostat TeX co nejvíce pod jeho kontrolu?

Nápad: Embeddovat do TeXu nástroj umožňující jednodušší programování (ala Pascal), ale tak aby vše fungovalo "při starém". Je tady LuaTeX tj. TeX s Lua jazykem Důsledky? Uživatelé všech typů (A F) nezaznamenají vpodstatě žádnou změnu (latex jejichsoubor.tex x lualatex jejichsoubor.tex) Uživatelé typu D nezaznamenají vpodstatě žádnou změnu ALE: ta možnost tady stále je J Uživatelé typu E a F mají s LuaTeXem cestu k TeXu otevřenou dokořán! Otázka: Do jakého typu (okruhu) uživatelů jste se zařadili J?

TEX & Lua => LuaTeX TEX je velmi silným typografickým programovacím jazykem, ale postrádá mnohé z užitečných funkcí skriptovacích jazyků! (Užitečných v tom smyslu, že je potřebujete, když chcete jít nad rámec původního účelu systému.) Lua je mocný skriptovací jazyk, ale neví nic o sázení! (Do určité míry hodně připomíná jazyk, kterým byl TEX napsán tj. Pascal.) Lua je primárně určen pro zabudování a rozšíření stávajících systémů (např. i C). Proto se nabízí, aby se Lua zakomponoval do TEXu.

Co je LuaTeX? rozšířená verze pdftexu Lua je vestavěný skriptovací jazyk. Cíl: poskytnout otevřenou a konfigurovatelnou variantu TeXu se zpětnou kompatibilitou. Poslední stabilní verze je 0.60 (duben 2010). Klíčové rysy: skriptovací jazyk Lua - viz tento tutorial Dále mj. (není předmětem tutorialu). širší zpřístupnění "vnitřností" TeXu a přístup k datům v paměti TeXu prostřednictvím tzv. nodes interní reprezentace typografického materiálu v TeXové paměti možnost používání OpenType fontů vstup/výstup textu kódovaného Unicode UTF-8 podpora zpracování externích souborů PDF (Poppler, epdf) Callback funkce (TeX volá uživatelský Lua kód) METAPOST graphics engine síťové funkce podpora používání pluginů a externích uživatelských C knihoven (.DLL.SO) (podpora PNG, ZIP)

Proč zrovna Lua? Lua je odlehčený procedurální programovací jazyk navržený jako skriptovací jazyk, který splňuje následující (pro vývojáře LuaTeXu důležitá) kritéria: volně použitelný jednoduše včlenitelný a integrovatelný do pdftexu velmi malé "rozměry" portable - přenositelný na různé platformy snadno rozšířitelný (knihovny jiných jazyků) snadno a "zábavně" použitelný pro praktickou práci (Fun to work with) Je dobré vědět, že vývojáři zavrhli z jednoho či více důvodů např. jazyky: Java, Perl, Python, Ruby, Scheme

Jak přesvědčit, že to lze jednoduššeji? Cyklus v plainu: \newcount \mycounter \mycounter=1 \def\loop#1\repeat{\def\body{#1}\iterate} \def\iterate{\body\let\next\iterate \else\let\next\relax\fi\next} \let\repeat=\fi a následně: \loop... \advance\mycounter 1 \ifnum\mycounter < 11 \repeat Stejný cyklus v Lua: for i=1,10 do... end realizace v LuaTeXu: \directlua{ for i=1,10 do... end }

Seznámení se základy jazyka Lua Jak napsat jednoduchý Lua program

Základní práce s Lua Zdrojové texty použité v tutorialu: http://te2012.hajtmar.com/ Lua online na zkoušku.: http://www.lua.org/cgi-bin/demo (nebo http://doris.sourceforge.net/lua/weblua.php) Informační zdroje: http://www.lua.org/manual/5.2/ http://lua.gts-stolberg.de/en/ http://lua-users.org/wiki/tutorialdirectory http://www.root.cz/serialy/programovaci-jazyk-lua/

Komentáře

Keywords vyhrazená slova and break do else elseif end false for function if in local nil not or repeat return then true until while

Proměnné lokální x globální typy proměnných (nil, numbers, string, boolean, funkce, tabulky) ukázky práce s proměnnými bloky (do... end) a lokálnost proměnných

Funkce

Specialita LUA Tabulky

Cykly v Lua

Rozhodovací bloky

Práce s LuaTeXem Možnosti začleňování Luakódu do TeXových maker, jak na LuaLaTeX a ConTeXt)

Vkládání Lua kódu do TeXu Vkládání kratičkého luakódu (součást makra atd.) Vkládání delšího luakódu (několik luafunkcí, které budou následně volány TeXovými makry atd.) Lua kód je v samostatném souboru, který se načte příkazem \directlua{dofile("filename.lua")} Pozor na tzv CHUNKs! Každý způsob má své výhody a nevýhody. Uvnitř různých prostředí jsou jinak definovány catcodes.

Interakce TeX Lua Spuštění TeXu > načtení vstupního souboru do paměti > zpracování (token po tokenu) Když TeX narazí na \directlua{ <arg> } tak: zastaví čtení paměti + plně expanduje argument <arg> vytvoří novou chunk Lua + předá Lua řízení chunk Lua načte předinstalované knihovny + zpracuje expandované argumenty když chunk Lua dokončí zpracování vstupu, předá obsah TeXového streamu zpět do TeXu TeX následně vloží obsah TeXového streamu na aktuální pozici paměti TeXu, která byla čtena, expanduje obsah TeXového streamu a pokračuje dál pokud TeX narazí další \directlua{<jiný arg>} opakuje se výše uvedený postup

např. \directlua{tex.print("depth 1 \directlua{tex.print('depth 2')}")} POZN.: Lua má speciální výstupní stream, který je dostupný pomocí funkce tex.print(...). Funkce tex.print(...) netiskne na standardní Lua výstup ale do TeXu (narozdíl od funkce print(...)). Výstup tex.print(...) je bufferován tak, aby nebyl přímo předáván do TeXu, a to tak dlouho, dokud není chunk Lua zastavena.

Ukázka začlenění luakódu v LuaTeXu: % ex01 - ukázka definice makra v LuaTeXtu \def\fsin#1{\directlua{x="#1"; tex.print("sin("..x..") = "..math.sin(x));}} \def\fsin#1{ \directlua{ tex.print("sin(#1) = ", math.sin(#1)) } } \fsin{3.14} \Fsin{3.14} \bye

a v LuaLaTeXu: % ex01-ltx ukázka definice makra v LuaLaTeXu \documentclass[a4paper, 12pt]{article} \usepackage[utf8]{luainputenc} \usepackage[t1]{fontenc} \usepackage[czech, english]{babel} \def\fsin#1{ \directlua{ tex.print("sin(#1) =", math.sin('#1')) } } \begin{document} \fsin{3.14} \end{document}

% ex02-ltx ukázka definice makra v LuaLaTeXu \documentclass[a4paper, 12pt]{article} \usepackage[utf8]{luainputenc} \usepackage[t1]{fontenc} \usepackage[czech, english]{babel} \usepackage{luacode} \begin{luacode*} odmocnina = math.sqrt function round(num, idp) local mult = 10^(idp or 0) return math.floor(num * mult + 0.5) / mult end zaokrouhlit = round \end{luacode*} \def\odmsin#1{ $\sqrt{\sin(#1)}$ = \directlua{ tex.print(zaokrouhlit(odmocnina(math.sin('#1')),6)) } }

\begin{document} \odmsin{2.16} \end{document}

Pozor na CHUNKS! \directlua{ one = 1 local two = 2 } \directlua{ tex.print(type(one)) tex.print(type(two)) } \bye Hodnota proměnné "one" je 1 (type = number) Hodnota proměnné "two" je nil (typ je nil).

Pozor na chyby, plynoucí z expanze v kódu bez oddělovačů a chyby, plynoucí z používání komentování kódu! (viz http://wiki.luatex.org/index.php/writing_lua_in_tex). \def\macro{1} % CHYBA!!! myvar=1t \directlua{ myvar = \macro tex.print(myvar) } % Zakomentování zruší i přiřazení poslední proměnné! \directlua{ myvar = 1 -- anothervar = 2 onelastvar = 3 } % SPRÁVNĚ!!! \directlua{ myvar = \macro; tex.print(myvar) } \bye

Ukázka použití externího souboru s luafunkcemi v LuaLaTeXu % ex03-ltx ukázka načtení externího souboru s luafunkcemi do LuaLaTeXu \documentclass[a4paper,12pt]{article} \usepackage[utf8]{luainputenc} \usepackage[t1]{fontenc} \usepackage[czech,english]{babel} \usepackage{luacode} \def\odmsin#1{ $\sqrt{\sin(#1)}$ = \directlua{ tex.print(zaokrouhlit(odmocnina(math.sin('#1')),6)) } } \directlua{dofile("ex03.lua")} \begin{document} \odmsin{2.16} \Odmsin{2.16} \OOdmsin{2.16} \end{document}

Obsah externího Luasouboru: -- definice potřebných funkcí... odmocnina = math.sqrt function round(num, idp) local mult = 10^(idp or 0) return math.floor(num * mult + 0.5) / mult end zaokrouhlit = round tex.print([[\def\odmsin#1{$\sqrt{\sin(#1)}$ = \directlua{tex.print(zaokrouhlit(odmocnina(math tex.print([[ \def\oodmsin#1{ $\sqrt{\sin(#1)}$ = \directlua{ tex.print(zaokrouhlit(odmocnina(math.sin('#1')),6)) } }]])

Praktická ukázka fungování LuaTeXu % The following example may help to understand a little more about \directlua{} expansion. \def\nazevfunkce{hellofunkce} \def\levazavorka{(} \def\pravazavorka{)} \def\hellofromtex#1{ % Code within \directlua{} is expanded according to TeX rules and then sent to the Lua % interpreter. In the above, LuaTeX "sees" \nazevfunkce\levazavorka#1\pravazavorka and % expands it as follows. After this expansion, the code is fed to the Lua interpreter, % which sees Hello("Hello World") and executes... \directlua{ function HelloFunkce(str) tex.print(str) end \nazevfunkce\levazavorka#1\pravazavorka}% } \hellofromtex{"hello World"} \bye

Writing Lua in TeX http://wiki.luatex.org/index.php/writing_lua_in_tex

Praktická činnost... Ukázky praktických aplikací

Ukázky konkrétních aplikací: Praktická činnost...

Jak Lua zpřístupňuje TeXové registry? Jak počítat s dimenzemi, countery, boxy atd.

Jak Lua zpřístupňuje TeXové registry? Pozor na chunks! Praktické ukázky:

Soutěž "makro.tex" a Lua a LuaTeX aneb jak jsem se pokoušel řešit soutěžní úlohy

Praktické ukázky a diskuze: Je 6 z 10 dobré skóre?

Diskuze o Lua a LuaTeXu

Co vy na to?