Tu primer documento

Su primer documento LaTeX puede ocupar una sola línea, y compilará: \documentclass{article}\begin{document}Hi\end{document}. Pásela por pdflatex y obtendrá de verdad un PDF de una página y 11 529 bytes. La mayoría de quienes se atascan en su primer documento se atascaron por saltarse lo que hace esa línea y copiar en su lugar una plantilla larga. Esta página parte de ese mínimo y se va abriendo: dónde acaba el preámbulo y empieza el cuerpo, cómo ejecutar el compilador, qué son realmente los archivos .aux y .log que aparecen de la nada, por qué a veces hacen falta dos pasadas y las trampas de % y $ con las que todo principiante tropieza el primer día, con la salida real del terminal en cada paso.

El documento LaTeX más pequeño que compila (hello world)

Tres órdenes y ninguna más. \documentclass{article} declara de qué tipo de documento se trata, \begin{document} abre el cuerpo y \end{document} lo cierra. Si falta una de las tres no hay PDF; con las tres funciona aunque entre ellas no haya nada. Guarde la versión legible de abajo como hello.tex. El archivo debe estar en UTF-8 y la extensión ha de ser .tex.

latex
\documentclass{article}
\begin{document}
This is my first document.
\end{document}

El article de \documentclass{article} es la clase. Una clase es el plano de todo el documento: la anchura de los márgenes, el tamaño de los títulos y el espacio a su alrededor, la existencia o no de capítulos. De serie vienen article (artículos, informes breves, notas técnicas, sin \chapter), report (informes más largos, con capítulos), book (libros, pensados para impresión a doble cara) y letter (cartas). Para japonés se elige jlreq o jsarticle. Si una revista o editorial le entrega su propio archivo de clase, úselo sin dudar: toda la discusión sobre normas de presentación desaparece.

Preámbulo y cuerpo: los dos mundos que separa \begin{document}

Todo lo anterior a \begin{document} es el preámbulo; todo lo posterior, el cuerpo. El preámbulo es donde se decide cómo se compondrá el documento, y nada de lo escrito allí llega a la página. En el cuerpo, en cambio, lo que se escribe es a grandes rasgos lo que se obtiene. Esa frontera no es una manía de LaTeX sino una necesidad: antes de componer un solo carácter, LaTeX debe tener fijados el tamaño del papel, la medida de línea, las fuentes y todos los paquetes que cargará. Por eso \usepackage solo puede ir en el preámbulo. Si se pone en el cuerpo, la compilación se detiene con ! LaTeX Error: Can be used only in preamble.

El error simétrico es igual de habitual: si pone prosa corriente en el preámbulo, obtendrá ! LaTeX Error: Missing \begin{document}. Desconcierta la primera vez —usted sí escribió \begin{document}—, pero LaTeX quiere decir «llegó texto antes de que empezara el cuerpo», es decir, hay texto por delante del inicio del cuerpo. Comente con % cualquier nota que deje en el preámbulo.

Compilar a PDF con pdflatex y latexmk

Escriba pdflatex hello.tex en un terminal. Si trabaja en un editor o en Overleaf, el botón «compilar» hace exactamente eso. La señal de éxito son las dos últimas líneas: Output written on hello.pdf y Transcript written on hello.log. Si aparecen, el PDF ya existe. El muro de rutas que desfila antes es la lista de archivos de clase y fuentes que se cargan; es salida normal y no hace falta leerla.

terminal
$ pdflatex hello.tex
This is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2024)
(./hello.tex
LaTeX2e <2023-11-01> patch level 1
(/usr/local/texlive/2024/texmf-dist/tex/latex/base/article.cls
Document Class: article 2023/05/17 v1.4n Standard LaTeX document class
...
Output written on hello.pdf (1 page, 31014 bytes).
Transcript written on hello.log.

Cuando algo falla, pdflatex puede imprimir ? y quedarse esperando. No aporree Intro: escriba x y pulse Intro para abortar. Si prefiere no tener nunca esa conversación, pdflatex -interaction=nonstopmode hello.tex llega hasta el final pese a los errores y lo escribe todo en el registro. Y conviene aprender pronto latexmk -pdf hello.tex: repite la compilación tantas veces como el documento necesite, con lo que el problema de «las dos pasadas» de la siguiente sección deja de ser suyo.

¿Y estos archivos nuevos? .aux, .log, .toc, .out

Una sola compilación y en la carpeta hay cuatro archivos más. No ha fallado nada: LaTeX se está dejando notas a sí mismo. Pase por pdflatex un documento con índice y una sección y, además de hello.tex, obtendrá hello.aux (132 bytes), hello.log (3250 bytes), hello.pdf (31 014 bytes) y hello.toc (59 bytes). El corazón del mecanismo es .aux. Al abrirlo contiene exactamente tres líneas.

text
% hello.aux, written by the first run
\relax
\@writefile{toc}{\contentsline {section}{\numberline {1}Introduction}{1}{}\protected@file@percent }
\gdef \@abspage@last{1}

Leído en voz alta: «la sección número 1, Introduction, está en la página 1» y «la última página es la 1». Es decir, .aux es un cuaderno de números y posiciones de página que se relee en la siguiente pasada. .toc es el índice provisional construido a partir de él, .log es el registro completo de la ejecución y .out solo aparece con hyperref: contiene los marcadores del PDF.

ExtensiónQué contiene¿Se puede borrar?
.texSu original; el único documento fuenteNunca. Es el único archivo que hay que respaldar y versionar
.pdfLa salida finalSí; se regenera desde la fuente cuando haga falta
.auxNúmeros de sección y figura, y la página a la que apunta cada etiquetaSí, pero la ejecución inmediatamente posterior mostrará ?? en las referencias
.logTodos los archivos cargados, todos los avisos, todos los erroresSí, pero mientras se persigue un error es el archivo más valioso
.tocLas entradas del índice y sus páginas, escritas en la pasada anteriorSí; la siguiente pasada solo imprimirá un índice vacío
.outLos marcadores del PDF que produce hyperrefSí; no aparece siquiera si no se carga hyperref

La regla práctica es breve. Versione solo el .tex y sus imágenes, y añada los auxiliares a la lista de exclusión. latexmk -c los limpia con una sola orden. Pero no los borre por costumbre: existen para ahorrar trabajo, y eliminarlos cada vez equivale a tomar a propósito el camino largo. Coja la escoba solo cuando un problema persista sin explicación.

Por qué hay que compilar dos veces: ?? y el aviso de repetición

Porque en la primera pasada LaTeX todavía no conoce la respuesta. Cuando escribe «véase la sección 1», LaTeX solo sabe el número y la página de esa sección después de haberla compuesto realmente, y las referencias casi siempre van por delante de aquello a lo que apuntan. Así que la primera pasada compone lo que puede mientras escribe las respuestas en .aux, y la segunda las relee y rellena los huecos. Con el índice pasa lo mismo: \tableofcontents está al principio del documento, pero su contenido no se conoce hasta el final. Este es el registro real de ambas pasadas.

terminal
$ pdflatex ref.tex          # first run, from a clean directory
No file ref.aux.
No file ref.toc.
LaTeX Warning: Reference `sec:intro' on page 1 undefined on input line 5.
LaTeX Warning: There were undefined references.
LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right.
Output written on ref.pdf (1 page, 33009 bytes).

# the PDF now reads:  "See Section ?? on page ??."

$ pdflatex ref.tex          # second run
Output written on ref.pdf (1 page, 34613 bytes).

# the PDF now reads:  "See Section 1 on page 1."

Tres cosas que observar. La primera pasada dice No file ref.aux.: el cuaderno todavía no existe. Las referencias se imprimen como ?? y aparece LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right. La palabra «Rerun» es la instrucción: vuelva a ejecutarlo. En la segunda pasada el aviso ha desaparecido y ?? se ha convertido en 1. El índice se comporta igual: en la primera pasada solo imprime su encabezado y hasta la segunda no aparece la lista. Un ?? en el PDF no indica que algo esté roto: es una petición de otra pasada.

Si contar pasadas le aburre, encárgueselo a latexmk. En un directorio limpio, latexmk -pdf ref.tex imprime Run number 1 of rule 'pdflatex', Run number 2 of rule 'pdflatex' y después Latexmk: All targets (ref.pdf) are up-to-date: ejecuta exactamente las dos pasadas necesarias y se detiene. Las bibliografías (BibTeX/biber) y los índices (makeindex) elevan la cuenta, y de eso también se ocupa latexmk. LaTeX Workshop de VS Code, TeXShop y Overleaf ya suelen llamar a latexmk por debajo.

Caracteres que no salen como se teclean: %, &, _, #, $

LaTeX tiene diez caracteres que significan otra cosa al teclearlos tal cual: # $ % & ~ _ ^ \ { }. El que más gente pilla el primer día es %, y pilla precisamente porque no provoca ningún error. Escriba Only 50% of the sample survived. con The rest did not. en la línea siguiente y el PDF imprimirá «Only 50The rest did not.» Todo lo que va de % al final de la línea se descarta como comentario, y ese final de línea desaparecido engancha la línea siguiente al mismo párrafo. No se informa de ningún error, así que nada avisa, y los porcentajes abundan en la escritura científica. La forma correcta es 50\%.

CarácterQué ocurre si se teclea tal cualCómo imprimirlo
%El resto de la línea desaparece en silencio como comentario. Sin error\%
$Abre o cierra el modo matemático; solo, arrastra todo lo siguiente a la fórmula\$
&Separador de columnas en tablas y alineaciones; en texto da ! Misplaced alignment tab character &.\&
_Subíndice en matemáticas; en texto da ! Missing $ inserted.\_
^Superíndice en matemáticas; en texto, ! Missing $ inserted. igual que con _\textasciicircum{}
#Marca de argumento de macro; da ! You can't use ... in horizontal mode.\#
~Un espacio irrompible (como en Fig.~1); nunca se imprime como carácter\textasciitilde{}
\Inicia una orden; lo que sigue se lee como nombre de orden\textbackslash
{ }Delimitan argumentos y grupos; no aparecen nunca en la salida\{ y \}

Otras dos costumbres resultan molestas justamente por no provocar error. La primera: una orden se come el espacio que la sigue. \LaTeX is a macro package. sale como «LATEXis a macro package.», porque LaTeX consume el espacio siguiente mientras averigua dónde acaba el nombre de la orden. Se arregla con llaves vacías, \LaTeX{} is, o con \LaTeX\ is. La segunda: las comillas. Teclear "hello" da una comilla de cierre en ambos extremos (”hello”). La de apertura se escribe con dos acentos graves y la de cierre con dos apóstrofos, de modo que lo correcto es ``hello''.

Leer los primeros errores: ! Missing $ inserted. y compañía

Lea solo la primera línea que empieza por ! y la línea l. que viene justo después. l. abrevia «line»; el número siguiente es el de línea, el contenido de esa línea se imprime con él y queda partido en dos exactamente donde TeX tropezó. El punto de corte es la escena del crimen. Esto es lo que produce escribir x_1 en texto corriente. Como TeX se empeña en seguir tras el primer error, los que vienen después suelen ser una reacción en cadena. Corrija solo el primero y vuelva a ejecutar.

terminal
$ pdflatex e2.tex      # line 3 of the source reads: The value of x_1 is small.
! Missing $ inserted.
<inserted text>
                $
l.3 The value of x_
                   1 is small.

$ pdflatex e3.tex      # line 3 reads: Smith & Jones wrote it.
! Misplaced alignment tab character &.
l.3 Smith &
            Jones wrote it.

$ pdflatex sc.tex      # line 3 reads: Issue #42 and more.
! You can't use `macro parameter character #' in horizontal mode.
l.3 Issue #
           42 and more.

$ pdflatex e5.tex      # \begin{itemize} was never closed
! LaTeX Error: \begin{itemize} on input line 3 ended by \end{document}.

$ pdflatex e4.tex      # \end{document} is missing entirely
*** (job aborted, no legal \end found)
!  ==> Fatal error occurred, no output PDF file produced!

! Missing $ inserted. significa «algo que solo funciona en modo matemático apareció en el texto, así que TeX insertó un $». La causa es casi siempre _ o ^: o se convierte en fórmula de verdad, $x_1$, o se escapa, x\_1. ! LaTeX Error: \begin{itemize} on input line 3 ended by \end{document}. indica un entorno sin cerrar, y es de los errores más amables porque dice en qué línea se abrió el entorno. El de aspecto más temible, ! ==> Fatal error occurred, no output PDF file produced!, suele significar solo que falta \end{document}. Y ! Undefined control sequence. es una errata (\sectoin) o un paquete que se olvidó cargar.

Añadir título y apartados para convertirlo en un informe

A partir de aquí solo hay que ir sumando. Ponga \title, \author y \date en el preámbulo y llame a \maketitle al principio del cuerpo: el título queda compuesto. Los apartados creados con \section y \subsection se numeran solos, y \tableofcontents construye el índice (que, como vimos, no aparece hasta la segunda pasada). \date{\today} se convierte en la fecha de compilación, y un apartado que no se quiera numerar lleva un asterisco: \section*{...}.

latex
\documentclass{article}
\title{My First Report}
\author{Taro Yamada}
\date{\today}
\begin{document}
\maketitle
\tableofcontents

\section{Introduction}
Blank lines start new paragraphs. Line breaks in the source do not.

\section{Method}
\subsection{Setup}\label{sec:setup}
Only 50\% of the sample survived. See Section~\ref{sec:setup}.
\end{document}

El ejemplo incluye además la regla más importante para escribir el cuerpo: los saltos de línea de la fuente se ignoran y una línea en blanco inicia un párrafo nuevo. Corte tras cada frase o deje tres líneas en blanco: la salida es la misma. LaTeX fija los cortes definitivos mirando el párrafo entero. Inserte una línea en blanco solo donde quiera de verdad un párrafo nuevo.

Añadir funciones con paquetes: \usepackage

Las funciones que faltan vienen de los paquetes, y añadir uno son unas líneas \usepackage{...} en el preámbulo. Las imágenes piden graphicx, las matemáticas serias amsmath, otros márgenes geometry, los enlaces y marcadores de PDF hyperref. Miles de paquetes acompañan a una distribución como TeX Live, y el archivo del que proceden todos es CTAN, la Comprehensive TeX Archive Network. Pero no amontone paquetes de entrada. Conserve solo aquellos cuya presencia pueda justificar: cuando dos chocan y producen algo como Option clash for package ..., el trabajo de aislar al culpable crece con el número que haya cargado.

latex
\documentclass[a4paper,11pt]{article}
\usepackage{graphicx}                  % include images
\usepackage{amsmath}                   % proper math environments
\usepackage[margin=25mm]{geometry}     % page margins
\usepackage{hyperref}                  % links and PDF bookmarks; load it last
\begin{document}
\section{Results}
Text, images and equations go here.
\end{document}

Por convención, hyperref se carga el último. Funciona reescribiendo órdenes de otros paquetes, así que cargarlo pronto hace que un paquete posterior sobrescriba sus cambios. Y con eso queda cubierto el primer día: el documento mínimo, la separación preámbulo/cuerpo, la compilación, los archivos auxiliares, la segunda pasada, los caracteres especiales y sus primeros errores. A partir de aquí, escriba lo que realmente quiera escribir y añada funciones de una en una según le hagan falta.