Comunidad

Cuando LaTeX te derrota, quien tiene la respuesta suele estar en tex.stackexchange.com. Pero esta comunidad cobra entrada, y la entrada no es la cortesía: es un ejemplo mínimo funcional, un MWE. ¿Cómo de en serio va la cosa? Lo bastante como para que TeX Live distribuya un paquete llamado mwe cuya única misión es facilitar que los ejemplos mínimos se compartan, y como para que texdoc minexample abra un cuadernillo de 21 páginas dedicado solo a cómo construir uno. Esta página cuenta adónde llevar una pregunta de LaTeX —TeX Stack Exchange, la herencia del grupo de Usenet comp.text.tex, TUG y los grupos nacionales de usuarios, los gestores de incidencias de los paquetes— y cómo preguntar para que llegue una respuesta: el oficio de reducir un documento de 300 páginas a veinte líneas.

Buscar en tex.stackexchange.com antes de preguntar

La mayoría de las preguntas de LaTeX ya se han hecho, y con las mismas palabras. TeX Stack Exchange (tex.stackexchange.com) se creó en agosto de 2010, y esa fecha no es un rumor: consta en el boletín del propio equipo de LaTeX. LaTeX3 News número 5 (enero de 2011), que viaja dentro de TeX Live, anota que el sitio de preguntas y respuestas TeX Stack Exchange se había creado y crecía deprisa: en el momento de escribir, unas 2.800 personas habían planteado 2.600 preguntas con 5.600 respuestas en total, y lo visitaban 2.200 usuarios al día. Un texdoc l3news abre esa misma página en la máquina propia. Más de una década después las cifras han ganado un par de dígitos, pero lo que de verdad ha crecido es el fondo de preguntas antiguas. Hay un truco que hace funcionar la búsqueda: no describir el problema con palabras propias, sino pegar el mensaje de error literalmente. Una línea como ! Undefined control sequence o ! Missing $ inserted es la mejor clave de búsqueda posible.

Durante las tres décadas anteriores, el centro de gravedad de la discusión sobre TeX era el grupo de Usenet comp.text.tex (en el ámbito germanohablante existía de.comp.text.tex). Lo central que llegó a ser se ve en los agradecimientos de los libros de la época. En TeX by Topic (Addison-Wesley, 1991), Victor Eijkhout da las gracias a los participantes de las listas de discusión TeXhax, la neerlandesa TeX-nl y comp.text.tex, y escribe que sus preguntas y respuestas le dieron mucho en qué pensar. Ese libro viaja dentro de TeX Live: texdoc texbytopic lo abre, agradecimientos incluidos, de modo que el desplazamiento del centro de gravedad puede leerse de primera mano. El grupo sigue existiendo, pero para una pregunta de LaTeX hoy la primera parada es TeX Stack Exchange. Los mensajes antiguos aún aparecen en las búsquedas, así que, cuando aparezcan, conviene comprobar de qué año son.

Qué es realmente un ejemplo mínimo funcional (MWE)

Un MWE es el documento completo más corto que sigue reproduciendo el problema, y «completo» va en sentido estricto. Creating a LaTeX Minimal Example, de Nicola L C Talbot (2014, distribuido con TeX Live, texdoc minexample), abre insistiendo en que un ejemplo mínimo no debe contener ningún paquete ni código que no contribuya al problema, pero que sí debe incluir una clase de documento y el entorno document. No es, por tanto, un fragmento: es algo que la otra persona puede guardar tal cual y pasar por pdflatex; eso significa el «working» del nombre. Pegar tres líneas sin \begin{document} provoca una primera respuesta que pide un ejemplo completo, y con ello un viaje de ida y vuelta perdido.

document.tex
% A minimal working example: complete, compilable, and as short as it can be.
% Nothing here that does not bear on the problem being reported.
\documentclass{article}
\usepackage{booktabs}
\begin{document}
\begin{tabular}{ll}
  \toprule
  left & right \\
  \bottomrule
\end{tabular}
\end{document}

Los ejemplos que necesitan una figura son donde la gente se atasca: no se puede enviar la fotografía propia y, aunque se enviase, quien lee no la tendría. Para eso está el paquete mwe. Escribir \usepackage{mwe} carga graphicx y pone a disposición, desde el árbol de TeX, un juego de imágenes estándar: example-image, example-image-a, example-image-16x9, example-grid-100x100bp y más. Quien tenga TeX Live ya las posee, así que un ejemplo con \includegraphics{example-image} compila en cualquier máquina. Por la misma lógica, cuando hace falta texto de relleno se usa \lipsum[1-3] de lipsum o \blindtext de blindtext (mwe carga lipsum por su cuenta si está instalado). Un ejemplo que no exige adjuntos recibe respuesta antes, solo por eso.

Reducir 300 páginas a veinte líneas: building up y hacking down

Solo hay dos caminos, y Talbot los llama building up y hacking down. Construir parte de \documentclass{article} y un entorno document vacío, y añade una cosa cada vez hasta que aparece el problema. Recortar parte de una copia del documento real y va quitando hasta que el problema desaparece. Construir encaja con un texto corto; recortar es más rápido con 300 páginas, pero no hay que recortar línea a línea. Hay que borrar la mitad. Se comenta la primera mitad del preámbulo: si el problema sobrevive, esa mitad queda absuelta, y se ha averiguado en una sola compilación. Se parte en dos lo que queda, y otra vez: una docena de rondas convierten centenares de líneas en un puñado. Es una búsqueda binaria, y el mismo gesto sirve con los capítulos traídos por \include.

  • Trabajar sobre una copia. Nunca hay que cortar el .tex original: cada borrado se hace en un duplicado.
  • Tirar primero el cuerpo del texto. Quitar los capítulos traídos por \include, las figuras, las tablas y la bibliografía, y dejar tras \begin{document} solo la línea que falla.
  • Borrar el preámbulo por mitades. Si el problema sobrevive, la mitad retirada queda absuelta; si desaparece, el sospechoso es lo recién retirado y se parte a su vez en dos.
  • Desplegar las macros propias. Sustituir un \newcommand por su cuerpo separa «el fallo está en mi macro» de «el fallo está en el paquete».
  • Probar a cambiar la clase por article. Si con eso deja de reproducirse, la clase es la causa, y eso ya es un hallazgo: basta con decirlo al informar.
  • Recompilar después de cada corte. El fallo más común es seguir adelante sin advertir que el problema dejó de reproducirse varios borrados atrás.

Una vez recortado, añade por último la información de versiones. No hace falta escribirla a mano: coloca la única línea \listfiles antes de \documentclass, compila y el final del .log gana una sección *File List* que enumera cada archivo cargado con su fecha y versión. Suma el motor (pdflatex, xelatex o lualatex) y la distribución (TeX Live 2024, MiKTeX, Overleaf) y quien responda podrá reconstruir tu entorno casi por completo. No resumas el error: pega tal cual la línea que empieza por ! y las pocas líneas siguientes. Una descripción del tipo «me sale una especie de error» siempre lleva menos información que la línea original.

log
% \listfiles before \documentclass, then look at the end of the .log:
 *File List*
 article.cls    2023/05/17 v1.4n Standard LaTeX document class
  size10.clo    2023/05/17 v1.4n Standard LaTeX file (size option)
booktabs.sty    2020/01/12 v1.61803398 Publication quality tables
 ***********

Más allá de Stack Exchange: TUG, grupos nacionales y gestores de incidencias

TUG, el TeX Users Group, es una asociación internacional sin ánimo de lucro fundada en 1980. Sostiene el desarrollo, TeX Live incluido, publica la revista TUGboat y organiza una conferencia anual. Que TUGboat no sea solo lectura puede comprobarse en el propio disco: la clase para enviar artículos, ltugboat.cls, viaja dentro de TeX Live —su línea de copyright dice «Copyright 1994-2023 TeX Users Group» y el propio TUG es el mantenedor— y texdoc tugboat abre ltubguid.pdf, las instrucciones para autores. Dicho de otro modo: si algún día apetece escribir lo aprendido sobre TeX, la herramienta de composición para publicarlo ya está instalada.

El mundo de TeX también se sostiene sobre grupos de usuarios organizados por país. La guía oficial de TeX Live agradece a TUG, al DANTE e.V. germanohablante, al NTG neerlandés y al GUST polaco el haber aportado la infraestructura técnica y administrativa necesaria, añade «únete al grupo de usuarios de TeX que tengas más cerca» y remite a tug.org/usergroups.html. El grupo hispanohablante CervanTeX también aporta un FAQ a TeX Live; tlmgr info es-tex-faq lo confirma. En japonés, la Japanese TeX Development Community (texjporg) mantiene pLaTeX y upLaTeX, jsclasses (originalmente de Haruhiko Okumura), el soporte japonés de dvipdfmx, gentombow y ptex2pdf, y gestiona la TeX Wiki (texwiki.texjp.org); el foro TeX de Okumura (okumuralab.org/tex/) es de hecho el sitio donde preguntar en japonés. Aparte están el foro latex.org, la lista de correo [email protected] y r/LaTeX en Reddit.

Cuando ya está claro que no es una pregunta sino un fallo, el destino cambia. Un defecto propio de un paquete va al gestor de incidencias de su autor, y la dirección no hay que buscarla: ya está en la máquina propia. Si la salida de tlmgr info <paquete> incluye una línea cat-contact-bugs o cat-contact-repository, ese es el sitio oficial para informar (tlmgr info mwe, por ejemplo, devuelve una página de issues de GitHub). Un defecto del propio LaTeX, del núcleo, va al LaTeX Project (latex-project.org), y ahí se emplea el paquete latexbug. Sirve para clasificar fallos, y el equipo de LaTeX pide que se cargue en cualquier archivo de prueba que acompañe a un informe: al cargarlo se determina si el fallo pertenece de verdad al núcleo o a un paquete de terceros. Un informe enviado a la dirección equivocada no llega a ninguna parte.

DestinoQué corresponde ahíNotas
tex.stackexchange.com«¿cómo escribo esto?» y «¿por qué da error?» en generalabierto en agosto de 2010; buscar primero y preguntar después con un MWE
texwiki.texjp.orginstalación y configuración del TeX japonés, fuentes japonesasgestionada por la Japanese TeX Development Community
[email protected]temas de discusión, preguntas sobre el trasfondo históricolista de correo de TUG; no es un sitio de respuesta rápida
cat-contact-bugsfallos y peticiones de función de un paquete concretotlmgr info <paquete> indica la dirección
latexbugfallos del propio núcleo de LaTeXse carga en el archivo de prueba y determina quién debe recibir el informe

Cómo escribir una pregunta que reciba respuesta

Bastan cuatro cosas: un enunciado breve del síntoma, el MWE, el error literal y lo que ya se ha probado. En el cuadernillo citado, Talbot aconseja mantener la descripción breve, enumerar los métodos ensayados para localizar el problema y no lanzarse a un relato largo del proyecto propio: demasiada información quita las ganas de leer la petición. También deja escrita una premisa que se olvida con facilidad: nadie cobra y nadie está obligado a responder, de modo que el mensaje no debe sonar a exigencia ni a reproche. Que ese consejo se escribiera en 2014 y siga viajando, sin cambios, dentro de TeX Live dice bastante sobre el temple de esta comunidad. Una añadidura: conviene decir qué se quiere conseguir realmente. Si solo se muestra el camino que falló, nadie podrá proponer la vía más sencilla en la que no se había pensado.