Interface ligne de commande
Synopsis (depuis la ligne de commande d’un terminal) :

pdflatex options argument

Exécute LaTeX sur argument. À la place de pdflatex vous pouvez aussi utiliser (pour une sortie PDF) xelatex, ou lualatex, ou (pour une sortie DVI) latex ou dvilualatex, entre autres (voir TeX engines).
L’exemple suivant exécute LaTeX sur le fichier these.tex produisant en sortie these.pdf.

pdflatex these

Notez que .tex est l’extension par défaut des noms de fichier.
pdfTeX est une évolution du programme original TeX, comme le sont XeTeX et LuaTeX (voir TeX engines). Ils sont complètement rétrocompatibles. Mais le programme original avait son propre format de sortie, DVI, alors que les plus récents peuvent produire directement un PDF en sortie. Ceci leur permet de profiter des fonctions supplémentaires des PDF tels que les hyperliens, la prise en charge de formats modernes d’images tels que JPG et PNG, et les programmes de visionnage que l’on trouve de partout. En bref, si vous exécutez pdflatex ou xelatex ou lualatex alors par défaut vous obtenez un PDF et avez accès à toutes ses fonctions modernes. Si vous exécutez latex, ou dvilualatex, alors vous obtenez un DVI. La description faite ici suppose pdflatex.
Voir Command line options, pour une sélection des options de ligne de commande les plus utiles. Quant à argument, le cas habituel est qu’il ne commence pas par une controblique, dans ce cas le système le prend pour un nom de fichier, et compile ce fichier. Si argument commence avec une controblique, alors le système l’interprète comme une ligne d’entrée à LaTeX, ce qui peut être utilisé pour obtenir certains effets spéciaux (voir Command line input).
Si vous ne donnez aucun arguments ni options alors pdflatex invite à saisir à partir du terminal. Vous pouvez vous échapper de cela en entrant CTRL-D.
Si LaTeX trouve une erreur dans votre document alors par défaut il s’arrête et vous interroge à ce propos. Voir Recovering from errors, pour un aperçu de quoi faire.

Options passées à la ligne de commande
On décrit ici les options de ligne de commande qui sont pertinentes pour rédaction ordinaire de documents. Pour une liste complète, essayez d’exécuter ‘latex --help’ depuis la ligne de commande.
Avec nombre d’implémentations on peut spécifier les options de ligne de commande avec un préfixe ‘-’ ou ‘--’. C’est le cas à la fois pour TeX Live (y compris MacTeX) et MiKTeX. Ici on utilise les deux conventions indistinctement. Si une option prend une valeur, celle-ci peut être spécifiée soit comme un argument séparé (‘--truc bidule’), ou comme un argument unique avec un signe = (‘--truc=bidule’), à condition qu’il n’y ait aucun espace autour du =. On utilisera en général la syntaxe en =.
-version 	Affiche la version courante, comme ‘pdfTeX 3.14159265-2.6-1.40.16 (TeX Live 2015/Debian)’ ainsi qu’une petite quantité d’information supplémentaire, et se termine.
-help 	Produit un message bref d’utilisation servant d’aide-mémoire et se termine.
-interaction=mode 	 zTeX compile un document en l’un parmi quatre modes possibles d’interaction : batchmode, nonstopmode, scrollmode, errorstopmode. Dans le mode errorstopmode (le mode par défaut), TeX s’arrête à chaque erreur et demande une intervention de l’utilisateur. Dans le mode batchmode il n’imprime rien sur le terminal, on défile sur les erreurs comme si l’utilisateur appuyait RETURN à chaque erreur, et les fichiers manquants entraînent la terminaison de la tâche. Dans le mode nonstopmode, les messages de diagnostic apparaissent sur le terminal mais comme dans le mode batchmode il n’y a pas d’interaction avec l’utilisateur. Dans le mode scrollmode, TeX s’arrête en cas de fichiers manquants ou d’entrée clavier, mais pour nulle autre raison.
Par exemple, en démarrant LaTeX avec cette ligne de commande :

pdflatex -interaction=batchmode nomfichier

on élimine la plupart des sorties terminal.
-jobname=chaîne 	Règle la valeur du nom d’ouvrage de TeX à la chaîne de caractères chaîne. Le fichier journal et le fichier de sortie s’appelleront chaîne.log et chaîne.pdf. voir Jobname.
-output-directory=répertoire 	Écrit les fichiers dans le répertoire répertoire. Il doit déjà exister. Ceci s’applique à tous les fichiers externes créés par TeX ou LaTeX, tels que le fichier .log de l’exécution, les fichiers .aux, .toc, etc., créés par LaTeX, de même que le fichier de sortie principal .pdf ou .dvi lui-même.
Lorsqu’il est spécifié, le répertoire de sortie répertoire est aussi vérifié en premier automatiquement pour tout fichier lu en entrée, de sorte que les fichiers externes peuvent être relus en entrée, si désiré. Le vrai répertoire courant (dans lequel LaTeX été lancé) demeure inchangé, et est également vérifié pour trouver les fichiers en entrée.
--enable-write18 	--disable-write18 	--shell-escape 	--no-shell-escape 	Activation et désactivation \write18{commande_shell} (voir \write18). Les deux premières options sont prises en charge à la fois par TeX Live et MiKTeX, alors que les deux suivantes sont des synonymes pris en charge par TeX Live.
Activer cette fonction a des implications lourdes de sécurité, puisque cela permet à un fichier LaTeX d’exécuter n’importe quelle commande. Ainsi, par défaut, le \write18 non restreint n’est pas autorisé. (Le réglage par défaut de TeX Live, MacTeX, et MiKTeX est d’autoriser l’exécution d’un nombre limité de programmes en relation avec TeX, et qu’elles distribuent).
Pa exemple, si vous invoquez LaTeX avec l’option no-shell-escape, et que dans votre document vous appelez \write18{ls -l}, alors vous n’obtenez pas d’erreur mais votre fichier journal dit ‘runsystem(ls -l)...disabled’.
-halt-on-error 	Arrête le traitement sur la première erreur.
-file-line-error
-no-file-line-error 	Active ou désactive le style nomfichier:numéroligne:erreur des messages d’erreur. Ces options ne sont disponibles qu’avec TeX Live ou MacTeX.

Spécifier du code LaTeX sur la ligne de commande
Au sein de l’invocation de ligne de commande

pdflatex options argument

vous pouvez spécifier du code LaTeX arbitraire en entrée en commençant argument par une controblique (ce qui est pris en charge par tous les moteurs). Ceci permet de faire certains effets spéciaux.
Par exemple, ce fichier (qui utilise le paquetage hyperref pour les hyperliens) peut produire deux types de sortie, l’un pour une consultation sur document papier et l’autre pour une consultation sur écran.

\ifdefined\paperversion        % dans le préambule
\newcommand{\urlcolor}{black}
\else
\newcommand{\urlcolor}{blue}
\fi
\usepackage[colorlinks=true,urlcolor=\urlcolor]{hyperref}
  ...
\href{https://www.ctan.org}{CTAN}  % dans le corps
  ...

Lorsqu’on compile ce document book.tex avec la ligne de commande pdflatex book le lien ‘CTAN’ sera en bleu. Mais si on le compile avec

pdflatex "\def\paperversion{}\input book.tex"

alors le lien sera en noir. On utilise des guillemets anglais double pour empêcher l’interprétation des symboles par l’interpréteur de ligne de commande (désigné également par shell). (Ceci fonctionne généralement à la fois sur les systèmes Unix et Windows, mais il y a nombre de particularités dans l’usage des guillemets par les shells, lisez donc la documentation de votre système si besoin est).
De même, à partir d’un seul fichier principal.tex vous pouvez compiler deux versions distinctes.

pdflatex -jobname=etudiants "\def\etudiants{}\input{principal}"
pdflatex -jobname=professeurs "\def\profs{}\input{principal}"

L’option jobname est là parce que sinon les deux fichiers en sortie s’appelleraient principal.pdf et le second écraserait le premier. (voir Jobname).
Dans cet exemple on passe l’option draft au paquetage graphicx :

pdflatex "\PassOptionsToPackage{draft}{graphicx}\input{aa.tex}"

de sorte que les fichiers graphiques ne sont lus que pour l’information de dimension de boîte englobante, mais remplacés dans le PDF par une boîte de même taille ne contenant que le nom de fichier, ce qui accélère le temps de compilation, et économise l’encre d’imprimante.
Un autre exemple classique est de cribler certains chapitres à la compilation en les passant à \includeonly dans la ligne de commande. Ainsi, supposons qu’on a un fichier racine livre.tex ainsi formé :

\documentclass{book}
\begin{document}
\frontmatter
\include{pref}
\mainmatter
\include{chap1}
\include{chap2}
\appendix
\include{append}
\backmatter
\include{bib}
\end{document}

En compilant livre.tex avec la ligne de commande suivante :

pdflatex '\includeonly{chap1}\input{livre}

seul le chapitre contenu dans chap1.tex sera produit en sortie. Voir Splitting the input.
Dans ce dernier exemple, on force la date au 14 juillet 1789 :

pdflatex '\day=14 \month=7 \year=1789 \input revolution'

Ainsi, si le fichier revolution.tex contient ceci :

\documentclass[french]{minimal}
\usepackage{babel}
\begin{document}
\today\ c'est la révolution !
\end{document}

alors vous aurez en sortie un truc du genre :

14 juillet 1789 c’est la révolution !

Nom d’ouvrage de TeX
Exécuter LaTeX crée plusieurs fichiers, dont la sortie principale en PDF (ou DVI) et bien d’autres. Ces fichiers sont nommés selon ce qu’on appelle le nom d’ouvrage. Le cas le plus fréquent est aussi le plus simple : la commande pdflatex these crée these.pdf et aussi these.log et these.aux. Ici le nom d’ouvrage est these.
En général, LaTeX est invoqué comme moteur-latex options arguments, où moteur-latex est pdflatex, lualatex, etc. (voir TeX engines). Si arguments ne commence pas par une controblique, comme c’est le cas ci-dessus avec these, alors TeX insère un argument \input en tête de la liste d’arguments arguments et considère le texte formé en joignant les éléments de cette liste séparés par des blancs comme un code source pris en entrée. Ainsi la ligne de commande pdflatex these conduit LaTeX à compiler le code source suivant :

\input these

Ceci permet de faire une indirection vers le fichier these.tex qui est censé contenir l’entièreté du code source à compiler, et qu’on appelle à ce titre fichier racine (voir Splitting the input).
On appelle nom racine le nom du fichier racine, sans l’extension .tex s’il en a une. Voir \input, pour la gestion de l’extension .tex.
Notez bien, que si on a toujours un nom d’ouvrage, on n’a pas systématiquement de nom racine. En effet, dès lors qu’on a du code LaTeX passé sur la ligne de commande (voir Command line input), l’entièreté du code compilé n’est pas issu d’un seul fichier. En supposant ici et ci-après que le shell est bash, et donc que les guillemets anglais simples ou doubles sont interprétés par le shell (voir (info "(bash) Quoting")), considérez par exemple ligne de commande suivante :

pdflatex '\documentclass{article}\input' corps

Dans l’exemple précédent, on ne peut pas considérer corps.tex comme un fichier racine, puisqu’il ne peut pas être compilé de façon autonome vu qu’il ne contient pas la commande \documentclass. Par abus de langage on continue toutefois de parler de fichier racine si le code LaTeX passé en ligne de commande ne sert qu’à configurer la façon dont le fichier est compilé, comme dans :

pdflatex '\PassOptionsToClass{printout}{beamer}\input' mapresentation

où mapresenation.tex contient une présentation beamer, et on veut juste la compiler de façon adéquate pour une impression plutôt que pour une projection.
Voici par contre un exemple extrême où on n’a pas de fichier racine, considérez la ligne de commande :

pdflatex fic "Bonjour tout le monde~!" '\end{document}'

ce qui conduit pdflatex à compiler le code source suivant :

\input fic Bonjour tout le monde~! \end{document}

À supposer que fic.tex soit un fichier contenant \documentclass{minimal}\begin{document} le résultat sera un document PDF nommé fic.pdf et contenant le texte ‘Bonjour tout le monde !’.
Dans la mesure où on n’a pas systématiquement de fichier racine, la règle que TeX utilise pour déterminer implicitement le nom d’ouvrage, c.-à-d. lorsqu’il n’est pas spécifié explicitement par l’option -jobname (voir Command line options), est que le nom d’ouvrage soit le nom du fichier correspondant à l’argument passé au premier \input rencontré durant la compilation, débarrassé de l’extension .tex s’il en a une. Dans l’exemple précédent, le nom d’ouvrage est donc bien fic. Voir aussi plus bas la primitive \jobname pour une dérogation à cette règle.
Ce qui précède vaut également si TeX est en mode interactif, la seule différence est alors que arguments n’est pas passé entièrement sur la ligne de commande, mais saisi interactivement par l’utilisateur. Par exemple si dans le shell vous tapez la ligne de commande pdflatex, puis qu’à l’invite de TeX vous tapez these, vous aurez le même résultat que dans le premier exemple donné, à savoir si vous aviez tapé directement pdflatex these depuis le shell.
Dans la même veine, la seule différence si arguments commence avec une controblique est que le \input n’est pas inséré, et donc pdflatex "\input" these est sensiblement équivalent à pdflatex these.
Il y a deux autres possibilités pour le nom d’ouvrage. Pour ce qui est de la première, il peut être directement spécifié avec l’option -jobname, comme dans pdflatex -jobname=monnom (voir Command line input pour un véritable exemple).
La seconde possibilité est texput, c’est la valeur par défaut de repli si aucun autre nom n’est disponible pour TeX. Par exemple si aucune option -jobname n’a été spécifiée et que la compilation s’arrête avant qu’une commande \input ne soit trouvée, alors le fichier journal s’appelle texput.log.
Au sein du document, la primitive \jobname se comporte comme une macro qui se développe en le nom d’ouvrage. Quand le nom d’ouvrage contient au moins un blanc, un guillemet anglais est ajouté et début et fin de la chaîne renvoyée par \jobname et tout blanc est remplacé par un espace, c.-à-d. qu’un caractère tabulation est remplacé par un espace. De plus, au cours du développement, tous les caractères sont de catcode 12 (other), y compris les lettres qui normalement sont de catcode 11, mais à l’exception des espaces auquel un catcode 10 est attribué.
À cause de cette situation des catcodes, utiliser le nom d’ouvrage dans une expression conditionnelle peut devenir compliqué. Une solution est d’utiliser la macro \IfBeginWith du paquetage xtring dans sa forme étoilée pour être insensible au catcode. Dans le texte suivant par exemple, la note en bas de page « dont la Respublica Bananensis Francorum. » n’est présente que si le nom d’ouvrage commence par moi-meme.

Si une démocratie est juste un régime où les citoyens votent alors
toutes les républiques bananières\IfBeginWith*{\jobname}{moi-meme}%
{\footnote{dont la Respublica Bananensis Francorum.}}{} sont des
démocraties.

Redéfinir \jobname dans le code source avec un \renewcommand peut s’avérer vain et risqué. Tout d’abord, si c’était ce qui vous cherchiez, cela ne changera pas le nom d’ouvrage au sens où les fichiers créés directement par le moteur continuent à utiliser le nom d’ouvrage original : il s’agit notamment du fichier de sortie principale .pdf ou .dvi, du journal de compilation .log et du fichier de liste fichiers .fls si l’option -recorder a été utilisée. Par contre les fichiers auxiliaires .aux, .bib, etc. pourront être renommés car leur nom est produit par le noyau LaTeX en développant \jobname et non directement par le moteur, mais à condition bien sûr que la redéfinition soit faite avant l’ouverture des fichiers en question. Le paquetage multibib utilise ce truc pour gérer plusieurs fichiers de référence bibliographique.
La séquence de contrôle \jobname se comporte comme une macro, au sens où on peut faire dessus toutes les opérations qu’on ferait sur une macro, et notamment la développer, mais ce n’est pas une macro, c’est une primitive TeX. Ainsi, une seconde règle de détermination du nom d’ouvrage est que le premier développement de \jobname fige le nom d’ouvrage. Dans l’exemple suivant de ligne de commande :

pdflatex '\typeout{\jobname}\input' these

le nom d’ouvrage sera la valeur par défaut texput, et non these. En effet le code LaTeX \typeout{\jobname} a pour effet que \jobname est développé avant que le premier \input ne soit rencontré, et donc on déroge à la première règle énoncée plus haut, c.-à-d. que dans ce cas le nom d’ouvrage n’est pas donné par le premier \input.
Cette seconde règle a pour autre conséquence que dans l’exemple suivant de ligne de commande :

pdflatex '\documentclass{article}\input' corps

le nom d’ouvrage sera également texput, en effet en sous-main les commandes \documentclass et \RequirePackage développent \jobname, et donc la seconde règle déroge à la première règle, celle du premier \input rencontré.
Il est à noter que ce qui précède n’était pas vrai avec de vieilles versions de LaTeX (approximativement) antérieures à 2020. Avec ces vieilles versions \documentclass et \RequirePackage faisaient un \input sans développement préalable de \jobname et donc dans l’exemple précédent le nom d’ouvrage aurait été article, ce qui était déroutant.
Par ailleurs, l’équivalence entre pdflatex "\input" these et pdflatex these peut être mise en défaut lorsque le nom du fichier comprend un blanc. Comparer par exemple les deux lignes de commande suivantes :

pdflatex '\input' 'to\space\space to'
pdflatex 'to\space\space to'

En remplaçant les espaces par des espaces visibles ␣ pour la clarté de l’exposé, la première ligne de commande qui a un \input explicite cherche un fichier to.tex, ou à défaut to, et ajoute à la suite de l’\input de ce fichier, le code source \space␣to, en effet le premier des deux \space est consommé par l’\input. Elle aura donc pour nom d’ouvrage to. La seconde, qui a un \input implicite, a par contre un comportement qui dépend de la distribution. Avec MiKTeX elle est équivalente à la première. Mais avec TeX Live, elle cherche un fichier to␣␣to.tex, ou à défaut to␣␣to, et n’ajoute rien à la suite de l’\input de ce fichier. Elle aura donc pour nom d’ouvrage "to␣␣to".

Quand quelque chose se passe mal
Si LaTeX trouve une erreur dans votre document alors il vous produit un message d’erreur et vous invite à la saisie par un point d’interrogation, ?. Par exemple, exécuter LaTeX sur ce fichier

\newcommand{\NP}{\ensuremath{\textbf{NP}}}
Le problème \PN{} est mis à prix à un million de dollars.

a pour effet qu’il affiche ceci, et attende une saisie :

! Undefined control sequence.
l.5 Le problème \PN
           {} est mis à prix à un million de dollars.
?

Le plus simple est de saisir x et RETURN et de corriger la coquille. Alternativement vous pourriez saisir ? et RETURN pour voir les autres options.
Il y a deux autres scénarios. Le premier est que vous ayez omis le \end{document} ou fait une faute de frappe dessus. Dans ce cas LaTeX produit en invite ‘*’. Vous pouvez revenir à la ligne de commande en tapant \stop et RETURN.
Le dernier scénario est que vous ayez fait une faute de frappe sur le nom de fichier. Par exemple, au lieu de pdflatex test vous auriez tapé pdflatex tste.

! I can't find file `tste'.
<*> tste

(Press Enter to retry, or Control-D to exit)
Please type another input file name:

Le plus simple est de saisir CTRL D (en appuyant sur les touches Contrôle et d simultanément), et d’ensuite retaper la ligne de commande correcte.