La sincronización es una importante utilidad incorporada en Textures, una implementación comercial de TeX para Macintosh Classic desarrollada por Blue Sky TeX Systems. Al usar la sincronización, un autor puede hacer clic en la ventana del dvi previsto e, inmediatamente, el cursor aparece en el correspondiente lugar de la ventana de código. Blue Sky ha prometido una versión nativa para MacOS X de Textures, pero todavía no la ha lanzado. La implementación de la sincronización en Textures es admirada por su habilidad para localizar el correspondiente punto en el código.

Desde esa implementación, varios sistemas TeX han incorporado, aproximadamente, la misma utilidad. Para ello han usado estilos adicionales que también hacían que TeX escribiera información extra en el archivo dvi. Ninguna de estas aproximaciones (incluyendo los métodos incorporados en TeXShop, y que describimos más adelante) es tan precisa como el método de Textures.

Desde la versión 2.18, TeXShop proporciona sincronización entre el código usando una nueva tecnología denominada SyncTeX introducida por Jérôme Laurens; cuando esta tecnología no está disponible, TeXShop utiliza un antiguo método de sincoronización basado en búsquedas, y que fue introducido en TeXShop 2.0. Para usar la sincronización, haz click sobre una frase de la ventana con código mientras pulsas la tecla comando de Apple; el pdf se desplaza, en su correspondiente ventana, hasta el lugar oportuno, y la frase aparece destacada, rodeada por un círculo rojo. De manera similar, si haces comando-click en la ventana con el pdf, la ventana con el código se abre (si es necesario), el texto se desplaza hasta el lugar apropiado, y la frase aparece resaltada en amarillo.

Si instalas TeXShop por primera, el método basado en SyncTeX está activo por defecto. Sin embargo, los usuarios que hayan instalado previamente una versión antigua de TeXShop, y luego la hayan actualizado, necesitarán cambiar tres ítems en las preferencias para lograr que SyncTeX funcione. En el apartado «Misc» de las preferencias, pon que el método de sincronización sea SyncTeX. Y, en el apartado «Motor», cambia los dos ítems correspondientes a pdfTeX por

  pdftex --shell-escape --synctex=1
  pdflatex --shell-escape --synctex=1

SyncTeX fue introducido por Jérôme Laurens en 2008. Hace que TeX cree un archivo adicional con extensión «.synctex», y que contiene la información que se necesita para sincronizar la salida en pdf con el código tex. Es el propio motor de TeX el que se encarga de generar este archivo. La composicion de página no se ve afectada en absoluto cuando se usa SyncTeX; en particular, no cambian los cores de línea y de página, como ocurría con la antigua tecnología basada en pdfsync. SyncTeX proporcionará una sincronización aún más precisas cuando los desarrolladores dominen todas sus posibilidades.

SyncTeX requiere las versiones de pdftex, pdfetex y xetex introducidas en TeX Live 2008 y disponibles en MacTeX-2008. Para que lo puedan emplear los usuarios de distribuciones de TeX antiguas, TeXShop incorpora un segundo método de sincronización basado en búsquedas. Funciona con todos los motores de composición, y el código tex no necesita ningún cambio para poder usarlo. El método basado en búsquedas utiliza una habilidad introducida en Mac OS X 10.4, y que permite a los desarrolladores programar fácilmente la búsqueda de cadenas de texto en archivos pdf. Así, el método de búsqueda lo que hace es encontrar cadenas de texto iguales en el código tex y el archivo pdf. Este método no requiere ningún archivo de estilo, así que teóricamente funciona cualquiera que sea el modo de composición de páginas que se use. Pero falla cuando la cadenas de texto en el pdf es distinta de la del código tex; en particular, no funciona en expresiones matemáticas.

Por defecto, TeXShop primero intenta SyncTeX. Pero si SyncTeX falla o el archivo «.synctex» no existe, TeXShop utiliza el método de sincronización basado en búsquedas.

En realidad, TeXShop proporciona sincronización de tres maneras: SyncTeX, búsquedas, and PdfSync. El tipo de sincronía que se quiere usar se establece en el apartado «Misc» en las preferencias. Las opciones «PdfSync» y «Búsquedas» se corresponden, respectivamente, con los métodos basado en búsquedas y en pdfsync, mientras que la opción «Ambos» utiliza el método de búsquedas y, si éste falla, pdfsync. Esta complejidad se debe a razones históricas. Pdfsync era una antigua tecnología que ha sido reemplazada por SyncTeX, y que ya no explicaremos aquí.

Para usar SyncTeX, necesitamos llamar al motor de composición con un ‘flag’ especial que le indique que debe generar el archivo «.synctex». Esto se logra añadiendo la siguiente opción cuando se llama al motor:

  --synctex=1

Por ejemplo, para usar SyncTeX con pdftex y pdflatex, el apartado «Motor» del diálogo de preferencias debe establecer las llamadas a TeX y LaTeX mediante

  pdftex --shell-escape --synctex=1
  pdflatex --shell-escape --synctex=1

Conviene aquí destacar que, si la parte «--synctex=1» está presente pero TeXShop usa un antiguo motor que no soporta ese flag, la composición de páginas se lleva a cabo sin problemas, aunque el motor informará en la consola de que que ha reconocido el flag «synctex».

Hay que hacer cambios similares en las llamadas a simpdftex, y a cualquier otro motor que hayas creado. Todo eso tendrás que hacerlo por ti mismo si quieres emplear SyncTeX con esos motores. En distribuciones de TeX modernas, lo más común es componer páginas con pdftex o con xetex, y ambos soportan el flag «synctex». No lo hace, sin embargo, el programa TeX original de Donald Knuth.

SyncTeX es muy nuevo, y TeXShop comenzó a soportarlo en agosto de 2008. Cuando los desarrolladores comprendan más claramente toda la que proporciona la utilidad synctex de Jérôme Laurens, la precisión de TeXShop al sincronizar mejorará.

A partir de ahora, vamos a explicar el antiguo método de sincronización basado en búsquedas; la mayor parte de estos comentarios no se aplican a SyncTeX.

Para sacar provecho de la sincronización basada en búsquedas, es útil conocer el mecanismo interno. Supón que haces click en un punto del código fuente. TeXShop obtiene una cadena de 20 caracteres centrada en el click, y lo busca en el correspondiente archivo pdf. Si la encuentra exactamente una vez, nos la muestra, rodeada de un círculo rojo. Pero, a menudo, las cadenas de código contienen comandos, que no aparecen como texto en el pdf; en particular, esto siempre ocurre al componer fórmulas matemáticas. Así que, si la búsqueda falla, TeXShop retrocede 5 caracteres, obtiene una nueva cadena de 20 caracteres, y lo intenta de nuevo. Si es necesario, repite esta operación hasta 20 veces. Si en ninguno de estos intentos tiene éxito, lo intenta de nuevo 20 veces más, esta vez con cadenas por delante de la cadena original, en lugar de por detrás. Si ninguna de estas operaciones de búsqueda tiene éxito, TeXShop renuncia.

Como consecuencia, es obvio que es mejor hacer click en frases que en fórmulas. Los párrafos que contienen muchos comandos de composición tampoco se sincronizan bien. Sin embargo, la experiencia muestra que estas búsquedas generalmente tienen éxito, y que no hace falta preocuparse demasiado de elegir un punto adecuado sobre el que hacer click.

La sincronización desde la ventana con el pdf a la ventana con el código funciona de la misma manera, pero tiene una complicación adicional. Los proyectos pueden contener muchos archivos de código, insertados por medio de comandos \include o \input. TeXshop maneja esta complicación asumiendo que todos los \include e \input aparecen en el archivo raíz, por medio de comandos \include{este archivo}, \input{este archivo} o \import{este archivo}. En la implementación inicial (en la versión 2.0) TeXShop hacía una lista de los primeros 60 archivos y buscaba en todos ellos; consideraba que la búsqueda había tenido éxito si la cadena de texto aparecía exactamente en uno de estos archivos. Si la cadena está en un archivo sin abrir, TeXShop lo abre. Entonces, el texto se desplaza hasta el lugar apropiado, y la frase aparece resaltada en amarillo. (Ese número de 60 archivos puede cambiar en el futuro; escribe si necesitas que la búsqueda alcance a una mayor cantidad de archivos.)

ConTeXt usa un método diferente de incluir archivos, así que una búsqueda en los archivos que aparecen en los \include y los \input no usará los archivos incluidos con el método de ConTeXt. Existe un método manual de indicar los archivos que tienen que ser rastreados en la sincronización; este método funciona con cualquier método de composición, y es el requerido (forzosamente) por ConTeXt. En la parte de arriba del archivo raíz, lista los archivos en cuyo interior hay que buscar vía

  %!TEX projectfile =

He aquí unos ejemplos:

  %!TEX projectfile = /Users/koch/MyDoc/chapter1.tex
  %!TEX projectfile = chapter2.tex
  %!TEX projectfile = ../chapter3.tex

Ayuda avanzada
Sincronización código-pdf