Für einen ersten Umstieg von `pdflatex` auf `lualatex` oder `xelatex` gibt es wenig zu beachten.
Eingabecodierung:
=================
Wichtig ist, dass für beide das Dokument in UTF8 codiert sein sollte. Also sollte man ggf. sein Dokument zunächst umcodieren, falls es noch nicht diese Codierung besitzt. Siehe dazu:
* [Antwort auf: Warum werden die Umlaute falsch dargestellt?](http://texwelt.de/wissen/fragen/245#251)
* »[Wie überprüfe ich die Standardeingabekodierung in meinem Editor?](http://texwelt.de/wissen/fragen/2656/wie-uberprufe-ich-die-standardeingabekodierung-in-meinem-editor)«
Anschließend entfernt man das Laden des Pakets `inputenc`, `inputenx` oder `selinput` sowie ggf. deren Befehle (bei `selinput` beispielsweise `\SetInputMapping`) aus dem Dokument. Zwar gibt es für `lualatex` das Paket `luainputenc`, dieses sollte aber nur notfalls *notfalls* als Ersatz für `inputenc` verwendet werden, da es den Vorteil der nativen UTF8-Codierung beseitigt und hin und wieder Probleme aufwirft.
aufwirft. Wann immer möglich sollte man stattdessen darauf verzichten und einfach mit UTF8-codierten Dateien arbeiten.
Fontauswahl und Fontcodierung:
==============================
Wird bisher das Paket `fontenc` geladen, so kann man es entfernen. Stattdessen ist das Laden von Paket [`fontspec`](http://www.ctan.org/pkg/fontspec) empfehlenswert. Dieses verwendet intern ebenfalls `fontenc` und stellt eigene Font-Codierungen für `xelatex` und `lualatex` ein. Es kann also auch nach `fontenc` geladen werden. Gleichzeitig stellt das Paket die Standardschrift auf Latin Modern um. Latin Modern ist grob gesagt eine Erweiterung von Computer Modern. Gegenüber European Computer Modern, das von `\usepackage[T1]{fontenc}` geladen wird, gibt es aber deutliche Unterschiede. Hat man bisher eine andere Schrift durch Laden eines Fontpakets oder durch Umdefinierung von `\rmdefault` oder `\sfdefault` oder `\ttdefault` eingestellt, so sollte man dies zunächst auskommentieren.
Einige Font-Pakete wie [`libertine`](http://www.ctan.org/pkg/libertine) unterstützen aber auch `lualatex` und `xelatex`. Im Zweifelsfall aber ausprobieren. Solche Pakete stützen sich bei `lualatex` und `xelatex` dann ebenfalls auf `fontspec`. Über dieses Paket kann man (systemweite) `TrueType`, `Type1` und `OpenType`-Fonts laden. Dazu dienen die Anweisungen `\setmainfont` für die Hauptschrift (normalerweise eine Antiqua), `\setsansfont` für die serifenlose Schrift und `\setmonofont` für die dicktengleiche (= nicht proportionale) Schrift.
Schwieriger wird es, wenn man im Dokument auch noch die Anweisungen `\fontfamily`, `\fontencoding` oder `\usefont` verwendet. Auch diese Anweisungen sollte man dann durch entsprechende `\fontenc`-Anweisungen ersetzen.
`\fontspec`-Anweisungen ersetzen, wobei alternativ auch die Möglichkeit besteht, weitere Font-Familien mit `\newfontfamily` zu definieren.
Was noch?
=========
Die erste Ausführung von `xelatex` oder `lualatex` (ggf. auch die erste Ausführung nach einem Update) dauert normalerweise recht lange, weil dabei die Font-Datenbank neu aufgebaut wird. Bei den weiteren LaTeX-Läufen wird es dann besser. Die Geschwindigkeit von `pdflatex` darf man aber nicht erwarten.
Manchmal, insbesondere wenn man Code der Art hat:
\ifpdf
% Tue etwas bestimmtes, wenn pdflatex verwendet wird
\else
% Tue etwas anderes, wenn latex verwendet wird
\fi
kommt es zu weiterem Anpassungsbedarf. Stellt man einen solchen Bedarf fest, findet aber selbst keine Lösung, so stellt man am besten eine Detailfrage mit entsprechendem Minimalbeispiel.
Viele moderne Pakete, die spezielle Möglichkeiten von `pdflatex`, `xelatex` oder `lualatex` nutzen, sind auch schon darauf vorbereitet, mit allen dreien zusammen zu arbeiten und geben ggf. in der `log`-Datei Auskunft, wenn sie irgendwelche Features mit einem der dreien nicht unterstützen. Wenig Probleme gibt es dagegen mit gängigen Klassen. Mit Verlagsklassen sind dagegen häufiger Probleme zu beobachten. Da sollte man sich schlicht an die Vorgaben des Verlags bezüglich der Wahl von `pdflatex`, `xelatex` oder `lualatex` halten.
Natürlich bringt der Umstieg vor allem dann etwas, wenn man anschließend die neuen Möglichkeiten auch nutzt. Siehe dazu die Antwort von Henri.
Beispiele:
==========
Im **einfachsten Fall** hat man ein Dokument der Art:
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{mwe}
\begin{document}
\Blinddocument
\end{document}
Hier ist die Umstellung sehr einfach:
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{fontspec}
\usepackage{mwe}
\begin{document}
\Blinddocument
\end{document}
Verwendet man bisher beispielsweise das Paket `libertine`, so ändert sich genauso wenig:
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{libertine}
\usepackage{mwe}
\begin{document}
\Blinddocument
\end{document}
wird zu:
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{libertine}
\usepackage{mwe}
\begin{document}
\Blinddocument
\end{document}
Daran denken: War bei `inputenc` eine andere Codierung als `utf8` (oder `utf8x`) angegeben, so muss das Dokument zunächst umcodiert werden.
**Etwas komplizierter** wird es, wenn man eine Schrift geladen hat, dessen Schriftpaket `fontspec` nicht selbst unterstützt, beispiwelsweise `charter`:
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{charter}
\usepackage{mwe}
\begin{document}
\Blinddocument
\end{document}
würde im ersten Schritt ebenfalls zu
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{fontspec}
\usepackage{mwe}
\begin{document}
\Blinddocument
\end{document}
Dabei ändert sich natürlich die Schrift. Im zweiten Schritt sucht man in seinen Systemfonts ebenfalls nach der verwendeten Schrift. Im Beispiel könnte das `XCharter-Roman.otf` leisten. Diese laden wir mit `\setmainfont`:
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{fontspec}
\setmainfont{XCharter-Roman}
\usepackage{mwe}
\begin{document}
\Blinddocument
\end{document}
Dabei stellen wir fest, dass der fette Schnitt in den Überschriften nun fehlt. `fontspec` böte die Möglichkeit per optionalem Argument bei `\setmainfont` die Namen der Fonts für fette, kursive und weitere Schnitte explizit anzugeben. Das Paket besitzt aber auch eine gewisse Intelligenz. Wenn wir als Namen nur `XCharter` angeben, sucht es selbst nach passenden Schnitten:
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{fontspec}
\setmainfont{XCharter}
\usepackage{mwe}
\begin{document}
\Blinddocument
\end{document}
führt daher bereits zum Ziel. Das Paket `fontspec` bietet unzählige weitere Möglichkeiten, die man sich unbedingt anschauen sollte.
Sonderfall DVI-Datei:
=====================
Einige Anwender gehen noch immer den Weg über `latex` nach `DVI`, weiter mit `dvips`, nach `PostScript` und schlussendlich mit `pstopdf` nach `PDF`. Bei `lualatex` gibt es mit `dvilualatex` noch immer die Möglichkeit, einen solchen Weg zu beschreiten. Empfehlenswert ist dieser aber nur bedingt. Stattdessen sollte man sich Gedanken machen, Grafiken mit `epstopdf` passend umwandeln zu lassen oder `pstricks`-Abbildungen über `pstricks-pdf` o. ä. zu realisieren. Bei `xelatex` gibt es den Vorteil, dass damit der Umweg mit `dvips` und `pstopdf` überhaupt nicht erforderlich ist, da `xelateX` auch `EPS`-Dateien verarbeiten kann und auch pstricks mit `xelatex` möglich ist.