Interfaz de línea de comandos
Sinopsis (desde una línea de comandos de terminal):

pdflatex options argument

Ejecuta LaTeX en argument. En lugar de pdflatex también puedes usar (para salida PDF) xelatex o lualatex, o (para salida DVI) latex o dvilualatex, entre otros (véase Motores TeX).
Por ejemplo, esto ejecutará LaTeX en el archivo thesis.tex, creando la salida thesis.pdf.

pdflatex thesis

Ten en cuenta que .tex es la extensión del nombre de archivo predeterminada.
pdfTeX es una extensión del programa TeX original, al igual que XeTeX y LuaTeX (véase Motores TeX). Los dos primeros son completamente retrocompatibles y el segundo, casi. Quizás la nueva característica más fundamental para los tres es que el TeX original produce su propio formato DVI, mientras que los más nuevos pueden salir directamente a PDF. Esto les permite aprovechar las funciones adicionales en PDF como hipervínculos, compatibilidad con formatos de imagen modernos como JPG y PNG y programas de visualización omnipresentes. En resumen, si corres pdflatex o xelatex o lualatex entonces obtendrás PDF de forma predeterminada y tendrás acceso a todas sus modernas características. Si ejecutas latex o dvilualatex, obtendrás DVI. La descripción aquí asume pdflatex.
Véase Opciones de la línea de comandos, para una selección de las más útiles opciones de la línea de comandos. En cuanto a argument, el caso habitual es que no comienza con una barra invertida, por lo que el sistema lo toma como el nombre de un archivo y compila ese archivo. Si argument comienza con una barra invertida, el sistema lo interpretará como una línea de entrada LaTeX, que se puede utilizar para efectos especiales (véase Entrada de la línea de comandos).
Si no proporcionaste argumentos ni opciones, pdflatex solicita entrada desde la terminal. Puedes escapar de esto ingresando CTRL-D.
Si LaTeX encuentra un error en tu documento, de manera predeterminada se detiene y te pregunta al respecto. Véase Recuperación de errores, para obtener un resumen de qué hacer.

Opciones de la línea de comandos
Estas son las opciones de la línea de comandos relevantes para la autoría de documentos ordinarios. Para obtener una lista completa, intenta ejecutar ‘latex --help’ desde la línea de comandos.
Con muchas implementaciones puedes especificar opciones de la línea de comandos prefijándolos con ‘-’ o ‘--’. ESTE es el caso de ambos TeX Live (incluyendo MacTeX) y MiKTeX. Usaremos ambas convenciones indistintamente. Si una opción toma un valor, se puede especificar ya sea como un argumento separado (‘--foo val’), o como un argumento con un signo ‘=’ (‘--foo=val’), pero no puede haber espacios alrededor de ‘=’. Generalmente usaremos la sintaxis ‘=’.
-version 	Muestra la versión actual, como ‘pdfTeX 3.14159265-2.6-1.40.16 (TeX Live 2015/Debian)’ junto con una pequeña cantidad de información adicional, y sale.
-help 	Proporciona un breve mensaje de uso que sea útil como aviso y sale.
-interaction=mode 	 TeX compila un documento en uno de cuatro modos de interacción: batchmode, nonstopmode, scrollmode, errorstopmode. En errorstopmode (el predeterminado), TeX se detiene en cada error y solicita la intervención del usuario. En modo por lotes no imprime nada en la terminal, los errores se desplazan como si el usuario presionara RETURN en cada error, y los archivos que faltan hacen que se aborte el trabajo. En nonstopmode, aparece un mensaje de diagnóstico en la terminal pero como en el modo por lotes, no hay interacción del usuario. En scrollmode, TeX se detiene por falta de archivos o entrada del teclado, pero nada más.
Por ejemplo, iniciar LaTeX con esta línea de comandos

pdflatex -interaction=batchmode filename

elimina la mayor parte de la salida de la terminal.
-jobname=string 	Establece el valor de jobname de TeX en la cadena. El archivo de registro y el archivo de salida entonces se llamará string.log y string.pdf. véase Nombre del trabajo.
-output-directory=directory 	Escribe archivos en el directorio directory. Ya debe existir. Esto se aplica a todos los archivos externos creados por TeX o LaTeX, como el archivo .log para la ejecución, el .aux, .toc, etc., archivos creados por LaTeX, así como el principal archivo de salida .pdf o .dvi en sí mismo.
Cuando se especifica, el directorio de salida directory además primero se verifica automáticamente cualquier archivo que se ingrese, de modo que los archivos externos se pueden volver a leer, si se desea. El verdadero directorio actual (en el que se ejecutó LaTeX) permanece sin cambios, y también se comprobaron los archivos de entrada.
--enable-write18 	--disable-write18 	--shell-escape 	--no-shell-escape 	Habilita o deshabilita \write18{shell_command} (véase \write18). Las dos primeras opciones son compatibles con ambos TeX Live y MiKTeX, mientras que las dos segundas son sinónimos compatibles por TeX Live.
Habilitar esta funcionalidad tiene importantes implicaciones de seguridad, ya que permite que un archivo LaTeX ejecute cualquier comando. Por lo tanto, de manera predeterminada, no se permite \write18 sin restricciones. (El valor predeterminado para TeX Live, MacTeX y MiKTeX es permitir la ejecución de un número limitado de programas relacionados con TeX, que ellos distribuyen).
Por ejemplo, si invocas a LaTeX con la opción no-shell-escape, y en tu documento llamas a \write18{ls -l}, entonces no obtienes un error pero el archivo de registro dice ‘runsystem(ls -l)...deshabilitado’.
-halt-on-error 	Detiene el procesamiento en el primer error.
-file-line-error
-no-file-line-error 	Habilita o deshabilita filename:lineno:error-style error de mensajes. Estos solo están disponibles con TeX Live o MacTeX.

Entrada de la línea de comandos
Como parte de la invocación de la línea de comandos

latex-engine options argument

puedes especificar una entrada LaTeX arbitraria comenzando argument con una barra invertida. (Todos los motores admiten esto). Este te permite hacer algunos efectos especiales.
Por ejemplo, este archivo (que usa el paquete hyperref para hipervínculos) puede producir dos tipos de salida, una para leer en papel físico y otra para leer en línea.

\ifdefined\paperversion        % en el preámbulo
\newcommand{\urlcolor}{black}
\else
\newcommand{\urlcolor}{blue}
\fi
\usepackage[colorlinks=true,urlcolor=\urlcolor]{hyperref}
  ...
\href{https://www.ctan.org}{CTAN}  % en el cuerpo
  ...

Compilar este documento book.tex con la línea de comandos pdflatex book dará el enlace ‘CTAN’ en azul. Pero compilarlo con

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

tiene el enlace en negro. Usamos comillas dobles para evitar interpretación de los símbolos por el intérprete de la línea de comandos. (Este normalmente funciona en sistemas Unix y Windows, pero hay muchas peculiaridades de las comillas del intérprete, así que lee la documentación de tu sistema si necesitas).
De manera similar, desde el único archivo main.tex puedes compilar dos versiones diferentes.

pdflatex -jobname=students "\def\student{}\input{main}"
pdflatex -jobname=teachers "\def\teachers{}\input{main}"

La opción jobname está ahí porque, de lo contrario, ambos archivos estarían llamando a main.pdf y el segundo sobrescribiría el primero. (véase Nombre del trabajo).
En este ejemplo usamos la línea de comando para seleccionar qué partes de un documento incluir. Para un libro llamado mybook.tex y estructurado como esto.

\documentclass{book}
\begin{document}
   ...
\include{chap1}
\include{chap2}
  ...
\end{document}

la línea de comandos

pdflatex "\includeonly{chap1}\input{mybook}"

dará salida que tiene el primer capítulo pero ningún otro capítulo. Véase Dividir la entrada.

Nombre del trabajo
Ejecutar LaTeX crea una serie de archivos, incluido el PDF principal (o salida DVI), pero también incluye otros. Estos archivos se nombran con el así llamado jobname. El caso más común es también el más simple, donde, por ejemplo, el comando pdflatex thesis crea thesis.pdf y también thesis.log y thesis.aux. Aquí el nombre del trabajo es thesis.
En general, LaTeX se invoca como latex-engine options argument, donde latex-engine es el pdflatex, lualatex, etc. (véase Motores TeX). Si argument no comienza con una barra invertida, como es el caso anterior con thesis, entonces TeX considera que es el nombre del archivo para ingresar como el documento principal. Este archivo se denomina root file (véase Dividir la entrada, y \input). El nombre de ese archivo raíz, sin la extensión .tex si la hay, es el nombre del trabajo. Si argument comienza con una barra invertida, o si TeX está en modo interactivo, entonces espera el primer comando \input, y el nombre del trabajo es el argumento de \input.
Hay dos posibilidades más para el nombre del trabajo. Se puede especificar directamente con la opción -jobname, como en pdflatex -jobname=myname (véase Entrada de la línea de comandos para un ejemplo real).
La posibilidad final es texput, que es la última alternativa predeterminada si no hay otro nombre disponible para TeX. Es decir, si no se especificó la opción -jobname y la compilación se detiene antes de cualquier archivo de entrada, entonces el archivo de registro se llamará texput.log.
Un caso especial de esto es que en las versiones de LaTeX de (aproximadamente) 2020 o posterior, el nombre del trabajo también es texput si el primer \input ocurre como resultado de ser llamado por \documentclass o \RequirePackage. Así que esto producirá un archivo llamado texput.pdf:

pdflatex
"\documentclass{minimal}\begin{document}Hello!\end{document}"

Sin embargo, este caso especial solo se aplica a esos dos comandos. Así, con

pdflatex
"\documentclass{article}\usepackage{lipsum}\input{thesis}"

el archivo de salida es lipsum.pdf, ya que \usepackage llama a \input.
Dentro del documento, la macro \jobname se expande al nombre del trabajo. (Cuando ejecutas LaTeX en un archivo cuyo nombre contiene espacios, la cadena devuelta por \jobname contiene comillas de inicio y final coincidentes). En la expansión de esa macro, todos los caracteres son de catcode 12 (otro) excepto que los espacios son category 10, incluyendo letras que normalmente son catcode 11.
Debido a esta situación de catcode, usar el nombre del trabajo en un condicional se puede volver complicado. Una solución es usar la macro \IfBeginWith del paquete xstring en su variante estrella, que es insensible a catcode. Por ejemplo, en el siguiente texto la nota a pie de página “Incluyendo Respublica Bananensis Francorum.” solo está presente si el nombre de la tarea comienza con mi-doc.

Si  una democracia  es  solo  un régimen  donde  los ciudadanos  votan
entonces         todas         las        repúblicas         bananeras
\IfBeginWith*{\jobname}{my-doc}%           {\footnote{Incluyendo
Respublica Bananensis Francorum.}}{} son democracias.

Manipular el valor de \jobname dentro de un documento no camba el nombre del archivo de salida o el archivo de registro.

Recuperación de errores
Si LaTeX encuentra un error en tu documento, entonces te da un mensaje de error y te muestra un signo de interrogación, ?. Por ejemplo, ejecutando LaTeX en este archivo

\newcommand{\NP}{\ensuremath{\textbf{NP}}}
El problema de \PN{} es de un millón de dólares.

hace que muestre esto y espere la entrada.

! Secuencia de control Indefinida.
l.5 El problema
             \PN{} es uno de un millón de dólares.
?

Lo más sencillo es ingresar x y RETURN y arreglar el error de tipografía. En su lugar, podrías ingresar ? y RETURN para ver otros opciones.
Hay otros dos escenarios de error. El primero es que te olvidaste incluir el \end{document} o lo escribiste mal. En este caso LaTeX te da un ‘*’ indicador. Puedes volver a la línea de comandos escribiendo \stop y RETURN; este comando mejora la salida de LaTeX inmediatamente, sea cual sea el estado en el que se encuentre.
El último escenario es que escribiste mal el nombre del archivo. Por ejemplo, en lugar de pdflatex test puedes escribir pdflatex tste.

! No puedo encontrar el archivo `tste'.
<*> tste

(Presiona   Enter  para   volver   a  intentarlo   o  Control-D   para
salir). Escribe otro nombre de archivo de entrada:

Lo más simple es ingresar CTRL d (manteniendo presionadas las teclas control y flecha abajo al mismo tiempo), y luego vuelve a escribir la línea de comandos correcta.