1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
|
% lualatex-doc: a guide to LuaLaTeX
%
% Written by Manuel Pégourié-Gonnard <mpg@elzevir.fr>, 2010.
%
% Distributed under the terms of the GNU free documentation licence:
% http://www.gnu.org/licenses/fdl.html
% without any invariant section or cover text.
\documentclass{lltxdoc}
\title{Eine Einführung in \lualatex}
\author{Manuel Pégourié-Gonnard \email{mpg@elzevir.fr}}
\date{\today}
\begin{document}
\maketitle
\begin{abstract}
Dieses Dokument ist eine Karte oder vielmehr ein touristischer Reiseführer
für die neue Welt von \lualatex.\footnote{Obwohl der Fokus des Dokumentes auf
\lualatex liegt, beinhaltet es auch nützliche Informationen über \luatex im
Nur-Text-Format.} Die angestrebte Zielgruppe reicht von völligen Anfängern
(mit etwas Wissen über gängiges \latex) bis hin zu Paket-Entwicklern. Dieser
Führer versteht sich als "umfassend" im folgenden Sinne: Es enthält Verweise
zu allen relevanten Quellen, trägt Informationen zusammen, die sonst verstreut
liegen und fügt einführende Materialien bei.
Rückmeldungen und Vorschläge für Verbesserungen sind besonders willkommen.
Dieses Dokument ist unter permanenter Bearbeitung. Danke für ihr Verständnis
und ihre Geduld.
\end{abstract}
\vspace{\stretch{1}}
\setcounter{tocdepth}{2}
\listoftoc*{toc}
\vspace*{\stretch{2}}
\clearpage
\section{Einf"uhrung}\label{intro}
\subsection{Was ist eigentlich \lualatex?}\label{what}
Um diese Frage zu beantworten müssen wir ein paar Details über die Welt von \tex
aufgreifen, die sie vielleicht für gewöhnlich nicht beachten würden, nämlich den
Unterschied zwischen der \emph{Maschine} und einem \emph{Format}. Eine Maschine
(engl. \emph{engine}) ist ein Computerprogramm währenddessen ein Format eine
Menge von Makros darstellt, die durch die Maschine ausgeführt wird. Üblicherweise
werden die Makros vor der eigentlichen Ausführung mit einer konkreten Datei
vorgeladen.
Eigentlich ist ein Format mehr oder weniger wie eine Dokumentenklasse oder ein
Paket, mit dem Unterschied, dass es mit einem bestimmten Kommando verknüpft ist.
Stellen sie sich vor, es gäbe ein Kommando \cmd{latex-article}, das das gleiche
machen würde, wie \cmd{latex}, allerdings brauchen sie dabei nicht die Präambel
©\documentclass{article}© zu Beginn ihrer Datei verwenden. Gleichermaßen
ist das Kommando \cmd{pdflatex} dasselbe wie das Kommando \cmd{pdftex}, mit dem
Unterschied, dass sie keine Anweisungen am Beginn ihrer Datei machen müssen, \latex
zu laden. Das ist bequem und auch ein wenig effizienter.
Formate sind großartig, weil sie mächtige Kommandos mit den einfach Werkzeugen
implementieren, die eine Maschine bereitstellt. Trotzdem ist die Mächtigkeit
eines Formates manchmal durch die von der Maschine bereitgestellten Werkzeuge
beschränkt, weshalb einige Leute begonnen haben, funktionsreichere Maschinen zu
entwickeln, damit andere wiederum mächtigere Formate (oder Pakete) implementieren
können. Die zur Zeit bekanntesten Maschinen (ausgenommen das ursprüngliche \tex)
sind \pdftex, \xetex und \luatex.
Um das Bild noch etwas weiter zu verkomplizieren, erzeugte die ursprüngliche
\tex Maschine ausschließlich DVI-Dateien, während seine Nachfolger zusätzlich
PDF-Dateien erzeugen können. Jedes Kommando in ihrem System gehört zu einer
bestimmten Maschine mit einem bestimmten Format und einem bestimmt Ausgabemodus.
Die folgende Tabelle fasst dies zusammen: In der Zeile das Format, in der Spalte
Maschine und in jeder Zelle steht oben das Kommando für den DVI-Modus und darunter
das für den PDF-Modus.
\begin{center}
\newcommand*\cell [2] {%
\parbox{6em}{\centering\leavevmode\color{code}\ttfamily
\strut\maybe{#1} \\ \strut\maybe{#2}}}
\makeatletter
\newcommand*\maybe [1] {%
\@ifmtarg{#1} {\textcolor{gray}{\normalfont (none)}} {#1}}
\begin{tabular}{l|cccc}
& \tex & \pdftex & \xetex & \luatex
\\ \hline
Plain
& \cell{tex}{}
& \cell{etex}{pdftex}
& \cell{}{xetex}
& \cell{dviluatex}{luatex}
\\ \hline
\latex
& \cell{}{}
& \cell{latex}{pdflatex}
& \cell{}{xelatex}
& \cell{dvilualatex}{lualatex}
\\
\end{tabular}
\end{center}
Wir können jetzt die Frage in der Überschrift beantworten: \lualatex ist die
\luatex Maschine mit dem \latex Format. Nun gut, diese Antwort ist nicht
besonders befriedigend, wenn sie den Unterschied zwischen \luatex und \latex
nicht kennen.
\medskip
Wie sie vielleicht wissen ist \latex das allgemeine Rahmenwerk, in welchem
Dokumente mit ©\documentclass© beginnen, Pakete mit ©\usepackage© geladen,
Schriftarten auf eine schlaue Art und Weise ausgewählt werden (damit sie in die
Fettschrift wechseln können, aber kursiv beibehalten können), Seiten mit
komplizierten Algorithmen erstellt werden, darunter Unterstützung für Kopf- und
Fußzeilen, Fußnoten, Randnotizen, Textflussmaterial usw. Dies ändert sich nicht
mit \lualatex, aber neue und mächtigere Pakete werden damit verfügbar, die
Teile des Systems auf bessere Weise arbeiten lassen.
Was also ist \luatex? Kurz gesagt: Die heißeste \tex Maschine, die es zur Zeit
gibt! Etwas genauer ausgedrückt: Es ist der vorgesehene Nachfolger von \pdftex
und beinhaltet all dessen Kernfunktionen: Direkte Generierung von PDF Dateien
mit Unterstützung erweiterter PDF-Funktionen und mikrotypografischen
Verbesserungen an den typografischen \tex-Algorithmen.
Die wichtigsten Neuerungen von \luatex sind:
\begin{enumerate}
\item Nativer Support von Unicode, dem modernen Standard von Zeichenklassifikation
und Kodierung mit Unterstützung aller Buchstaben der Welt, vom
Englischen über Arabisch bis hin zu traditionellem Chinesisch und mit
Einbezug einer großen Menge von mathematischen und sonstigen Symbolen.
\item Die Inklusion von Lua als der eingebetteten Scriptsprache (siehe
Kapitel~\ref{luaintex} für Details).
\item Eine Menge von großartigen Lua-Bibliothenken, darunter:
\begin{itemize}
\item ©fontloader©, die moderne Schriftartenformate wie Truetype oder
Opentype unterstützt;
\item ©font©, die die Veränderung von Schriftarten innerhalb des Dokumentes
ermöglicht;
\item ©mplib©, eine eingebettete Version des Grafikprogramms Metapost;
\item ©callback©, die Zugänge zu teilen der \tex-Maschine bereitstellt,
die vorher nicht erreichbar waren;
\item Dienstprogramm-Bibliotheken, um Bilder, PDF und andere Dateien zu
manipulieren.
\end{itemize}
\end{enumerate}
Einige dieser Funktionen, wie zum Beispiel die Unicode-Unterstützung, wirken sich
direkt auf alle Dokumente auf, während andere Funktionen hauptsächlich Werkzeuge
bereitstellen, die Autoren von Paketen nutzen, um noch noch mehr Kommandos und
Erweiterungen bereitzustellen.
\subsection{Wechseln von \latex nach \lualatex}\label{switch}
Wie das vorangegangene Kapitel zeigt ist \lualatex vergleichbar mit \latex, hat
einige wenige Unterschiede und hält eine höhere Anzahl von funktionsreichen Paketen
und Werkzeugen verfügbar. In diesem Abschnitt präsentieren wir das absolute
Minimum, das sie wissen sollten, um ein Dokument mit \lualatex zu erzeugen, während
der Rest des dieses Dokumentes mehr Details über die verfügbaren Packages
bereithält.
Es gibt nur drei Unterschiede:
There are only three differences:
\begin{enumerate}
\item Verwenden sie nicht das Paket \pf{inputenc}! Kodieren sie ihre Quelldatei
einfach in UTF-8.
\item Laden sie nicht \pf{fontenc}, sondern stattdessen \pf{fontspec}.
\item Benutzen sie kein Paket, das die Schriftarten ändert, stattdessen
verwenden sie \pf{fontspec}'s-Kommandos.
\end{enumerate}
Sie müssen sich also lediglich mit \pf{fontspec} vertraut machen, was sehr
einfach ist: Wählen sie die Hauptserifenschriftart mit ©\setmainfont© aus, die
serifenlose Schriftart mit ©\setsansfont©, die Festbreitenschriftart mit
©\setmonofont©. Der Parameter für diese Kommandos ist ein menschen-lesbarer
Name der Schriftart, zum Beispiel ©Latin Modern Roman© anstelle von ©ec-lmr10©.
Sie möchten gegebenenfalls ©\defaultfontfeatures{Ligatures=TeX}© vor der
Verwendung dieser Kommandos setzen, um die üblichen \tex-Ersetzungen (wie zum
Beispiel ©---© für einen hervorgehobenen Gedankenstrich) zu bewahren.
Die gute Nachricht ist, dass sie jetzt direkt auf jede Schriftart ihres
Betriebssystems zugreifen können, zusätzlich zu denen der \tex-Distribution,
darunter auch TrueType und OpenType-Schriftarten und sie haben Zugriff auf
deren neueste Funktionen. Das bedeutet, dass es jetzt einfach ist ist, mit
\lualatex jede moderne Schriftart zu verwenden, die sie heruntergeladen oder
gekauft haben - und sie profitieren von deren vollem Potenzial.
Die schlechte Nachricht ist, dass es nicht immer einfach ist, eine Liste von
allen verfügbaren Schriftarten zu erhalten. Unter Windows mit \texlive listet
ihnen das Kommandozeilenwerkzeug \cmd{fc-list} alle auf, aber es ist nicht
besonders nutzerfreundlich. Unter Mac OS X, zeigt ihnen die
\emph{Fontbook}-Anwendung alle Schriftarten ihres Systems an, aber nicht die
der \tex-Distribution. Das Gleiche gilt für \cmd{fc-list} unter Linux. Eine
weitere schlechte Nachricht ist, dass sie auf diese Art nicht auf ihre alten
Schriftarten zugreifen können. Glücklicherweise gibt es tagtäglich immer mehr
neue Schriftarten in modernen Formaten.
Übrigens sollten wir hier erwähnen, dass der Inhalt dieses Kapitels so weit
auch auf \xelatex zutrifft, das heißt für \latex nach \xetex. Tatsächlich
teilt \xetex zwei der essenziellen Features von \luatex, nämlich die native
Unicode-Unterstützung und die Verwendung moderner Schriftartenformate
(allerdings ohne die anderen Funktionen von \luatex; auf der anderen Seite ist
es zur Zeit stabiler). Obwohl sich die \xelatex-Implementierung bezüglich
Schriftarten erheblich unterscheidet, so stellt doch \pf{fontspec} eine
vereinheitlichte Schriftarten-Schnittstelle für beide bereit.
\medskip
Um die Vorzüge der neuen Funktionen von \luatex zu erhalten, müssen sie einige
Teile der alten Welt fallenlassen und zwar jene Schriftarten, die nicht in
einem modernen Format verfügbar sind. Auch die Freiheit der Kodierung der
Quelldatei nach Wahl muss aufgegeben werden, aber UTF-8 ist so überlegen, dass
dieser Punkt kaum zählt. Das Paket \pk{luainputenc} stellt verschiedene
Krücken bereit, um diese Teile zu erhalten\footnote{Obwohl der Name andeutet,
es ginge lediglich um Eingabe-Kodierungen, so sind die Details der
\latex-Schriftartenimplementierung für dieses Paket notwendig und unterstützen
daher ebenfalls die alten Schriftarten.}, allerdings mit dem
Nachteil, die korrekte Unicode-Unterstützung zu verlieren.
Das ist alles, was sie wissen müssen, um Dokumente mit \lualatex zu erstellen.
Ich empfehle ihnen einen Blick ins die \pf{fontspec}-Anleitung zu werfen und
konkret ein kleines Dokument mit lustigen Schriftarten zu übersetzen. Sie
können dann den Rest des Dokuments nach Bedarf überfliegen.
Kapitel~\ref{workornot} listet alle anderen Unterschiede zwischen konventionellem
\latex und \lualatex auf, die mir bekannt sind.
\subsection{Eine Lua-in-\tex Fibel}\label{luaintex}
Lua ist eine kleine, feine Sprache ganz offensichtlich weniger überraschend
und viel einfacher zu lernen als \tex. Die Haupt-Referenz ist das sehr gut
lesbare Buch \emph{Programming in Lua}, dessen erste Ausgabe
\href{http://www.lua.org/pil/} {online frei verfügbar} ist. Für den
Schnelleinstieg empfehle ich die Kapitel~1 bis~5 zu lesen und einen schnellen
Blick auf Teil~3 zu werfen. Beachten sie bitte, dass alle Bibliotheken, die in
Kapitel~3 erwähnt werden, auch Bestandteil von \luatex sind. Allerdings ist
die ©os©-Bibliothek aus Sicherheitsgründen beschränkt.
Je nach ihrer Programmierweise sind sie vielleicht gleich an den restlichen
Abschnitten von Teil~1 und Teil~2, die ihnen die erweiterten Funktionalitäten
der Sprache aufzeigen. Teil~4 ist bedeutungslos im Kontext von \luatex, sofern
sie nicht an \luatex selbst entwickeln wollen. Schließlich ist das \emph{Lua
Referenz Handbuch} \href{http://www.lua.org/manual/}{in einigen Sprachen
online verfügbar} und beinhaltet einen praktischen Index.
\medskip
Kommen wir nun zu Lua in \luatex. Die gebräuchlichste Art, Lua-Code auszuführen
ist das ©\directlua©-Kommando, das Lua code als Argument erhält. Genauso können
sie Informationen von Lua nach \tex übergeben mittels ©tex.sprint©.\footnote{
Der Name bedeutet vermutlich ``Zeichenkettendruck'' im Gegensatz zu ``laufe
sehr schnell für eine sehr kurze Zeit.'' } Zum Beispiel
\begin{Verbatim}
die Standardnäherung von $\pi = \directlua{tex.sprint(math.pi)}$
\end{Verbatim}
gibt ``die Standardnäherung von $\pi = \directlua{tex.sprint(math.pi)}$'' in
ihr Dokument aus. Sie sehen, wie einfach es ist \tex und Lua zu vermischen?
Tatsächlich gibt es einige wenige Treffer. Schauen wir zuerst auf den Lua
nach \tex-Weg, denn es ist der einfachste. Wenn sie in das \luatex-Handbuch
schauen, werden sie sehen, dass es dort eine weitere Funktion mit einem
einfacheren Namen ©tex.print©, gibt. Es fügt eine komplette Zeile
in ihre \tex-Quelle ein, wobei der Inhalt das Argument des Kommandos ist. Falls
sie das noch nicht wussten: \tex macht alle garstigen Dinge mit kompletten
Quellcodezeilen, wie das Überspringen am Anfang und am Ende einer Zeile und dem
Hinzufügen eines EOL-Zeichens am Ende der Zeile. Die meiste Zeit werden sie
das Feature nicht brauchen, daher empfehle ich die Verwendung von ©tex.sprint©.
Wenn sie genügend tief in \tex bewandt sind und sogenannte catcodes kennen,
werden sie sich freuen, dass ihnen ©tex.print© und seine Varianten beinahe
die volle Kontrolle über catcodes gibt, die sie benutzen können, um die
Argumente zu zerlegen, da sie eine catcode-Tabelle als erstes Argument
übergeben können. Sie möchten vielleicht mehr über catcodes erfahren, die
zur Zeit~2.7.6 im \luatex Handbuch sind. Wenn sie mit catcodes nichts am
Hut haben, überspringen sie einfach diesen Abschnitt.
\medskip
Lassen sie uns nun auf ©\directlua© blicken. Um einen Eindruck davon zu bekommen
wie es arbeitet, stellen sie sich vor, dass es ein ©\write©-Kommando sei, aber
es schreibt nur in eine virtuelle Datei und schickt diese Datei sofort an den
Lua-Interpreter. Im Lua-Kontext ergibt sich daruas, dass jedes Argument eines
©\directlua©-Kommandos seinen eigenen Geltungsbereich hat: Lokale Variablen
des einen Argumentes sind nicht sichtbar für das andere (was eigentlich
vernünftig ist, aber man weiß besser darüber bescheid).
Nun der wichtigste Punkt ist, dass das Argument zuerst vom \tex-Interpreter
zerlegt wird, dann vollständig erweitert und zurückverwandelt wird in eine
reine Zeichenkette, bevor es in den Lua-Interpreter gesteckt wird. Das Einlesen
in den \tex-Interpreter hat einige Konsequenzen. Eine davon ist, dass die
EOL-Zeichen in Leerzeichen umgewandelt werden, sodass es nur eine (lange)
Eingabezeile gibt. Da Lua eine formfreie Sprache ist, spielt das für gewöhnlich
keine Rolle, allerdings dann schon, wenn es um Kommentare geht:
\begin{Verbatim}
\directlua{a_function()
-- a comment
another_function()}
\end{Verbatim}
wird nicht das tun, was sie vermutlich erwarten würden. ©another_function()©
würde als Teil des Kommentars verstanden werden.
Eine weitere Konsequenz ist, dass aufeinanderfolgende Leerzeichen werden
zusammengefasst zu einem Leerzeichen und \tex-Kommentare werden verworfen.
Hier nun die korrekte Version des vorigen Beispiels:
\begin{Verbatim}
\directlua{a_function()
% a comment
another_function()}
\end{Verbatim}
Es ist ebenfalls zu bemerken, dass das Argument general in einem ©\write© ist,
und daher im expansion-only-Kontext ist. Wenn sie nicht wissen, was das
bedeutet, lassen sie es mich so sagen, dass die Expansion-Sache der Hauptgrund
ist, der die \tex-Programmierung so schwierig gestaltet.
\medskip
Ich entschuldige mich dafür, dass die letzten drei Abschnitte ein wenig
\tex{}nisch gewesen sind, aber ich dachte mir, dass sie das wissen sollten. Um
sie dafür zu belohnen, dabei geblieben zu sein, gebe ich ihnen hier einen
debugging-Trick. Setzen sie den folgenden Code an den Anfang ihres Dokumentes:
\begin{Verbatim}
\newwrite\luadebug
\immediate\openout\luadebug luadebug.lua
\AtEndDocument{\immediate\closeout\luadebug}
\newcommand\directluadebug{\immediate\write\luadebug}
\end{Verbatim}
Wenn sie einmal schwer mit einem speziellen Aufruf von ©\directlua© zu kämpfen
haben, weil er nicht das macht, was sie wollen, dann ersetzen sie den Aufruf
dieser Instanz durch ©\directluadebug©. Übersetzen sie dann wie immer und
schauen in die Datei \file{luadebug.lua}. Sie sehen dannm, was der Lua-Interpreter
tatsächlich gelesen hat.
Das \pk{luacode}-Pakte stellt Kommandos und Umgebungen bereit, die ihnen helfen
verschiedene Grade dieser Probleme zu lösen. Wie dem auch seim, für alles was
nicht trivial ist, sollte man eine externe Datei mit dem Lua-Code verwenden, sie
laden und verwenden. Zum Beispiel:
\begin{Verbatim}
\directlua{dofile("my-lua-functions.lua")}
\newcommand*{\greatmacro}[2]{%
\directlua{my_great_function("\luatexluaescapestring{#1}", #2)}}
\end{Verbatim}
Das Beispiel nimmt an, dass ©my_great_function© in ©my-lua-functions.lua©
definiert ist und eine Zeichenkette und eine Zahl als Argument nimmt. Bemerken
sie auch, dass wir vorsichtig die ©\luatexluaescapestring© Primitive auf das
Zeichenkettenargument anwenden, um jeden backslash oder Gänsefüßchen zu
escapen. Das würde sonst den Lua Parser durcheinanderbringen.\footnote{
Wenn sie jemals schonmal SQL verwendet haben, dann ist das Konzept,
Zeichenketten zu escapen hoffentlich nicht neu für sie.}
\medskip
Das ist alles, was Lua in \tex betrifft. Wenn sie sich darüber wundern, warum
©\luatexluaescapestring© einen so langen und dummen Namen hat, dann wollen sie
vielleicht das nächste Kapitel anschauen.
\subsection{Andere wissenswerte Dinge}\label{things}
Nur für den Fall, dass dies nicht offensichtlich ist: Das \luatex-Handbuch,
\file{luatexref-t.pdf} ist eine großartige Quelle.
Es ist wichtig zu wissen, dass die Namen der Primitive von \luatex im Handbuch
nicht mit den aktuellen Namen übereinstimmen. Um Konflikte mit bestehenden
Makros zu vermeiden, sind alle neuen Primitive mit der Voranstellung ©\luatex©
versehen worden, es sei denn, sie begannen nicht bereits schon mit diesem Prefix.
To prevent clashes with existing macro names, all new primitives
have been prefixed with ©\luatex© unless they already start with it, so
©\luaescapestring© becomes ©\luatexluaescapetring© while ©\luatexversion©
remains ©\luatexversion©. The rationale is detailed in section~\ref{formats}.
\medskip
Oh, and by the way, did I mention that \luatex is in beta and version 1.0 is
expected in late 2012? You can learn more on the roadmap page of
\href{http://luatex.org/}{the \luatex site}. Stable betas are released
regularly and are included in \texlive since 2008 and \miktex since 2.9.
Not surprisingly, support for \luatex in \latex is shiny new, which means it
may be full of (shiny) bugs, and things may change at any point. You might
want to keep your \tex distribution very up-to-date\footnote{For \texlive,
consider using the complementary
\href{http://tlcontrib.metatex.org/} {tlcontrib} repository.} and also avoid
using \lualatex for critical documents at least for some time.
As a general rule, this guide documents things as they are at the time it is
written or updated, without keeping track of changes. Hopefully, you'll update
your distribution as a whole so that you always get matching versions of this
guide and the packages, formats and engine it describes.
\section{Essenzielle Pakete und Praktiken}\label{essential}
Dieser Abschnitt präsentiert die Pakete, die Sie als Anwender möglicherweise
immer laden wollen oder über die Sie als Entwickler auf jeden Fall Bescheid
wissen sollten.
\subsection{Anwender-Level}
\pkdesc{fontspec}{\WSPR}{\xetex, \luatex}{\latex}{%
macros/latex/contrib/fontspec/}[https://github.com/wspr/fontspec/]
Schönes Interface zur Schriftartenverwaltung, welches gut in die \latex
Schriftartenauswahlschema integriert ist. Dies wurde schon in einem vorherigen
Abschnitt vorgestellt.
\subsection{Entwickler-Level}
\subsubsection{Naming conventions}
Auf der \tex Seite sind Kontrollsequenzen, die mit ©\luatex© beginnen, für
Primitiven reserviert. Es wird stark empfohlen, dass Sie \emph{keine} solcher
Kontrollsequenzen definieren, um Namensueberschneidungen mit zukünftigen
Versionen von \luatex zu verhindern. Sollten Sie hervorheben wollen, dass ein
Makro \luatex-spezifisch ist, empfehlen wir, dass Sie stattdessen das ©\lua©
Präfix (ohne folgendem ©tex©) benutzen. Es ist in Ordnung, das ©\luatex@©
Präfix für interne Makros zu benutzen, da primitive Namen nie ©@© enthalten,
dennoch könnte dies Verwirrung stiften. Ausserdem benutzen Sie ja schon ein
einzigartigen Präfix für interne Makros in allen Ihren Paketen, nicht wahr?
Auf der Lua-Seite halten Sie bitte den globalen Namespace so sauber wie möglich.
Das heisst, Sie verwenden eine Tabelle ©mypackage© and setzen alle Ihre
öffentlichen Funktionen und Objekte in diese. Sie möchten möglicherweise dafür
Lua's \href{http://www.lua.org/manual/5.1/manual.html#pdf-module}
{\code{module()}} benutzen.
Andere Strategien für die Lua Modulverwaltung werden in
\href{http://www.lua.org/pil/15.html} {Kapitel~15 aus \emph{Programming in Lua}}
diskutiert. Es ist ausserdem eine gute Idee ©local© für Ihre internen
Variablen und Funktionen zu verwenden. Zu guter Letzt wird zur Vermeidung
von Überschneidungen mit zukünftigen Versionen von \luatex empfohlen, die
Namespaces von \luatex's Standardbibliotheken nicht zu verändern.
\subsubsection{Engine und Modusfeststellung}\label{detect}
Zahlreiche Pakete erlauben es, die Engine festzustellen, die gegenwärtig mit
der Verarbeitung des Dokuments beschäftigt ist.
\pkdesc{ifluatex}{\HO}{all}{\latex, Plain}{%
macros/latex/contrib/oberdiek/}
Stellt ©\ifluatex© zur Verfügung und stellt sicher, dass ©\luatexversion©
benutzbar ist.
\pkdesc{iftex}{\VK}{all}{\latex, Plain}{%
macros/latex/contrib/iftex/}[http://bitbucket.org/vafa/iftex]
Stellt ©\ifPDFTeX©, ©\ifXeTeX©, ©\ifLuaTeX© und korrespondierendes ©\Require©
Kommandos zur Verfügung.
\pkdesc{expl3}{The \LaTeX3 Project}{all}{\latex}{%
macros/latex/contrib/expl3/}[http://www.latex-project.org/code.html]
Stellt neben \emph{vieler} anderer Dinge ©\luatex_if_engine:TF©,
©\xetex_if_engine:TF© und deren Varianten zur Verfügung.
\pkdesc{ifpdf}{\HO}{all}{\latex, Plain}{%
macros/latex/contrib/oberdiek/}
Stellt den ©\ifpdf© Schalter zur Verfügung. \luatex, wie auch \pdftex kann
sowohl PDF als auch DVI Ausgaben erzeugen; letzteres ist nicht wirklich sinnvoll
mit \luatex, da es keine erweiterten Funktionen wie Unicode und moderne
Schriftformate unterstützt. Der ©\ifpdf© Schalter ist nur aktiv, wenn und nur
wenn Sie \pdftex oder \luatex im PDF Modus laufen lassen (beachten Sie dass dies
nicht für \xetex gilt, dessen PDF Unterstuetzung anders funktioniert).
\subsubsection{Grundlegende Ressourcen}
\pkdesc{luatexbase}{\ER \& \MPG}{\luatex}{\latex, Plain}{%
macros/luatex/generic/luatexbase/}[https://github.com/mpg/luatexbase]
Die Text- und \latex-Formate enthalten Makros, um grundlegende \tex Ressourcen
zu verwalten, wie zum Beispiel Zähl- und Kistenregister. \luatex führt neue
Ressourcen ein, die anstandslos von Paketen gemeinsam benutzt werden können
müssen. Dieses Paket stellt die grundlegenden Werkzeuge dafür zur Verfügung:
die erweiterten konventionellen \tex Ressourcen, catcode Tabellen, Attribute,
Callbacks sowie zum Laden und Identifizieren von Lua Modulen. Ausserdem verfügt
es über Werkzeuge, um einige Kompatibilitätsprobleme mit älteren Versionen von
\luatex zu händeln.
\note{Warnung} Dieses Paket ist derzeitig im Konflikt mit dem \pk{luatex} Paket,
da sie nahezu das Gleiche machen. Die entsprechenden Paketautoren sind sich
dieser Situation bewusst und planen die beiden Pakete in der nahen Zukunft zu
verschmelzen. Noch ist nicht klar, wann dies geschehen wird.
\pkdesc{luatex}{\HO}{\luatex}{\latex, Plain}{%
macros/latex/contrib/oberdiek/}
Sehen Sie sich die Beschreibung des oben an. Dieses Paket stellt die selben
Kernfunktionalitaeten, ausser Callback-Management und Lua Moduldentifizierung,
zur Verfügung.
\pkdesc{lualibs}{\ER}{\luatex}{Lua}{%
macros/luatex/generic/lualibs/}[https://github.com/mpg/lualibs]
Eine Zusammenstellung von Lua-Bibliotheken und Erweiterungen der
Standardbibliotheken; meist abgeleitet von den \context-Bibliotheken. Wenn Sie
eine grundlegende Funktion brauchen, die Lua nicht zur Verfügung stellt, dann
prüfen Sie dieses Paket, bevor Sie eine eigene Implementierung vornehmen.
\subsubsection{Font internals}\label{fontint}
Diese Pakete werden von \pk{fontspec} geladen, um einige Low-Level-Probleme von
Schriften und Encoding zu haendeln. Ein normaler Anwender sollte nur
\pk{fontspec} nutzen, aber ein Entwickler sollte darüber Kenntnis haben.
\pkdesc{luaotfload}{\ER \& \KH}{\luatex}{\latex, Plain}{%
macros/luatex/generic/luaotfload/}[https://github.com/khaledhosny/luaotfload]
Low-level Open Type Schriften Lader, adaptiert von einem Teil von \context.
Grundsätzlich benutzt es die ©fontloader© Lua-Bibliothek und die entsprechenden
Callbacks, um eine Syntax für die ©\font© Primitive ähnlich wie tetex
bereitzustellen, und die entsprechenden Schriftenfunktionalitäten umzusetzen.
Zudem verwaltet es auch eine Schriftendatenbank für transparenten Zugriff auf
die Schriften im System und der \tex Distribution entweder durch den
Schriftfamiliennamen oder Dateinamen. Ausserdem hat es auch einen Schriftencache
für schnelleres Laden.
\pkdesc{euenc}{\WSPR, \ER \& \KH}{\xetex, \luatex}{\latex}{%
macros/latex/contrib/euenc/}[https://github.com/wspr/euenc]
Setzt die ©EUx© Unicode Schrift Enkodierungen für \latex's \pf{fontenc} System
um.
Derzeit benutzt \xelatex ©EU1© und \luatex ©EU2©. Enthält Definitionen
(\file{fd} Dateien) für Latin Modern, die von \pk{fontspec} geladene
Standardschrift.
\section{Andere Pakete}\label{other}
Bitte beachten Sie, dass diese Pakete nicht in einer bestimmten Reihenfolge
aufgelistet sind.
\subsection{Anwender-Level}
\pkdesc{luatextra}{\ER \& \MPG}{\luatex}{\latex}{%
macros/luatex/latex/luatextra/}[https://github.com/mpg/luatextra]
Lädt die üblichen Pakete, derzeitig \pk{fontspec}, \pk{luacode}, \pf{metalogo}
(Kommandos für Logos, unter anderem ©\LuaTeX© und ©\LuaLaTeX©), \pk{luatexbase},
\pk{lualibs}, \pf{fixltx2e} (Fixes und Erweiterungen fuer den \latex-Kern).
\pkdesc{luacode}{\MPG}{\luatex}{\latex}{%
macros/luatex/latex/luacode/}[https://github.com/mpg/luacode]
Stellt Kommandos und Makros zur Verfügung, die dabei helfen, Lua Code in eine
\tex-Quelle einzufügen, insbesondere Sonderzeichen.
\pkdesc{luainputenc}{\ER \& \MPG}{\luatex, \xetex, \pdftex}{\latex}{%
macros/luatex/latex/luainputenc/}[https://github.com/mpg/luainputenc]
Hilft, Dokumente zu kompilieren, die auf veralteten Enkodierenden basieren (sei
es in der Quelle oder in den Schriften). Wurde schon in der Einfuehrung
vorgestellt. Wenn \xetex benutzt wird, dann lädt es einfach \pf{xetex-inputenc};
unter \pdftex laedt es das standardmäßige \pf{inputenc}.
\pkdesc{luamplib}{\HH, \Taco \& \ER}{\luatex}{\latex, Plain}{%
macros/luatex/generic/luamplib/}[https://github.com/mpg/luamplib]
Stellt eine schöne Schnittstelle für die ©mplib© Lua Bibliothek zur Verfügung
die Metapost in \luatex einbettet.
\pkdesc{luacolor}{\HO}{\luatex}{\latex}{%
macros/latex/contrib/oberdiek/}
Ändert die Low-Level-Farbenimplementierung, um \luatex Attribute anstatt
whatsits. Dies macht die Implementierung robuster und korrigiert seltsame
Fehler, wie zum Beispiel die fehlerhafte Ausrichtung, wenn ©\color© zu Beginn
einer ©\vbox© gesetzt ist.
\pkdesc{luadirections}{\KH}{\luatex}{\latex, Plain, \context}{}
[https://github.com/khaledhosny/luadirections]
Hoehergelegene Schnittstelle zu multi-direcktionaler Unterstützung. Derzeit
nicht im CTAN vorhanden.
\subsection{Entwickler-Level}
\pkdesc{pdftexcmds}{\HO}{\luatex, \pdftex, \xetex}{\latex, Plain}{%
macros/latex/contrib/oberdiek/}
Auch wenn \luatex normalerweise eine Erweiterung von \pdftex ist, wurden dennoch
einige Primitiven entfernt (die, die durch Lua sozusagen abgelöst wurden) oder
umbenannt. Dieses Paket stellt diese Primitiven mit konsistenten Namen
durchgängig allen Engines zur Verfügung, unter anderem \xetex, welches vor
Kurzem einige dieser Primitiven implementiert hat, zum Beispiel ©\strcmp©.
\pkdesc{magicnum}{\HO}{\luatex, \pdftex, \xetex}{\latex, Plain}{%
macros/latex/contrib/oberdiek/}
Stellt einen hierarchischen Zugriff auf ``magic numbers'', wie Catcodes,
Gruppentypen usw., die intern von \tex und seinen Nachfolgern benutzt werden,
zur Verfügung. In \luatex wird eine effizientere Implementierung benutzt und
eine Lua-Schnittstelle ist bereitgestellt.
\pkdesc{lua-alt-getopt}{Aleksey Cheusov}{\cmd{texlua}}{command-line}{%
support/lua/lua-alt-getopt}[http://luaforge.net/project/lua_altgetopt]
Kommandozeilen-Options-Parser, nahezu vollständig kompatibel mit POSIX und GNU
getopt, zu benutzen in Kommandozeilen-LUA-Skripten, zum Beispiel
\cmd{mkluatexfontdb} aus \pk{luaotfload}.
\section{Die \cmd{luatex} - und \cmd{lualatex}-Formate}\label{formats}
Dieser Abschnitt ist nur für Entwickler und neugierige Anwender gedacht;
normale Anwender können dies gefahrlos überspringen. Die folgende Information
bezieht sich auf \texlive 2010 und höchstwahrscheinlich auch auf \miktex 2.9,
auch wenn ich dies nicht überprüft habe. Frühere Versionen von \texlive hatten
eicht unterschiedliche und unvollständigere Arrangements.
\para{Primitivennamen}
Wie im Abschnitt~\ref{things} erwähnt wurde, sind die Namen der
\luatex-spezifischen Primitiven nicht die selben im \cmd{lualatex} Format wie
im \luatex Handbuch. Im \cmd{lualatex} Format (das heisst \luatex mit dem Plain
Format) sind die Primitiven mit ihrem natürlichen Namen verfügbar, und
zusätzlich auch mit einem Präfix vorangestellten Namen, um die Entwicklung von
generischen Paketen zu erleichtern.
Die Rationale, entnommen der Datei \file{lualatexiniconfig.tex} , die dies für
das \cmd{lualatex} Format umsetzt, ist:
\begin{myquote}
\begin{enumerate}
\item Alle derzeitigen Makropakete laufen unproblematisch auf pdf(e) TeX,
daher sind diese Primitiven unberührt.
\item Andere nicht-TeX82 Primitiven in \luatex können
Namensueberschneidungen mit existierenden Makros in Makropaketen verursachen,
besonders wenn sie sehr ``natürliche'' Namen benutzen, wie zum Beispiel
©\outputbox©, ©\mathstyle© usw. Solch eine Wahrscheinlichkeit für
Überschneidungen ist nicht gewünscht, da die meisten existierenden
LaTeX-Dokumente ohne Änderungen unter \luatex laufen.
\item Das \luatex Team möchte keine systematische Präfixrichtlinie
vorschreiben, stellt aber netterweise ein Werkzeug zur Verfügung, mit dem
Präfixe gesetzt werden können. Deshalb haben wir uns entschieden, dies zu
nutzen. Vorher deaktivierten sogar die Extra-Primitiven, aber nun denken wir,
dass es besser ist, sie mit der systematischen Präfixvoranstellung zu
aktivieren, um zu vermeiden, dass jedes Makropaket (oder auch Anwender) diese
mit vielfaltigen und inkonsistenten Präfixen aktiviert (inkl. dem leeren
Präfix).
\item Der ©luatex©-Praefix wurde ausgewählt, da er bereits als Präfix für
einige Primitiven benutzt wird, wie zum Beispiel ©\luatexversion©: dadurch
erhalten diese nicht am Ende einen Doppelpräfix (für Details siehe
©tex.enableprimitives© im \luatex-Handbuch).
\item Die ©\directlua© Primitive wird mit ihrem natürlichen (erlaubt die
leichte Festellung von \luatex ) sowie mit einem Präfix versehen Namen
(©\luatexdirectlua© (für Konsistenz mit ©\luatexlatelua©)) bereitgestellt.
\item Einige Anmerkungen:
\begin{itemize}
\item Der offensichtliche Nachteile einer solchen Präfixrichtlinie ist,
dass die Namen, die von \latex oder einem generischen Makroersteller benutzt
werden, nicht mit den Namen im Handbuch übereinstimmen. Wir hoffen, dass sich
dies durch den Gewinn der Rückwärtskompatibilitaet ausgleicht.
\item Alle Primitiven, die das Thema Unicode Mathematik behandeln
beginnen bereits mit ©\U© und werden möglicherweise in der Zukunft mit den
Namen der \xetex-Primitiven übereinstimmen, sodass möglicherweise ein Präfix
für diese nicht notwendig oder gewünscht waren. Nichtsdestotrotz haben wir
versucht, die Präfixregeln so einfach wie möglich zu halten, sodass der
vorherige Punkt nicht noch schlimmer wird.
\item Der endgültige Name einiger Primitiven möge sich seltsam anhören,
besonders, die, die bereits den Namen einer Engine enthalten, wie zum Beispiel
©\luatexOmegaVersion©. Da aber \luatex nicht einfach ein Ersatz für Omega/Aleph
ist, empfanden wir es als falsch, ©\OmegaVersion© zur Verfügung zu stellen.
\item Vielleicht empfinden wir es eines Tages besser, alle Primitiven
ohne Präfix bereitzustellen. Wenn dies passiert, wird es einfach sein du
Primitiven ohne Präfix in dem Format hinzuzufügen, während die Namen mit Präfix
aus Kompatibilitätsgründen beibehalten werden. Andersherum würde dies nicht
funktionieren; zum Beispiel zu spät zu erkennen, dass wir die Primitiven ohne
Präfix nicht hätten bereitstellen sollen würde dann alle \luatex-spezifische
Makropakete kaputtmachen, die bereits geschrieben wurden.
\end{itemize}
\end{enumerate}
\end{myquote}
\para{\cs{jobname}}[jobname]
Der \latex Kernel (and eine Menge Pakete) benutzen Konstrukte wie
©\input\jobname.aux© aus verschiedensten Gründen. Wenn ©\jobname© Leerzeichen
enthält, funktioniert dies nicht richtig, da die Argumente von ©\input© beim
ersten auftretenden Leerzeichen enden. Um dies zu umgehen, setzt \pdftex
automatisch ©\jobname© in Anführungszeichen wenn gebraucht, aber \luatex tut
dies aus unerfindlichen Gründen nicht. Ein nahezu vollständiger Workaround ist
in den \latex-basierten (im Gegensatz zu den plain-basierten) \luatex-Formaten
vorhanden.
Dies funktioniert aber nicht, wenn \luatex als ©lualatex†'\input†name'©
aufgerufen wird, im Gegensatz zum gebräuchlicheren ©lualatex†name©. Um diese
Einschränkung zu umgehen, kann ein Jobname explizit angegeben werden, wie zum
Beispiel ©lualatex†jobname=name '\input†name'©. Oder besser noch, benutzen Sie
keine Leerzeichen in den Namen Ihrer \tex-Dateien.
Für mehr Details siehe
\href{http://www.ntg.nl/pipermail/dev-luatex/2009-April/002549.html}{diesen
alten Eintrag} und
\href{http://tug.org/pipermail/luatex/2010-August/001986.html}{ein neuerer
Eintrag}
auf der \luatex Mailingliste, und \file{lualatexquotejobname.tex} für die
Umsetzung eines Workarounds.
\para{babel}
\luatex bietet dynamisches Laden von Silbentrennungsmustern. Derzeitig gibt es
keine Unterstützung dafür in \pf{babel} aber einige Dateien wurden angepasst,
um ein halbdynamisches Laden bereitzustellen, welches eine bessere Ladezeit des
Formates erreicht. Dies ist nur eine Änderung in der Implementierung; nichts
sollte auf der Anwenderebene sichtbar sein. Ein verändertes Muster-Ladeschema
wird auch für Plain-basierten benutzt.
Dokumentation und Implementierungsdetails sind enthalten in
\file{luatex-hyphen.pdf}. Die Quellen sind Teil des
\href{http://tug.org/tex-hyphen/}{texhyphen Projektes}.
\para{codes}
Die Engine setzt selbst keine ©\catcode©s, ©\lccode©s, usw. für nich-ASCII
Zeichen. Korrekte ©\lccode©s sind im Besonderen essenziell, so dass
Silbentrennung funktioniert. Die Formate für \luatex enthalten nun
\file{luatex-unicode-letters.tex}, eine angepasste Version von
\file{unicode-letters.tex} aus der \xetex Distribution, welches die
entsprechenden Einstellungen konform zum Unicode Standard setzt.
Dies wurde hinzugefügt, nachdem \texlive 2010 ausgeliefert. Daher wird stark
empfohlen, dass Sie Ihre Installation aktualisieren, wenn Sie in den Genuss
einer korrekten Silbentrennung für nicht-ASCII Text kommen wollen.
\section{Dinge, die einfach funktionieren, teilweise funktionieren oder (noch)
gar nicht funktionieren}
\label{workornot}
\subsection{Voll funktionierend}\label{working}
\para{Unicode}
Konventionelles \latex bietet etwas Unterstützung für UTF-8 in Eingabedateien
an. Aber auf einer niedrigeren Ebene werden nicht-ASCII Zeichen in diesem Fall
nicht atomar behandelt: sie bestehen auch mehreren elementaren Teilen
(den \tex{}nikern als \emph{Tokens} bekannt). Demzufolge haben Pakete,
die Text Zeichen für Zeichen scannen oder andere atomare Operationen auf Zeichen
ausüben(z.B. das Ändern ihrer catcodes), oft Probleme mit UTF-8 in
konventionellem \latex. Zum Beispiel können for nicht-ASCII Zeichen kein short
verbatim mit \emph{tokens} benutzt werden usw.
Die gute Nachricht ist, dass mit \lualatex einige der Features dieser Pakete
damit beginnen, mit beliebigen Unicode Zeichen zu funktionieren ohne das Paket
anpassen zu müssen. The schlechte Nachricht ist, dass dies nicht immer wahr ist.
Siehe nächsten Abschnitt für die Details.
\subsection{Teilweise funktionierend}\label{partial}
\para{microtype}
Paket \pf{microtype} hat eingeschränkte Unterstützung für \luatex: präziser
gesagt, seit Version 2.4 2010/01/10 sind Protrusion und Expansion verfügbar und
standardmäßig aktiviert im PDF Modus, aber Kerning, Spacing und Tracking werden
nicht unterstützt (siehe Tabelle~1 in Abschnitt~3.1 von \file{microtype.pdf}).
Auf der anderen Seite, besitzt \pk{luaotfload}, dass durch \pk{fontspec}
geladen wird, eine Menge an Mikrotypografischer Funktionen. Das einzige Problem
besteht daher im Fehlen einer einheitlichen Schnittstelle.
\para{xunicode}
Das Paket \pf{xunicode} hat als Hauptaufgabe sicherzustellen, dass die üblichen
Steuersequenzen für nicht-ASCII-Zeichen (wie etwa ©\'e©) im Unicode-Kontext
korrekt arbeiten. Es könnte \emph{vermutlich} mit \luatex arbeiten, aber nur mit
expliziten Tests für \xetex. Wie dem auch sei, \pk{fontspec} benutzt einen
Trick, um es dennoch zu laden. Daher können Sie es nicht explizit laden, müssen
es auch nicht, da \pk{fontspec} sich ohnehin darum kümmert.
\para{encodings}
Wie im vorherigen Abschnitt erwähnt, gibt es einige Dinge, die mit UTF-8 unter
konventionellem Latex manchmal funktionieren, aber eben nicht immer. Zum
Beispiel können sie mit dem \pf{listings}-Paket unter \lualatex innerhalb
ihrer Listings nur Zeichen unterhalb von 256 verwenden - das heißt, Zeichen aus
dem Latin-1 Zeichensatz.
\para{metrics}
Dieser Abschnitt handelt nicht konkret von "funktionieren" oder "nicht
funktionieren", sondern eher, dass es nicht wie \pdftex oder \xetex
funktioniert. Sie werden kleinere Unterschiede im Layout und der Silbentrennung
ihres Textes bemerken. Diese entstehen wegen der Unterschiede zwischen zwei
Versionen derselben Schriftart bei Anwendung von verschiedenen Maschinen,
Anpassungen an der Silbentrennung, Ligaturen oder Kerning-Algorithmen, oder
Unterschieden in den verwendeten Silbentrennungs-Mustern (Muster von \pdftex
frieren in der Regel ein, aber \luatex und \xetex nutzen neuere Versionen
für Sprachen).
Wenn Sie jemals einen größeren Unterschied zwischen pdf\latex und \lualatex mit
der selben Schriftart sehen, dann ist es nicht ungewöhnlich, dass es sich um einen
Fehler in \lualatex\footnote{\lualatex 0.60 hatte einen Fehler, der die
Silbentrennung nach einer \code{-{}-{}-}-Ligatur am Ende eines Abschnittes
verhinderte.} handelt. Wie für gewöhnlich stellen Sie sicher, dass ihre
Distribution aktuell ist.
\par{babel}
Kurz gesagt: Es arbeitet fast immer ohne Probleme mit latinisierten Sprachen.
Für andere Sprachen kann es Probleme geben. Ein moderneres, weniger fertigeres
Paket für die Mehrsprachigkeit ist \pf{polyglossia}, das für \xelatex verfügbar
ist. Das Paket gibt es für \lualatex noch nicht.
\subsection{(Noch) nicht funktionierend}\label{notworking}
\para{Alte Encodings}[oldenco] Pakete, die mit Eingabedateien oder Ausgabe
(Schriftarten) spielen, werden sehr wahrscheinlich nicht mit \lualatex
funktionieren. Die gute Nachricht ist, dass Unicode einen viel mächtigeren
Ansatz zur Lösung von Encoding-Problemen bereitstellt, als die alten Pakete.
Daher werden Sie die alten Pakete ohnehin nicht benötigen. Leider ist noch nicht
alles in die glitzernde neue Welt von Unicode portiert worden und es wird
noch ein reduzierte Auswahl für einige Zeit geben, was besonders auf
Schriftarten zutrifft.
\para{soul} Das \pf{soul}-Paket benutzt einen schlauen Trick mit einer
Festbreitenschriftart, um Zeichen zu zählen. Wie dem auch sei, wegen Unterschiede
im Schriftartenhandling funktioniert dies nicht mit mehr als 256 Zeichen.
\para{Leerzeichen} Leerzeichen in Dateinamen sind nicht gut unterstützt, was
generell für die \tex Welt gilt.
\end{document}
% vim: spell spelllang=en
|