Entrega a imprenta (marcas de corte, PDF)

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 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
.texla fuente misma; la compilación siempre parte de la raíz del envío
.bblexcepción explícita; su nombre debe coincidir con el .tex principal
.indel fichero de índice es la misma excepción que el .bbl
.sty / .clssolo si es propio o modificadolo que no esté en TeX Live no se encontrará allí
.aux / .log / .tocnose regeneran al recompilar y no deben enviarse
.pdf / .dvinoes 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.

terminal
# 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.pdf

Dejar 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.

log
*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.

terminal
$ 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  0

La 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.

terminal
# 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.tex

Hay 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.

terminal
$ 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 default

Los 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.

latex
% 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 .aux viejo puede ocultar un fallo que debería salir.
  • Compilar una vez con \listfiles activado y guardar la lista de ficheros del final del .log. Mejor aún si hay un .dep de snapshot.
  • Ejecutar pdffonts paper.pdf y confirmar que la columna emb dice yes en todas las filas y que la columna type no dice Type 3 en ninguna.
  • Leer Author: y Title: en pdfinfo paper.pdf. En doble ciego deben estar vacíos; comprobar también que la versión del PDF es la pedida.
  • Incluir los .sty y .cls propios; dejar fuera .aux, .log y .pdf. Incluir el .bbl y hacer que su nombre coincida con el .tex principal.
  • Ajustar los formatos de imagen al motor (.pdf / .png / .jpg por la vía PDF, .eps por 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.