SyncTeX es la maquinaria que te permite saltar en ambas direcciones entre un punto en tu fuente .tex y el punto correspondiente en el PDF terminado. Coloque el cursor en un párrafo y el espectador se desplazará hasta él; haga clic en una palabra en PDF y el editor saltará a esa línea de origen. Cuando estás revisando un documento extenso es indispensable. Esta página explica cómo funciona SyncTeX en general; Los pasos por editor se encuentran en la propia página de cada editor.
¿Qué es SyncTeX?
Debido a que TeX procesa todo el manuscrito a la vez para crear un PDF, el vínculo entre una línea de salida y el lugar en la fuente de donde proviene normalmente se pierde. SyncTeX (Sincronizar TeXnology) es la técnica que preserva esa correspondencia. Fue creado por Jérôme Laurens y ahora está integrado en los principales motores enviados con TeX Live y MiKTeX.
Funciona en dos direcciones. Pasar del origen al PDF es búsqueda directa (también llamada sincronización directa); ir desde PDF de regreso a la fuente es búsqueda inversa (o búsqueda inversa/hacia atrás). Ambos son una cooperación entre su editor y su visor PDF: el editor pregunta "muéstreme el resultado de esta línea y columna" o "a qué posición de origen se asigna esta coordenada PDF", y el visor o un ayudante responde.
Búsqueda directa e inversa
La búsqueda directa (fuente → PDF) responde a la pregunta que haces mientras escribes: "¿dónde terminará en la página el lugar que estoy editando?" Coloque el cursor en el editor, presione la tecla de búsqueda hacia adelante (o un elemento del menú como "Ir a PDF") y el espectador se desplaza a la página derecha y resalta brevemente el lugar correspondiente.
La búsqueda inversa (PDF → fuente) es al revés y brilla durante la revisión. ¿Lees el PDF y ves algo que arreglar? Haga clic en ese lugar (generalmente con una tecla modificadora) y su editor pasará al frente con el cursor en la línea correspondiente. El punto es que nunca tendrás que buscar en una fuente larga el lugar para editar.
En el fondo, la herramienta de línea de comandos synctex (incluida con SyncTeX) realiza la intermediación. La búsqueda directa corresponde al subcomando synctex view, la búsqueda inversa a synctex edit; los editores y espectadores los llaman o implementan ellos mismos el equivalente. Normalmente nunca los verás, pero ejecutarlos manualmente es una forma útil de aislar un problema.
El archivo .synctex.gz y su activación.
Esta correspondencia se registra en un archivo .synctex.gz que el motor escribe en el momento de la compilación. Dentro hay un mapa, comprimido con zlib, que combina archivo fuente, línea y columna con una página PDF y las coordenadas de un rectángulo (un cuadro) en ella. Se encuentra al lado de PDF, con el mismo nombre base y en la misma carpeta (main.tex → main.synctex.gz). Ni la búsqueda directa ni la inversa funcionan hasta que exista este archivo.
Para generarlo, pase -synctex=1 cuando compile (LuaTeX usa la forma larga --synctex=1). A mano se ve así. Lo necesitas en cada compilación, por lo que en la práctica lo dejas configurado una vez en tu editor o herramienta de compilación.
pdflatex -synctex=1 main.tex
xelatex -synctex=1 main.tex
lualatex --synctex=1 main.texEl valor se lee como bits. 1 proporciona el .synctex.gz comprimido con gzip; -1 proporciona un .synctex simple y sin comprimir (útil cuando quieres echar un vistazo al interior o depurar). En lugar de la línea de comando, también puede activarla desde la parte superior de la fuente con la primitiva TeX \synctex=1.
Las herramientas de construcción no son diferentes. Con latexmk, coloque -synctex=1 en el comando de compilación en su .latexmkrc. Combinado con la vista previa continua (-pvc), cada guardado activa una recompilación y una actualización de la vista previa, por lo que la búsqueda directa e inversa siempre actúa en un .synctex.gz actualizado.
$pdf_mode = 1;
$pdflatex = 'pdflatex -synctex=1 -interaction=nonstopmode %O %S';
# clean up the SyncTeX file too
@generated_exts = (@generated_exts, 'synctex.gz');Motores y la ruta DVI (pLaTeX / upLaTeX)
Los motores que emiten PDF directamente (pdfTeX, XeTeX y LuaTeX) entienden -synctex y escriben .synctex.gz ellos mismos; lo mismo ocurre con pdfLaTeX, XeLaTeX y LuaLaTeX. Hasta ahora, tan simple.
El pilar del japonés, pLaTeX/upLaTeX, es una canalización de dos pasos: primero emite un archivo DVI, que dvipdfmx luego convierte en PDF. Aquí también pasas -synctex=1 al motor (platex / uplatex). El motor primero escribe .synctex.gz en coordenadas DVI. Pero las coordenadas DVI y las coordenadas finales-PDF difieren según los desplazamientos y se aplica la ampliación dvipdfmx, por lo que esa brecha debe conciliarse después de la conversión.
Ese toque final es el subcomando synctex synctex update, cuyo trabajo es “actualizar el archivo SyncTeX una vez que se aplica un filtro dvi/xdv → pdf”. dvipdfmx en sí no tiene la opción -synctex; en su lugar, le entrega a synctex update la ampliación y los desplazamientos horizontales/verticales utilizados para la conversión (-m / -x / -y, los mismos valores pasados al filtro) para que las coordenadas se alineen. En la práctica, una herramienta de nivel superior como ptex2pdf o latexmk ejecuta toda esta cadena por usted.
Cómo lo activa cada editor
SyncTeX en sí es la base común; sólo la tecla o el clic que activa la búsqueda directa e inversa difiere entre editores y espectadores. A continuación se muestran algunas combinaciones representativas (consulte cada página para conocer la configuración completa). Tenga en cuenta que los visores sin soporte SyncTeX, como Adobe Acrobat/Reader, no pueden realizar búsqueda inversa; Las opciones comunes que sí lo hacen son Skim (macOS), SumatraPDF (Windows) y Okular (Linux).
| Editor (espectador) | Adelante (fuente →PDF) | Inversa (PDF → fuente) |
|---|---|---|
TeXShop / Skim | Cmd-clic en la vista previa | Shift-Cmd-clic en PDF |
TeXstudio | Ctrl-clic o "Ir a PDF" | Ctrl-clic o "Saltar a la fuente" |
VS Code (LaTeX Workshop) | Ctrl/Cmd+Alt+J | Específico de Viewer (por ejemplo, Mayús y clic en Okular) |
Una última palabra sobre la precisión. SyncTeX se asigna a la granularidad de los “cuadros” tipográficos, por lo que en el cuerpo del texto normal el salto es lo suficientemente preciso, pero dentro de las imágenes TikZ, la expansión de macros intrincadas o las entrañas de las tablas, la coincidencia puede redondearse a un cuadro cercano y colocar una palabra o dos fuera de su objetivo. Esta es una limitación del enfoque, no un error.
Un bucle de revisión con SyncTeX
SyncTeX no es sólo una configuración; es un hábito de corrección. En el último paso antes del envío de PDF, haga clic en una palabra sospechosa en PDF para regresar a la fuente, editar el manuscrito, guardarlo y reconstruirlo, luego use la búsqueda hacia adelante para regresar al lugar corregido. Si este bucle de revisión de SyncTeX falla, verifique en orden: si .synctex.gz se encuentra al lado de PDF, si la compilación usó -synctex=1 y si el espectador puede ejecutar el comando que llama al editor.
El archivo .synctex.gz no es ni el envío ni la fuente del registro; Es un mapa de trabajo regenerable. Normalmente, ignórelo en Git y sospeche que está obsoleto cada vez que se cambia el nombre de PDF o de la ruta de origen. Un desplazamiento de una palabra puede ser una limitación del mapeo a nivel de cuadro, pero un salto a un archivo completamente diferente generalmente significa una salida obsoleta o el archivo maestro incorrecto.