Cuando un envío en LaTeX se tuerce, la causa no suele tener nada que ver con la composición. En su máquina compila a la perfección y la construcción de arXiv se cae. La redacción responde que las fuentes no están incrustadas. La imprenta lo devuelve por falta de marcas de corte y sangrado. Nada de esto afecta a la calidad del texto: simplemente ha chocado con las reglas que el receptor necesita para procesar los ficheros de forma automática. Esta página recorre lo que usted mismo puede comprobar antes de pulsar enviar: los requisitos que arXiv pone por escrito, el inventario de paquetes que produce \listfiles, la comprobación de fuentes incrustadas con pdffonts, el aplanado del original con latexpand, arlatex y bundledoc, la anonimización para revisión doble ciego y el PDF/X para una imprenta.
Qué enviar cuando se sube LaTeX a arXiv
Se envía la fuente, no un PDF. arXiv recompila el .tex recibido en su propia instalación de TeX Live, de modo que lo que usted sube es «un juego de ficheros que se construye en su máquina». La ayuda de envío de arXiv es explícita en varios puntos. Para un fichero llamado foo.tex, no incluya los auxiliares asociados: foo.aux, foo.log, foo.toc, foo.lot, foo.lof, foo.dvi, foo.pdf. Los ficheros de índice (.ind) y los .bbl procesados por BibTeX son la excepción y sí deben incluirse; además, el nombre del .bbl debe coincidir con el del .tex principal o las referencias no se procesarán. Y: no proporcionan ningún paquete más allá de lo que ofrece el sistema TeX Live, así que la clase propia de una sociedad científica, o un fichero de estilo que usted haya modificado, tiene que viajar con el envío.
| Fichero | ¿Se incluye? | Razón |
|---|---|---|
.tex | sí | la fuente misma; la compilación siempre parte de la raíz del envío |
.bbl | sí | excepción explícita; su nombre debe coincidir con el .tex principal |
.ind | sí | el fichero de índice es la misma excepción que el .bbl |
.sty / .cls | solo si es propio o modificado | lo que no esté en TeX Live no se encontrará allí |
.aux / .log / .toc | no | se regeneran al recompilar y no deben enviarse |
.pdf / .dvi | no | es la salida misma, que no debe confundirse con un PDF usado como figura |
Los formatos de imagen también dependen del motor. La ayuda de arXiv lo separa con claridad: plain TeX y LaTeX en modo DVI solo aceptan PostScript (.ps o .eps), mientras que LaTeX en modo PDF acepta .pdf, .png y .jpg, y afirma sin rodeos que arXiv no convierte ficheros de imagen «al vuelo» durante el procesado de TeX. Envíe una mezcla de .eps y .pdf y la construcción se cae. Otro punto: la compilación siempre parte de la raíz del directorio de envío, así que aunque el fichero principal esté en un subdirectorio, compruebe que una ruta relativa como \includegraphics{figs/plot} se resuelve desde la raíz. Las rutas absolutas no funcionan.
Las razones habituales por las que falla el procesado automático
La mayoría de los fallos se reducen a nombres de fichero, rutas y algún olvido. arXiv publica una lista de errores comunes que hacen fracasar el procesado automático, y lo que allí figura son casi siempre correcciones de una línea. Escribió su propio fichero de estilo o de macros (o modificó uno estándar) y olvidó adjuntarlo. Usó una ruta absoluta donde hacía falta una relativa. Puso un espacio o un carácter especial en un nombre de fichero: al subirlo se convierten en guiones bajos, de modo que \includegraphics{my figure} pierde su destino en el instante mismo del envío. Su .bbl lo generó una versión de BibLaTeX que no concuerda con el TeX Live de arXiv. Sigue cargando un viejo fichero de estilo de la era dvips como epsbox.sty. Mezcló formatos de imagen. Y empleó una macro sin proteger dentro de un pie de figura: hay que escribir \protect\cite{}.
Lo que todos estos casos tienen en común es que en algún sitio ha sobrevivido una suposición que solo se cumple en su máquina. La contramedida más eficaz no es, pues, una herramienta sino un procedimiento: crear un directorio nuevo, copiar en él únicamente los ficheros que piensa enviar y comprobar que la compilación sale adelante desde cero sin ningún fichero intermedio. Ese solo paso destapa la mayoría de las rutas absolutas, de los adjuntos olvidados y de las compilaciones que solo funcionaban gracias a un .aux viejo. Enviar sin probarlo un cambio hecho a última hora es, por cierto, otro fallo que arXiv menciona expresamente.
# build the submission the way the other end will
mkdir -p /tmp/submit && cp paper.tex refs.bbl mystyle.sty figs/*.pdf /tmp/submit/
cd /tmp/submit && pdflatex paper.tex # must succeed with no .aux present
# a caption calling a macro needs \protect:
% \caption{Following the method of \protect\cite{knuth1984}}
# and a file name with a space will be renamed on upload:
% my figure.pdf -> my_figure.pdfDejar constancia de con qué se compuso: \listfiles
Añada la única línea \listfiles antes de \documentclass y el final del .log recogerá cada fichero cargado con su versión. El comienzo de una ejecución real dice: article.cls 2023/05/17 v1.4n Standard LaTeX document class, amsmath.sty 2023/05/13 v2.17o AMS math features, hyperref.sty 2024-01-20 v7.01h Hypertext links for LaTeX. La lista ocupa decenas de líneas y hace mucho más fácil acotar el «solo falla en su máquina». Seis meses después, cuando la redacción escriba que no consigue reproducir su compilación, tener esa tabla de versiones en el registro marca la diferencia.
*File List*
article.cls 2023/05/17 v1.4n Standard LaTeX document class
size11.clo 2023/05/17 v1.4n Standard LaTeX file (size option)
fontenc.sty 2021/04/29 v2.0v Standard LaTeX package
amsmath.sty 2023/05/13 v2.17o AMS math features
graphicx.sty 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR)
hyperref.sty 2024-01-20 v7.01h Hypertext links for LaTeX
***********Para una versión más rigurosa de la misma idea, use el paquete snapshot. Añada \usepackage{snapshot}, compile y obtendrá junto al .tex un fichero .dep cuyo contenido es una declaración para reproducir la compilación: \RequireVersions{ ... } con entradas como *{application}{pdfTeX} {0000/00/00 v1.40.26}, *{format} {LaTeX2e} {2023-11-01 v2.e} y *{class} {article} {2023/05/17 v1.4n}: motor, formato, clase y todos los paquetes, en forma legible por máquina. Ese mismo .dep es la entrada de bundledoc en la sección siguiente.
Comprobar la incrustación de fuentes con pdffonts, y por qué se rechaza Type 3
Basta con una orden: pdffonts paper.pdf. Esta herramienta, que viene con poppler, enumera cada fuente que usa el PDF en su propia línea, con su type (Type 1, Type 3, TrueType, etc.), si está incrustada (emb), si es un subconjunto (sub) y si lleva una tabla Unicode (uni). Para los envíos en PDF directo, arXiv afirma que «puede rechazar envíos en PDF por fuentes no estándar y no incrustadas» y pide que «se usen fuentes de contorno (TrueType/Type1) en lugar de mapas de bits (Type3)». Las normas de producción de las revistas dicen prácticamente lo mismo. La condición para aprobar es, pues, sencilla: la columna emb debe decir yes en todas las filas y la columna type no debe decir Type 3 en ninguna.
$ pdffonts paper.pdf
name type encoding emb sub uni object ID
------------------------------------ ----------------- ---------- --- --- --- ---------
NLRVKI+SFBX1440 Type 1 Custom yes yes yes 9 0
LLYCJX+CMMI10 Type 1 Builtin yes yes yes 11 0
JHYTSG+CMR10 Type 1 Builtin yes yes yes 12 0
$ pdffonts bitmap.pdf # the same document forced onto bitmap fonts
F28 Type 3 Custom yes no no 4 0La segunda salida de arriba enseña lo más traicionero del asunto: una fuente Type 3 también aparece como emb yes. Los mapas de bits sí están incrustados en el PDF, así que a la pregunta «¿están todas sus fuentes incrustadas?» se puede responder «sí» con toda honestidad. La diferencia está a la derecha, en la columna uni, que dice no: sin tabla Unicode, ese PDF no se puede buscar ni copiar. El primer síntoma suele ser un revisor que no consigue buscar una palabra en el texto. En pdfTeX puede provocarse este estado a propósito vaciando el mapa de fuentes con \pdfmapfile{}; dicho de otro modo, una configuración de font map rota, o una figura pegada desde una vieja herramienta de gráficos que emite Type 3, se lo hará sin avisar.
La versión del PDF también forma parte a veces de los requisitos. pdfTeX en TeX Live 2024 escribe por defecto PDF 1.5, como confirma el campo PDF version: de pdfinfo. Para ajustarse a una versión exigida, coloque la primitiva de pdfTeX \pdfminorversion=7 al principio del preámbulo o, con el LaTeX actual, escriba \DocumentMetadata{pdfversion=1.7} antes de \documentclass. Medido, ambos producen PDF version: 1.7. La producción de PDF/A en sí corresponde a otra página; véase el enlace de abajo.
Aplanar un original repartido: latexpand, arlatex, bundledoc
Repartir un original en un \input por capítulo es cómodo de escribir, pero los sistemas de envío suelen querer un único .tex. TeX Live incluye tres herramientas con tres propósitos distintos. latexpand main.tex > flat.tex expande \input e \include en un .tex plano. arlatex --document=paper.tex intro.tex --outfile=selfcontained.tex guarda los ficheros auxiliares dentro de un solo .tex envolviendo cada uno en un entorno filecontents*; en una ejecución real esa salida compiló sin más con pdflatex. Y bundledoc lee el .dep que produce snapshot y empaqueta todo el juego de ficheros necesarios en un tar.gz.
# one flat .tex (latexpand 1.7.2); NOTE: comments are stripped by default
latexpand main.tex > flat.tex
latexpand --keep-comments main.tex > flat.tex # keep them if you must
# one self-contained .tex carrying its own auxiliary files
arlatex --document=paper.tex intro.tex --outfile=selfcontained.tex
# a tar.gz of exactly what the document needs, excluding TeX Live itself
pdflatex paper.tex # with \usepackage{snapshot} -> paper.dep
bundledoc --localonly --manifest=MANIFEST paper.dep
tar tzf paper.tar.gz
# paper/
# paper/intro.tex
# paper/MANIFEST
# paper/paper.texHay aquí un comportamiento que atañe también al anonimato. latexpand elimina los comentarios por defecto. Su propio manual indica que por defecto produce un único fichero LaTeX sin comentario alguno; para conservarlos hay que pasar explícitamente --keep-comments. Dele la vuelta y resulta incómodo: envíe un .tex en crudo y todas las notas privadas escritas tras un % se van con él. Memorandos del estilo «este párrafo va dirigido al revisor 2» acaban de verdad en ficheros enviados. El --localonly de bundledoc obedece al mismo instinto: excluye todo lo que viene de TeX Live y empaqueta solo lo que usted escribió, que es exactamente la forma de la regla de arXiv según la cual los paquetes estándar no hace falta adjuntarlos pero los ficheros propios sí.
Anonimizar para revisión doble ciego: metadatos y comentarios
Borrar el nombre del autor del cuerpo del texto no basta. Los metadatos del PDF y los comentarios de la fuente son dos comprobaciones distintas. Medido: \title y \author no se filtran por sí solos a los metadatos del PDF; pdfinfo dio Title: y Author: vacíos y lo único escrito fueron Creator: LaTeX with hyperref, Producer: pdfTeX-1.40.26 y las marcas de tiempo. La fuga ocurre cuando usted (o una plantilla) escribe \hypersetup{pdfauthor={...}, pdftitle={...}}: entonces su nombre real aparece literalmente en pdfinfo. Ejecutar pdfinfo anon.pdf y mirar el campo Author: antes de enviar basta para evitarlo.
$ pdfinfo anon.pdf | head -6
Title:
Subject:
Keywords:
Author:
Creator: LaTeX with hyperref
Producer: pdfTeX-1.40.26
# strip your own margin notes out of the source you upload
latexpand main.tex > anon.tex # comments removed by defaultLos ficheros de clase de las sociedades científicas suelen traer su propio modo anónimo: el acmart de la ACM, por ejemplo, declara anonymous como opción de clase (definida como clave booleana dentro del fichero de clase; al activarla, registra Using anonymous mode). Cuando exista uno, úselo: la clase se ocupa no solo del bloque de autores sino también de los agradecimientos, los números de financiación y el tratamiento de \thanks. Si tiene que anonimizar a mano, no olvide agradecimientos, números de subvención, autocitas («en nuestro trabajo anterior [12]») ni el logotipo institucional incrustado en una figura. Lo que pdffonts y pdfinfo no pueden encontrar solo se encuentra, al final, releyendo uno mismo.
Entrega a una imprenta: marcas de corte, sangrado, PDF/X
Una imprenta pide tres cosas que una revista no: marcas de corte que indiquen dónde se guillotina el pliego, sangrado para que el color llegue limpiamente al borde y, casi siempre, un fichero PDF/X en CMYK con las fuentes completamente incrustadas. En composición occidental, el paquete crop añade las marcas (\usepackage[cam,center]{crop}). Los auténticos tombow digitales de la autoedición japonesa los traza gentombow, de texjporg, que aplica por defecto 3 mm de sangrado y fija en el PDF /TrimBox (tamaño final) y /BleedBox (con sangrado). La opción de clase tombow de jsclasses solo dibuja marcas «tipo tombow», así que para una entrega real conviene combinarla con gentombow. El sangrado consiste en prolongar unos 3 mm más allá de la línea de corte todo elemento que llegue al borde, de modo que una ligera desviación de la guillotina no deje filetes blancos.
PDF/X (X-1a, X-3, X-4) es la contraparte para impresión de PDF/A: exige color CMYK (y tintas planas), fuentes completamente incrustadas, una intención de salida (perfil ICC) para la prensa y TrimBox/BleedBox correctos (con CropBox sin definir y ArtBox prohibido). Desde LaTeX lo produce el paquete pdfx; \usepackage[x-1a]{pdfx} da X-1a, que solo permite CMYK y tintas planas. La resolución de las imágenes apunta en general a 300–350 dpi, y el espacio de color es el que indique la imprenta. Termine validando la conformidad con una herramienta como veraPDF y, en última instancia, siga el pliego de entrega de esa imprenta: cumplir la norma no cubre los requisitos extra que cada taller añade.
% Western: crop marks from the crop package
\usepackage[cam,center]{crop}
% Japanese self-publishing: jsclasses option plus gentombow for real tombow
\documentclass[tombow]{jsarticle}
% PDF/X-1a output (CMYK and spot colours only)
\usepackage[x-1a]{pdfx}La lista de comprobación previa al envío
- Borrar los ficheros intermedios y recompilar desde cero en un directorio limpio. Un
.auxviejo puede ocultar un fallo que debería salir. - Compilar una vez con
\listfilesactivado y guardar la lista de ficheros del final del.log. Mejor aún si hay un.depdesnapshot. - Ejecutar
pdffonts paper.pdfy confirmar que la columnaembdiceyesen todas las filas y que la columnatypeno diceType 3en ninguna. - Leer
Author:yTitle:enpdfinfo paper.pdf. En doble ciego deben estar vacíos; comprobar también que la versión del PDF es la pedida. - Incluir los
.styy.clspropios; dejar fuera.aux,.logy.pdf. Incluir el.bbly hacer que su nombre coincida con el.texprincipal. - Ajustar los formatos de imagen al motor (
.pdf/.png/.jpgpor la vía PDF,.epspor la vía DVI) y comprobar que las rutas relativas se resuelven desde la raíz. - Si exigen un fichero único:
latexpand(los comentarios se eliminan por defecto); para entregar el conjunto:bundledoc --localonly. - Para una imprenta, confirmar marcas de corte y unos 3 mm de sangrado, TrimBox/BleedBox correctos y salida PDF/X mediante
pdfx.