2.5 Gestión de fuentes de documentos
En la sección final de este capítulo analizamos las herramientas que le ayudarán a archivar sus documentos, así como a intercambiarlos de forma fiable con otros, por ejemplo, editores de revistas.
Comenzamos con entornos que contienen el contenido de un archivo, que luego se extrae cuando se procesa el documento, lo que le permite combinar varios archivos en un solo documento. Luego buscamos formas de recopilar información sobre “archivos usados” con fines de archivo. A esto le sigue un vistazo a dos programas que toman dicha información para producir un archivo con todos los archivos relevantes incluidos: bundledoc
, que guarda sólo el texto y los archivos de paquete utilizados y produce archivos bastante pequeños, y mkjobtexmf
, que hace una función más trabajo minucioso y también incluye fuentes y datos binarios similares. Cuál de ellos es más adecuado depende de su caso de uso.
Finalmente, analizamos brevemente el paquete latexrelease
, que le ofrece una manera de revertir su instalación de \(\LaTeX\) a una fecha anterior sin la necesidad de instalar una versión anterior explícitamente. Hay límites a lo que puede lograr, pero es una buena adición al seguro de \(\LaTeX\) de que sus documentos puedan procesarse exitosamente sin ningún cambio en la salida durante largos períodos de tiempo.
2.5.1 Combinando varios archivos
Al enviar un documento \(\LaTeX\) a otra persona, es posible que deba enviar archivos de paquetes locales o poco comunes (por ejemplo, sus modificaciones privadas a algunos paquetes) junto con la fuente. En tales casos, suele ser útil poder colocar toda la información necesaria para procesar el documento en un solo archivo.
\begin{filecontents}[option-list]{file name} . . . \end{filecontents}
Para ello, \(\LaTeX\) proporciona el entorno filecontents
. Este entorno toma un argumento obligatorio, el nombre de un archivo; su cuerpo consta del contenido de este archivo. Las etiquetas \begin
y \end
deben colocarse en sus propias líneas en el código fuente. En particular, no debe haber ningún material a continuación, o obtendrás errores \(\LaTeX\).
Si \(\LaTeX\) encuentra dicho entorno, intenta encontrar el nombre del archivo mencionado. Si no puede, escribe el cuerpo del entorno palabra por palabra en un archivo en el directorio actual y le informa sobre esta acción. Por el contrario, si \(\LaTeX\) encontró un archivo con el nombre dado, le informará que ha ignorado esta instancia del entorno filecontents
porque el archivo ya está presente en el sistema de archivos.
El argumento option-list le permite modificar este comportamiento. Si especifica nosearch
, entonces solo se busca el archivo en el directorio actual, no en todo el árbol \(\TeX\). Esto es útil si desea escribir, por ejemplo, una versión local de un archivo de configuración, como graphics.cfg
, que de otro modo no aparecería en su directorio local. Si especifica force
(o overwrite
), entonces el archivo siempre se escribe, incluso si ya existe en el directorio actual o en algún lugar del árbol de instalación de \(\TeX\). Utilice esta opción con precaución porque puede dañar archivos de esta manera por error. Puede silenciar cualquier advertencia de la tecla “force” especificando también “nowarn”, en cuyo caso las advertencias solo se escriben en el archivo “.log”.
De forma predeterminada, el archivo generado recibe algunas líneas de comentario (usando %
como carácter de comentario) agregadas en la parte superior para anunciar que este archivo fue escrito por un entorno filecontents
:
%% LaTeX2e file ‘foo.txt’ %% generated by the ‘filecontents’ environment %% from source ‘test’ on 2022/04/22.
Si esto no es apropiado (por ejemplo, si el archivo no es un archivo \(\LaTeX\)), use la opción noheader
, en cuyo caso estas líneas adicionales no se producen. Alternativamente, puede usar el entorno filecontents*
, que es solo una forma breve de configurar esta opción.
En formatos \(\LaTeX\) más antiguos, el contenido de dicho archivo estaba restringido a caracteres ASCII; con el resto de caracteres, todas las apuestas estaban canceladas. Hoy en día, prácticamente cualquier carácter Unicode debería ser admisible.
Si utiliza filecontents
para enviar todos los archivos necesarios para procesar su documento en un único archivo maestro, entonces es mejor colocar los entornos en la parte superior del archivo para que se escriban antes de que sean necesarios cuando procesar el documento.
Sin embargo, también hay casos de uso en los que uno desearía escribir archivos en algún lugar dentro del cuerpo del documento. Por ejemplo, si tiene algún material que se reutiliza varias veces, puede escribirlo en un archivo y luego cargar ese archivo mediante \input
cuando sea necesario. Otros casos de uso son paquetes que requieren su entrada en archivos externos (ltxtable
es un ejemplo). En ese caso, puede mantener sus datos donde pertenecen en su fuente y escribirlos en un archivo antes de usarlos. Si está utilizando filecontents
para tales fines, es mejor agregar la opción forzar
, porque de lo contrario es probable que se sienta desconcertado por el hecho de que cambia sus datos y no sucede nada en su documento (porque el archivo ya estaba escrito en una ejecución anterior).
2.5.2 Información de archivo de documentos
Para fines de archivo o para compartir o colaborar en documentos, a menudo es importante registrar (y normalmente recopilar) todos los archivos necesarios para procesar un documento. Esto necesita sus versiones correctas para recrear fielmente el documento en una etapa posterior o en un lugar diferente. Para ello se encuentran disponibles una serie de herramientas y programas.
Como solución simple \(\LaTeX\) ya ofrece el comando \listfiles
, que registra todos los archivos que se abren con \documentclass
, \usepackage
, \include
, \input
, \includegraphics
, etc. Supongamos que procesa el siguiente documento
\documentclass[12pt]{article} \usepackage{lmodern} \listfiles \begin{document} Hello, world! \end{document}
entonces, como resultado, su archivo de transcripción mostrará la siguiente lista de archivos, posiblemente con diferentes números de versión si su instalación es anterior o anterior:
*File List* article.cls 2021/02/12 v1.4n Standard LaTeX document class size12.clo 2021/02/12 v1.4n Standard LaTeX file (size option) lmodern.sty 2015/05/01 v1.6.1 Latin Modern Fonts ot1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern l3backend-pdftex.def 2021-05-07 L3 backend support: PDF output (pdfTeX) ***********
Como puede ver, esto muestra la clase de documento, el archivo de opciones de clase, el paquete utilizado y un archivo de definición de fuente para Latin Modern, pero claramente falta todo lo demás relacionado con el uso de fuentes. Por lo tanto, si las fuentes utilizadas en su documento no existen en ningún otro lugar (o en una versión diferente), los resultados del procesamiento de su documento pueden diferir sin que haya forma de determinar la causa.
Sin embargo, ayuda mucho a resolver problemas al colaborar con otros o experimentar un problema que otros no parecen tener: un buen consejo en tales casos es agregar \listfiles
al documento y comparar los resultados en diferentes instalaciones. En muchos casos esto ya indica el motivo de un comportamiento diferente.
2.5.3 snapshot, bundledoc - Archivo y verificación de documentos
El paquete de instantáneas de Michael Downes (1958–2003) utiliza el mismo enfoque que \listfiles
para recopilar información de archivo sobre un documento, pero la presenta de manera que pueda verificarse automáticamente en una etapa posterior o en una instalación diferente. Esto es particularmente útil cuando se colabora o cuando se desea archivar documentos y registrar esta información como parte del documento mismo.
Para habilitarlo, debe colocar el paquete en la primera línea de su documento usando \RequirePackage[error]{snapshot}
incluso antes de \documentclass
. Sin más opciones para el paquete, este escribirá un archivo con la extensión .dep
(para dependencias) que contiene las siguientes líneas si se aplica a nuestro documento de ejemplo:
\RequireVersions{ *{application}{pdfTeX} {0000/00/00 v1.40.22} *{format} {LaTeX2e} {2021-06-01 v2.e} *{package}{snapshot} {2020/06/17 v2.14} *{class} {article} {2021/02/12 v1.4n} *{file} {size12.clo} {2021/02/12 v1.4n} *{package}{lmodern} {2015/05/01 v1.6.1} *{file} {ot1lmr.fd} {2015/05/01 v1.6.1} *{file} {l3backend-pdftex.def}{2021-05-07 v3} }
Hasta este punto, esto no es muy diferente que cuando se usa \listfiles
, excepto que la información se coloca en un archivo separado y es un poco más estructurada. Sin embargo, como siguiente paso, puede copiar el contenido de este archivo en su documento directamente después de cargar el paquete, lo que lo convierte en la información de registro de este documento. A partir de ahora estos datos se comprueban en cada ejecución y, si se encuentran diferencias, generan una advertencia o un error.
Por ejemplo, supongamos que colabora con algunas personas en la escritura del cuento “Hola Mundo” y su instalación de \(\TeX\) tiene un paquete Latin Modern obsoleto en algún lugar de su árbol texmf
, entonces verán el siguiente mensaje de error
! Package snapshot Error: Required version 2009/10/30 v1.6 of lmodern.sty and provided version 2008/12/01 v1.5 do not match.
si intentan ejecutar el documento. Si prefiere generar solo advertencias en lugar de errores, use la opción “advertencia” (o ninguna opción). También es posible restringir la verificación de la información del archivo solo a fechas, versiones o números de versión principal usando una de las opciones “fecha”, “versión” o “versión principal”. Si se aplica esta última en nuestro ejemplo, no No habría ningún error porque la versión principal es “1” para ambos archivos.
El archivo .dep
producido por snapshot también se puede utilizar para producir un archivo con todos o algunos de los archivos que enumera, utilizando el programa bundledoc de Scott Pakin. Esto es particularmente útil si desea enviar su documento con todos los archivos necesarios a otra persona y no quiere preocuparse por perderse nada relevante. Por ejemplo, las revistas suelen solicitar todos los archivos fuente además del PDF listo para la cámara. En ese caso corriendo
bundledoc --verbose --localonly --include=⟨myfile⟩.pdf ⟨myfile⟩.dep
hace el truco y obtienes un archivo que contiene el PDF final y todo lo necesario y que no forma parte de la instalación principal de \(\TeX\). Por supuesto, requiere un archivo .dep
actualizado; es decir, debe incluir el paquete snapshot
como se describe arriba y procesar su documento con él.
Alternativamente, o además, puede usar --exclude=
string para excluir todos los archivos cuyos nombres contengan esa cadena, y con --include
, puede solicitar explícitamente que se agreguen al archivo archivos adicionales que de otro modo no estarían incluidos. archivar como lo hicimos arriba. Por ejemplo, es posible que desee incluir sus bases de datos de bibliografía (y no solo los archivos .bbl
resultantes utilizados por el documento), lo que se puede lograr con --include="*.bib"
. Ambas opciones se pueden utilizar tantas veces como sea necesario. La opción --verbose
, como se usó anteriormente, brinda información sobre el progreso.
Sin ninguna de las opciones anteriores, “bundledoc” incluye todos los archivos enumerados en el archivo “.dep”, que es más adecuado para fines de archivo. Pero no olvide que algunos archivos importantes para los resultados finales (como los archivos de fuentes) no están incluidos. La ventaja es que el archivo es notablemente más pequeño en comparación con los producidos por mkjobtexmf
que se analizan en la siguiente sección. Por lo general, un enfoque viable es archivar adicionalmente las distribuciones anuales de \(\TeX\) Live, ya que las fuentes cambian con menos frecuencia. Sin embargo, para obtener resultados 100% precisos, es posible que sea necesario archivar todos los archivos de un proyecto determinado utilizando mkjobtexmf
.
De forma predeterminada, bundledoc
aplana la estructura del directorio y coloca todos los archivos del archivo uno al lado del otro. Con --keepdirs
se conserva la estructura original.
Con la opción --config
puede seleccionar un archivo de configuración, por ejemplo, --config=miktex.cfg
para archivos .zip
en MiK\(\TeX\). Otro interesante es texlive-unix-arlatex.cfg
, que genera un único archivo \(\LaTeX\) que incluye todos los demás archivos a través de entornos filecontents
. En la documentación se describe cómo definir su propio archivo de configuración, donde también encontrará detalles sobre algunas otras opciones que pueden resultar útiles en algunos casos.
Puedes omitir las extensiones .dep
y .cfg
para la dependencia y el archivo de configuración, así que en MiK\(\TeX\), por ejemplo, podríamos escribir
bundledoc --config=miktex --localonly --include=⟨myfile⟩.pdf ⟨myfile⟩
para preparar un archivo .zip
para el envío de una revista.
2.5.4 mkjobtexmf - Proporcionar un árbol de archivos TeX mínimo
Para saber exactamente qué archivos utiliza un motor \(\TeX\) al procesar un documento, la mayoría de los motores modernos ofrecen la opción de línea de comandos -recorder
. Si se usa, se genera un archivo con la extensión .fls
que contiene información sobre todos los archivos que el motor abrió para lectura o escritura, uno por línea. Con nuestro ejemplo “Hola mundo”, esto equivale a 28 líneas, y después de eliminar los duplicados (\(\LaTeX\) abre la mayoría de los archivos dos veces para su lectura), quedan las siguientes 16, entre ellos varios archivos de configuración y fuentes y el archivo de formato:
INPUT /usr/local/texlive/2023/texmf-dist/fonts/enc/dvips/lm/lm-rm.enc INPUT /usr/local/texlive/2023/texmf-dist/fonts/map/fontname/texfonts.map INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/cm/cmr12.tfm INPUT /usr/local/texlive/2023/texmf-dist/fonts/tfm/public/lm/rm-lmr12.tfm INPUT /usr/local/texlive/2023/texmf-dist/fonts/type1/public/lm/lmr12.pfb INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/base/article.cls INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/base/size12.clo INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/lm/lmodern.sty INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/lm/ot1lmr.fd INPUT /usr/local/texlive/2023/texmf-dist/tex/latex/snapshot/snapshot.sty INPUT /usr/local/texlive/2023/texmf-dist/web2c/texmf.cnf INPUT /usr/local/texlive/2023/texmf-var/fonts/map/pdftex/updmap/pdftex.map INPUT /usr/local/texlive/2023/texmf-var/web2c/pdftex/pdflatex.fmt INPUT /usr/local/texlive/2023/texmf.cnf INPUT myfile.aux INPUT myfile.tex
Para una precisión del 100%, todos ellos, excepto el archivo .aux
, deben archivarse, y hacerlo con la opción --include
de bundledoc
sería bastante engorroso. Aquí es donde entra en juego el programa mkjobtexmf
de Heiko Oberdiek. si ejecutas
mkjobtexmf --verbose --copy --jobname myfile # without extension
luego se ejecuta \(\LaTeX\) (usando la opción -recorder
) en el archivo myfile.tex
. Se examina el archivo .fls
resultante y todos los archivos del listado anterior se copian en el directorio myfile.mjt
usando una configuración estándar de subdirectorios texmf
. Para archivarlo, todo lo que queda es comprimir este directorio y almacenarlo en un lugar seguro. Tenga en cuenta que --copy
o --force-copy
es esencial para que esto funcione: sin ellos, mkjobtexmf agrega enlaces a los archivos, no copias físicas.1 –copy no sobrescribe los archivos existentes en el texmf de destino. , mientras que –force-copy sí. Esto último es útil porque significa que las actualizaciones se contabilizan correctamente si ejecuta el programa repetidamente y desea asegurarse de que las últimas versiones estén dentro del árbol.
Siempre es obligatoria la opción --jobname
para especificar el archivo a ejecutar y el directorio de destino predeterminado. --verbose
muestra información sobre lo que hace mkjobtexmf
y, en ocasiones, es útil.
Si prefiere una estructura plana con todos los archivos directamente en el directorio myfile.mjt
, especifique la opción --flat
. Si su documento debe procesarse con uno de los motores Unicode, también puede especificarlo, por ejemplo, usando --cmd-tex lualatex
para Lua\(\TeX\).
Hay una serie de opciones adicionales para modificar el comportamiento del programa, incluida la definición del directorio de destino (--destdir
), el nombre del archivo \(\LaTeX\) a procesar si tiene una extensión diferente de .tex
(--texname
), y varios otros. --help
produce una referencia concisa pero útil.
Si utiliza mkjobtexmf
para fines de archivo como se describe anteriormente, debe tener en cuenta un aspecto importante en el comportamiento del programa. Siempre solo agrega material nuevo a su directorio de destino, pero nunca lo elimina ni reemplaza ningún enlace existente a un archivo con una copia del archivo o viceversa. Si el propósito es acelerar el procesamiento, está bien, pero para archivar el resultado final, podría significar que el archivo contiene archivos que ya no se usan o contiene enlaces donde debería contener copias porque olvidó especificar --copy
en la primera invocación. Peor aún, es posible que no contenga la última versión de sus archivos fuente si han cambiado desde la primera vez que utilizó el programa.
2.5.5 Concepto de rollback para LaTeX y paquetes individuales
Mantener actualizada la instalación de \(\LaTeX\) y utilizar los paquetes más recientes suele ser una buena opción porque eso significa que obtendrá las últimas correcciones y actualizaciones de funciones. El universo \(\LaTeX\) es conocido por su incomparable compatibilidad con versiones anteriores: reprocesar documentos de décadas de antigüedad con un \(\LaTeX\) moderno normalmente no es un problema y muy rara vez requiere ajustes por parte del usuario.
Sin embargo, hay casos en los que los paquetes cambian sus interfaces de manera incompatible o en los que usted ha solucionado un problema y ahora que el problema está resuelto, la solución alternativa ya no funciona.
Para situaciones como esta, \(\LaTeX\) introdujo en 2015 un concepto de reversión para el kernel de \(\LaTeX\), así como para las clases y paquetes de documentos, lo que permite a los mantenedores de \(\LaTeX\) realizar correcciones en el software mientras continúan. para mantener la compatibilidad con versiones anteriores al más alto grado. Con su ayuda, puede pedirle explícitamente a \(\LaTeX\) que revierta su código a una versión que estaba vigente en una fecha específica, y el software hace todo lo posible para deshacer los cambios para que coincidan con este estado.
Para solicitar una reversión del kernel a su estado en una fecha determinada, utilice el paquete latexrelease
del equipo del proyecto \(\LaTeX\). Por ejemplo,
\RequirePackage[2016-01-01]{latexrelease}
resultaría en deshacer todas las modificaciones del kernel (correcciones o extensiones) publicadas entre el 1 de enero de 2016 y la fecha actual. Deshacer significa reinstalar las definiciones vigentes en la fecha solicitada y normalmente también eliminar nuevos comandos de la memoria de \(\TeX\) para que \newcommand
y declaraciones similares no caigan porque ya se ha declarado un nombre.
Este mecanismo ayuda a procesar correctamente documentos más antiguos que contienen soluciones para problemas con un kernel más antiguo y problemas que desde entonces se han solucionado de una manera que haría que el documento antiguo fallara o produjera resultados diferentes cuando se procesara con el kernel más nuevo y arreglado.
Si es necesario, el paquete latexrelease también permite avanzar el kernel sin instalar un nuevo formato. Por ejemplo, si su instalación actual tiene fecha 2016-04-01 pero tiene un documento que requiere un kernel con fecha 2018-01-01, esto se puede lograr iniciándolo con
\RequirePackage[latest]{latexrelease}
siempre que tenga una versión del paquete latexrelease
que conozca los cambios del kernel entre la fecha de su kernel y la fecha solicitada. Obtener esta versión del paquete es simple ya que la última versión siempre se puede descargar desde Comprehensive \(\TeX\) Archive Network (CTAN). De esta forma, podrá procesar su documento correctamente, incluso cuando actualizar su instalación completa no sea aconsejable o sea imposible por una u otra razón.
Escenarios típicos
Un ejemplo típico, para el cual dicha funcionalidad de reversión habría proporcionado un beneficio importante (y lo será para los paquetes en el futuro), es el paquete “caption” de Axel Sommerfeldt. Este paquete comenzó con el nombre de “caption” con una determinada interfaz de usuario. Con el tiempo quedó claro que había algunas deficiencias en la interfaz de usuario; Para rectificarlos sin que los documentos más antiguos fallen, Axel introdujo “caption2”. Posteriormente, la sintaxis de ese paquete fue reemplazada, lo que resultó en “caption3”, y luego se le cambió el nombre a “caption”. Por lo tanto, ahora los documentos más antiguos que usan “caption” fallarán, mientras que los documentos del período intermedio requieren “caption2” (que figura como reemplazado en CTAN pero aún se distribuye en las distribuciones principales). Por lo tanto, los usuarios acostumbrados a copiar el preámbulo de su documento de un documento a otro probablemente sigan usándolo sin darse cuenta de que en realidad están usando una versión con interfaces defectuosas y limitadas.
Otro ejemplo sería el paquete fixltx2e
que durante muchos años contuvo correcciones para el kernel \(\LaTeX\). En 2015, estos se integraron en el kernel, por lo que hoy este paquete es un shell vacío que solo le dice al usuario que ya no es necesario. Sin embargo, si procesa un documento antiguo (anterior a 2015) usando la reversión y ese documento carga fixltx2e
, entonces, por supuesto, las correcciones proporcionadas originalmente por este paquete (como las correcciones al algoritmo flotante) se perderían, ya que ahora no lo son. en el kernel ni en el paquete “vacío” fixltx2e
si eso no se revierte también; afortunadamente lo hace, por lo que en realidad no es un shell vacío.
Un ejemplo algo diferente sería el paquete “amsmath”, que durante casi una década no sufrió ninguna corrección a pesar de que se han encontrado varios problemas a lo largo de los años. Si tales errores finalmente se corrigen, eso afectaría a muchos de los documentos escritos desde 2000, ya que sus autores pueden haber solucionado manualmente una u otra deficiencia del código. Por supuesto, al igual que con el paquete caption
, se podrían introducir amsmath2
, amsmath3
, . . . paquete, pero eso impone al usuario la carga de seleccionar siempre la última versión (en lugar de usar automáticamente la última versión a menos que realmente necesite una anterior).
Interfaz a nivel de documento
De forma predeterminada, \(\LaTeX\) usa automáticamente la versión actual de cualquier clase o paquete, y antes de ofrecer el nuevo concepto de reversión siempre lo hacía a menos que el paquete o clase tuviera su propio esquema para proporcionar control de versiones, ya sea usando nombres alternativos o usando versiones manuales. Opciones codificadas que seleccionan una versión.
Con el nuevo concepto de reversión, todo lo que el usuario tiene que hacer (si desea que un documento se procese con una versión específica del kernel y los paquetes) es agregar el paquete latexrelease
al principio del documento y especificar la fecha deseada como paquete. opción, por ejemplo,
\RequirePackage[2018-01-01]{latexrelease}
Esto revierte el kernel a su estado de ese día (como se describió anteriormente), y para cada paquete y clase de documento, verifica si hay versiones alternativas disponibles y selecciona la versión más apropiada de ese paquete o clase en relación con el estado dado. fecha.
Es posible realizar más ajustes detallados: tanto \documentclass
como \usepackage
tienen un segundo argumento opcional (menos conocido) que hasta ahora se utilizaba para permitir la especificación de una “fecha mínima”. Por ejemplo, al declarar
\usepackage[colaction]{multicol}[2018-01-01]
especifica que se espera que multicol
no sea anterior a principios de 2018. Si solo se encuentra una versión anterior, procesar dicho documento generará un mensaje de advertencia:
LaTeX Warning: You have requested, on input line 12, version ‘2018-01-01’ of package multicol, but only version ‘2017/04/11 v1.8q multicolumn formatting (FMi)’ is available.
La idea detrás de este enfoque es que los paquetes rara vez cambian la sintaxis de manera incompatible, sino que más a menudo agregan nuevas características: con dicha declaración puedes indicar que necesitas una versión que proporcione ciertas características nuevas.
El nuevo concepto de reversión ahora amplía el uso de este argumento opcional al permitirle proporcionar además una fecha objetivo para la reversión. Esto se hace anteponiendo una cadena de fecha con un signo igual. Por ejemplo,
\usepackage{multicol}[=2017-06-01]
solicitaría una liberación de multicol
que corresponda a su versión de junio de 2017.
Entonces, suponiendo que en algún momento en el futuro habrá una reescritura importante de este paquete que cambie la forma en que se equilibran las columnas, lo anterior solicitaría una alternativa a lo que ahora es la versión actual del 2017-04-11. El antiguo uso de este argumento opcional todavía está disponible porque la existencia o ausencia de =
determina cómo se interpreta la fecha.
El mismo mecanismo está disponible para las clases de documentos a través de la declaración \documentclass
y para \RequirePackage
si alguna vez es necesario.
Especificar una fecha de reversión es lo más apropiado si desea garantizar que el comportamiento del motor de procesamiento (es decir, el kernel y todos los paquetes) corresponda a esa fecha específica. De hecho, una vez que haya terminado de editar un documento, puede conservarlo para la posteridad agregando esta línea en la parte superior de su documento:
\RequirePackage[today’s-date]{latexrelease}
Esto significaría que se procesa un poco más lentamente (porque es posible que el kernel se revierta y se revise cada paquete en busca de versiones alternativas), pero tendría la ventaja de que procesarlo en el futuro probablemente seguirá funcionando sin el Necesito agregar esa línea más tarde.
Sin embargo, en un caso como el del paquete caption
o, digamos, el paquete longtable
, al especificar una versión en lugar de una fecha que eventualmente podría ver una nueva versión importante después de varios años, sería bueno permitir la especificación de una versión “nombrada” en lugar de una fecha: por ejemplo, un usuario podría querer usar explícitamente la versión 4 en lugar de la 5 de “longtable” cuando estas versiones tienen una sintaxis incompatible o producen resultados diferentes.
Esto ahora también es posible si el desarrollador declara versiones “con nombre” para un paquete o clase: entonces se puede solicitar una versión con nombre simplemente usando este segundo argumento opcional con el “nombre” precedido por un signo igual. Por ejemplo, si hay una nueva versión de longtable
y la versión anterior (ahora actual) está etiquetada como “v4
”, entonces todo lo que se necesita para seleccionar esa versión anterior es
\usepackage{longtable}[=v4]
Tenga en cuenta que no es necesario saber que la nueva versión tiene fecha del 2018-04-01 (ni solicitar una fecha anterior) para recuperar la versión anterior.
La versión “nombre” es una cadena arbitraria a discreción del autor del paquete, pero tenga en cuenta que no debe parecerse a una especificación de fecha; es decir, no debe contener guiones ni barras, porque confunden la rutina de análisis.
La interfaz de usuario es bastante simple y, para mantener alta la velocidad de procesamiento, la verificación de sintaxis es bastante ligera e implacable si encuentra datos inesperados. Básicamente, cualquier cadena que contenga un guión o una barra diagonal activa el análisis de la fecha, que luego espera dos guiones (en el caso de una fecha ISO) o dos barras diagonales (de lo contrario) y, aparte de estos separadores, solo dígitos. Si encuentra algo más, lo más probable es que reciba un error “Falta \begin{document}
” o, quizás aún más desconcertante, que se esté realizando una selección extraña. Por ejemplo, “2011/02” puede significar para usted febrero de 2011, pero para la rutina de análisis es algún día del año 20 d.C. Es decir, se convierte al número único “201102” de modo que cuando este número se compare numéricamente a, digamos, 20000101
, es el número más pequeño, es decir, anterior, aunque este último sea la representación numérica del 1 de enero de 2000. En pocas palabras: no escriba mal las fechas y todo estará bien.
Interfaz del escritor de paquetes
Los comandos para configurar la funcionalidad de reversión en paquetes y clases se describen en el Apéndice A.6.1 en la página →II 693; para obtener más detalles sobre los conceptos, consulte [137].