«El hombre que escribió XeTeX escribió después un editor casi sin funciones.» Ahí empieza TeXworks. Tras dotar a TeX de Unicode y de las tipografías del propio sistema, Jonathan Kew se ocupó de otro problema: la cantidad de sitios en los que puede perderse quien empieza con LaTeX. Tituló su charla en el TUG «TeXworks: lowering the barrier to entry», bajar la barrera de entrada. Por eso TeXworks no tiene gestión de proyectos, ni script de compilación, ni árbol de archivos al costado. Una ventana, un botón y una sola cosa que elegir: el motor. Esta página explica qué distribuciones incluyen realmente TeXworks (la respuesta depende de la plataforma, y muchísimas explicaciones se equivocan), cómo reescribir su única pantalla de configuración —las herramientas de composición— y cómo una sola línea % !TeX root hace las veces de gestión de proyectos.
TeXworks lo escribió el autor de XeTeX
TeXworks es obra de Jonathan Kew, el autor de XeTeX. Su modelo fue TeXShop, de Richard Koch, durante mucho tiempo la opción por defecto en el Mac. Kew consideró que la disposición sin adornos de TeXShop —el código y el PDF uno al lado del otro en una sola ventana— funciona bien para quien empieza, y TeXworks lleva esa sensación a Windows y a Linux. Los entornos integrados disponibles entonces en Windows tenían sencillamente demasiados botones para quien se encontraba con LaTeX por primera vez. La respuesta de Kew no fue añadir funciones, sino reducir el número de decisiones.
Esa escasez es concreta. Al abrir TeXworks aparecen una superficie de edición, en la barra de herramientas un desplegable de motores con un botón triangular verde al lado, y un segundo panel con el PDF. Ni árbol de archivos, ni esquema de capítulos, ni fichero de configuración de compilación. La interfaz está escrita en Qt, de modo que se ve igual en Windows, macOS y Linux; la licencia es GPL v2 y la codificación por defecto, UTF-8. El instrumental que trae también es escaso: autocompletado de órdenes, ayuda a la escritura, corrección ortográfica. Cuando eso no basta, los complementos de scripting para Lua y Python, opcionales, permiten añadir procesos propios (son opciones de compilación; Lua viene activo por defecto y Python no). El número de versión merece mención: más de una década después de la primera publicación sigue en la serie 0.6, con una pequeña actualización hacia febrero casi todos los años. Acumular funciones camino de una 1.0 nunca estuvo en el plan.
Qué distribuciones incluyen TeXworks
En Windows es casi seguro que ya lo tiene: tanto el instalador de MiKTeX como el instalador de TeX Live para Windows dejan TeXworks en la máquina. En macOS y en Linux, en cambio, no viene con la distribución. Que TeX Live solo entregue el ejecutable de Windows no es una conjetura: está escrito en la propia base de paquetes de TeX Live, texlive.tlpdb. La descripción del paquete texworks dice «TeX Live includes executables and support files only for Windows», y la colección que lo envuelve, collection-texworks, se titula «TL includes only the Windows binary».
# from texlive.tlpdb, the package database TeX Live installs from
name texworks
category TLCore
shortdesc friendly cross-platform front end
longdesc TeX Live includes executables and support files only for Windows.
postaction shortcut type=menu name="TeXworks editor" \
cmd=TEXDIR/bin/windows/texworks.exeAquí empieza la confusión. TeX Live incluye además una nota breve en texmf-dist/doc/texworks/README que afirma que TeX Live trae un binario para Windows y MacTeX uno para macOS. Pero esa nota se escribió en 2009, y aquello sobre lo que actúa realmente el instalador es la base de paquetes. El editor gráfico que MacTeX ofrece hoy se llama TeXShop, no TeXworks. En Linux, TeXworks está desligado por completo de TeX Live y llega como paquete texworks de la propia distribución. En resumen: la frase «TeXworks viene con TeX Live» es cierta en Windows, y solo ahí.
| Procedencia | Plataforma | Qué se obtiene |
|---|---|---|
MiKTeX | Windows | incluido como editor por defecto |
TeX Live | Windows | texworks.exe, una entrada en el menú Inicio y la asociación de archivos .tex |
MacTeX | macOS | el editor que se entrega es TeXShop; TeXworks se instala aparte |
apt / dnf / pacman | Linux | se instala el paquete texworks, aparte de TeX Live |
El desplegable de composición y las Processing tools
Todo lo que TeXworks sabe sobre compilar cabe en un único desplegable, a la izquierda de la barra de herramientas. Allí se elige el motor (pdfLaTeX, XeLaTeX, LuaLaTeX, ConTeXt y demás); al pulsar el triángulo verde contiguo o Ctrl/Cmd-T, el documento abierto se compila y aparece la vista previa del PDF. Auxiliares como BibTeX y MakeIndex están registrados desde el principio, de modo que un documento corriente llega al PDF sin haber abierto nunca la configuración.
Esa lista puede reescribirse. En Edit → Preferences → pestaña Typesetting, la mitad inferior contiene la lista Processing tools, con + para añadir, - para quitar y Edit... para modificar. Una herramienta tiene solo cuatro partes: el Name que aparece en el desplegable, el Program que se lanza, los Arguments y la casilla View PDF after running. El accidente más frecuente está en los Arguments, donde va un argumento por línea. No es una línea de órdenes del shell, así que escribir -interaction=nonstopmode %.tex de corrido entrega toda la cadena como un solo argumento y el motor sale a buscar un archivo de nombre muy extraño.
Los Arguments admiten variables propias de TeXworks. $fullname, que designa el archivo en proceso, es la más conocida, pero en total hay cinco; poder extraer solo la extensión o solo el directorio es justamente lo que hace expresables las rutas que pasan por DVI y la llamada a los auxiliares. Las variables se expanden justo antes de arrancar la herramienta.
| Variable | A qué se expande |
|---|---|
$fullname | el archivo en proceso, con extensión (por ejemplo main.tex) |
$basename | el nombre de archivo sin extensión (por ejemplo main) |
$suffix | solo la extensión (por ejemplo tex) |
$directory | la ruta absoluta del directorio del documento |
$synctexoption | -synctex=1 si la herramienta admite SyncTeX; vacío en caso contrario |
Registrar latexmk como una sola herramienta
Lo que le falta a TeXworks es la cabeza que decide cuántas pasadas hacen falta. Referencias cruzadas que se quedan en ??, un \tableofcontents siempre atrasado una versión: todo eso son cuestiones de cuántas veces se compiló, y TeXworks no lleva la cuenta. Lo habitual es ceder ese juicio por entero a latexmk y conservar del lado de TeXworks una única herramienta que lo llame. Ponga latexmk en Program, escriba los Arguments uno por línea como abajo y marque View PDF after running.
-e
$pdflatex=q/pdflatex $synctexoption %O %S/
-pdf
$fullnameEn japonés, la vía asentada desde hace mucho es componer con upLaTeX y producir el PDF con dvipdfmx. El TeXworks que viene con TeX Live ya trae herramientas para japonés, pero si se crea una a mano, ptex2pdf es lo más corto porque envuelve ambas etapas. Ponga ptex2pdf en Program y los Arguments como sigue (-l elige el formato LaTeX, -u elige upLaTeX y -ot introduce las opciones adicionales que se pasan a TeX). La configuración fina de latexmk es tema de otra página; aquí solo importa cómo invocarlo.
-l
-u
-ot
-kanji=utf8 -no-guess-input-enc $synctexoption
$fullnameLa herramienta de uso habitual se fija como motor de composición por defecto en la parte superior de la pestaña Typesetting; los documentos que se abran después la usarán. Cuando un archivo concreto necesite otro motor, el comentario mágico de la sección siguiente anula ese ajuste.
% !TeX root: la línea que sustituye a la gestión de proyectos
En cuanto el documento se reparte en archivos por capítulo que un padre trae con \input o \include, la ausencia de cualquier noción de «proyecto» en TeXworks se vuelve un estorbo. Componer con chapter1.tex abierto falla, como es lógico: ese archivo no tiene \documentclass ni \begin{document}. Otro editor pediría aquí crear un proyecto y declarar un documento maestro; la respuesta de TeXworks fue escribir una sola línea al principio del archivo.
% !TeX root = main.tex
\chapter{Introduction}
The body of the chapter goes here.Para TeX no es más que un comentario —todo lo que sigue a %—, pero TeXworks lee las primeras líneas de un archivo y ajusta su comportamiento. Con esa línea presente, componer desde el archivo de capítulo hace que TeXworks compile en su lugar el archivo padre (raíz). La ruta se escribe relativa al archivo hijo. Lo elegante es que la información vive en el archivo y no en un ajuste: un archivo de proyecto se rompe al cambiar de máquina, mientras que una línea de comentario viaja en el repositorio y sigue funcionando en el equipo del coautor. La convención procede de TeXShop, y editores distintos de TeXworks leen la misma línea.
Hay más comentarios mágicos. % !TeX program = ... fija el motor con el que se procesa ese documento. Conviene notar que lo que se escribe ahí no es el nombre del ejecutable sino el Name de la herramienta tal como está registrada en Preferences: no pdflatex, sino la etiqueta exacta que aparece en la lista. La grafía antigua % !TeX TS-program = ... significa lo mismo. % !TeX encoding = ... declara la codificación del archivo, aunque como TeXworks usa UTF-8 por defecto rara vez hace falta si se escribe en UTF-8. Colocado al principio de un documento japonés, % !TeX program hace que se ejecute el motor correcto aunque se olvide cambiar el desplegable.
% !TeX program = upLaTeX (ptex2pdf)
% !TeX encoding = UTF-8
\documentclass{ujarticle}
\begin{document}
\input{chapter1}
\end{document}TeXworks frente a TeXstudio, y cuándo cambiar
La diferencia no está en el número de funciones sino en el objetivo de diseño. TeXworks está optimizado para reducir los sitios donde uno puede perderse; TeXstudio, Texmaker y Kile lo están, al contrario, para tener a mano todo lo que pueda hacer falta. Decir «TeXworks tiene menos funciones» describe por tanto su planteamiento, no emite un veredicto; el eje correcto de comparación es qué está costando tiempo ahora mismo. Cuando dos o más de los puntos siguientes sean ciertos, conviene pensar en el cambio.
- El número de archivos ha crecido y uno tropieza una y otra vez con archivos hijos sin la línea
% !TeX root. - Ha entrado en juego una base bibliográfica y buscar las claves de
\citeen otra ventana cuesta tiempo real. - La compilación ya no es una sola pasada de pdfLaTeX, y la lista de Processing tools se ha llenado de entradas.
- El mismo manuscrito debe producirse ahora con más de un motor, por ejemplo pdfLaTeX y LuaLaTeX.
Cómo leer el registro y los archivos auxiliares
Justamente porque nada más ocupa la pantalla, TeXworks es buen sitio para adquirir el hábito de leer el registro. El panel de salida tras una composición dice más que si apareció un PDF: referencias sin resolver, paquetes que no se encuentran e imágenes que no se cargaron aparecen ahí literalmente. Una línea como ! Missing $ inserted o ! Undefined control sequence es el primer error, y el número de línea justo debajo es la pista de verdad. TeXworks está pensado para hacer leer, no para detenerse en su lugar; saltarse ese panel es tirar la mitad de lo que ofrece.
- Si las referencias siguen en
??, componga otra vez con la misma herramienta para que.auxse actualice (una herramientalatexmklo hace sola). - Borre
.auxy.tocsolo tras una reorganización grande del índice o de la bibliografía, y reconstruya; lo normal es que conservarlos sea más rápido. - Cuando una imagen no aparece, compare el nombre de archivo del registro con la ruta real. Evite espacios y caracteres fuera de ASCII en los nombres.
- Cuando la lista de Processing tools se llene, traslade la lógica de compilación a un
.latexmkrcy vuelva a una única herramienta latexmk.
Ajustes de SyncTeX: búsqueda directa e inversa
TeXworks lleva una vista previa de PDF integrada basada en Qt y Poppler, de modo que editar y comprobar ocurren en la misma ventana sin abrir un visor externo. La búsqueda directa —de un punto del código al lugar correspondiente del PDF— se hace con Ctrl/Cmd-clic en el código; la búsqueda inversa, del PDF de vuelta a la línea de origen, con Ctrl/Cmd-clic en la vista previa. No hace falta configurar nada, porque las herramientas de serie ya llevan $synctexoption en sus Arguments, y es eso lo que hace que el motor escriba la tabla .synctex.gz de la que dependen los saltos. Si la sincronización falla en una herramienta propia, compruebe primero que no falte esa variable. El funcionamiento interno de SyncTeX es asunto de otra página.