Tutorial
Cómo escribir tu propio paquete en $\mathrm{\LaTeX}$
Convierte macros dispersas en una herramienta reutilizable para dar consistencia, orden y personalidad a tus documentos.
Si tus documentos de $\mathrm{\LaTeX}$ ya acumulan comandos repetidos, estilos copiados y un preámbulo difícil de
entender, quizá es momento de escribir tu primer paquete. En este tutorial crearás un archivo
.sty desde cero, con comandos propios, cajas visuales y opciones de configuración, para
reutilizar tus mejores ideas sin repetir código.
Introducción
Cuando un documento de $\mathrm{\LaTeX}$ comienza a crecer, su preámbulo suele llenarse de comandos personalizados, como una orden para resaltar conceptos, otra para escribir unidades, una caja para observaciones, colores institucionales, configuraciones de tablas y ajustes tipográficos.
Al principio parece razonable copiar ese bloque de código de un archivo a otro, pero después aparecen los problemas: una mejora debe aplicarse manualmente en varios proyectos, distintas versiones de una misma macro producen resultados diferentes y el preámbulo deja de ser legible. La solución puede ser crear un paquete propio.
Un paquete de $\mathrm{\LaTeX}$ es un archivo con extensión .sty que agrupa comandos, entornos,
configuraciones y dependencias reutilizables. No es necesario publicar un paquete en CTAN para aprovechar esta
idea, ya que un archivo local puede convertirse en la base común para tus apuntes, artículos, manuales, tesis o
materiales docentes.
En este tutorial construiremos un paquete sencillo llamado misnotas.sty. Tendrá tres funciones:
- Resaltar conceptos importantes con un color consistente.
- Escribir una magnitud seguida de su unidad.
- Crear cajas visuales para ideas, advertencias o notas técnicas.
Además, el usuario podrá elegir una paleta de color al cargar el paquete.
Cuándo conviene crear un paquete
No toda macro merece convertirse en un paquete. Si defines un comando que solo usarás una vez en un documento breve, colocarlo en el preámbulo es suficiente.
Un paquete empieza a tener sentido cuando ocurre alguna de estas situaciones:
- Usas las mismas órdenes o estilos en varios documentos.
- Quieres mantener una identidad visual uniforme.
- Necesitas separar el contenido de un documento de sus detalles de formato.
- Deseas compartir herramientas de $\mathrm{\LaTeX}$ con estudiantes, colegas o colaboradores.
- Tu preámbulo ya parece una colección difícil de mantener.
Se debe distinguir un paquete de una clase. Un paquete agrega capacidades a un documento existente; una clase determina su arquitectura general. Por ejemplo, una clase puede definir la estructura completa de una tesis o una revista, mientras que un paquete puede proporcionar colores, comandos matemáticos, cajas, estilos de código o encabezados.
El proyecto mínimo
Crea una carpeta y coloca en ella dos archivos: main.tex y misnotas.sty. El archivo
main.tex será el documento principal. El archivo misnotas.sty contendrá el
paquete.
En Overleaf puedes crear el segundo archivo con la opción New File y asignarle exactamente el
nombre misnotas.sty. Si ambos archivos están en la misma carpeta, $\mathrm{\LaTeX}$ encontrará el paquete
automáticamente.
La identidad de un paquete
Todo paquete debe comenzar declarando qué formato de $\mathrm{\LaTeX}$ requiere y cómo debe identificarse:
La primera línea indica que el paquete utiliza $\mathrm{\LaTeX} 2$$\varepsilon$, que es la base de la mayoría de los documentos actuales.
La segunda le asigna un nombre al paquete y registra una fecha, una versión y una breve descripción. La fecha
sigue el formato AAAA/MM/DD. Esta información parece secundaria cuando el archivo es pequeño, pero
se
vuelve muy útil al mantener varias versiones de un paquete o compartirlo con otras personas.
Importar dependencias correctamente
Dentro de un documento normal usamos \usepackage{...}, pero dentro de un archivo .sty
la forma apropiada es \RequirePackage{...}.
Para nuestro paquete necesitaremos colores, cajas y herramientas matemáticas:
El paquete xcolor permite definir y combinar colores; tcolorbox facilita la creación
de cajas con bordes, fondo y título; amsmath amplía las herramientas para escribir matemáticas.
Como regla general, si tu paquete depende de otro, decláralo dentro del propio paquete. Así, quien use
misnotas.sty no tendrá que recordar cargar manualmente todas sus dependencias.
Nuestro primer paquete completo
Guarda el siguiente código en el archivo misnotas.sty:
Aunque el archivo es corto, ya contiene varios elementos fundamentales de un paquete bien organizado.
Los colores mnAccent y mnSoft son internos al paquete. Se agregó el prefijo
mn que significa “mis notas” para evitar conflictos con otro paquete que pudiera usar los mismos
nombres. Los nombres cortos como \nota, \unidad o \colorprincipal parecen
cómodos, pero pueden chocar con comandos definidos en otro proyecto.
En cambio, los comandos \mnconcepto y \mnunidad son parte de la interfaz pública. Son
las órdenes que el usuario del paquete utilizará directamente en sus documentos.
La instrucción \endinput indica que el archivo termina ahí. Todo lo que quede después será
ignorado por LaTeX, lo cual resulta útil si más adelante deseas dejar notas de desarrollo o documentación
interna.
Cargar el paquete desde un documento
Ahora crea el archivo main.tex con este contenido:
La línea más importante es esta:
Con ella, $\mathrm{\LaTeX}$ localiza el archivo misnotas.sty, procesa sus dependencias y activa la opción
azul.
El resultado es un documento donde los conceptos importantes aparecen destacados, las unidades se escriben de manera uniforme y las observaciones se presentan dentro de una caja visualmente consistente.
Entender las opciones del paquete
Las opciones permiten modificar el comportamiento de un paquete al cargarlo. En nuestro caso, las opciones disponibles son:
Cada opción redefine dos colores, uno para el acento principal y otro para el fondo suave de las cajas.
El elemento central es la instrucción \DeclareOption. Su primer argumento es el nombre de la
opción; el segundo contiene el código que $\mathrm{\LaTeX}$ ejecutará si esa opción aparece al cargar el paquete.
Después de declarar todas las opciones, se utiliza:
Esta línea ordena a $\mathrm{\LaTeX}$ que procese las opciones solicitadas. Sin ella, las declaraciones existirían, pero no tendrían efecto.
También incluimos una opción genérica mediante \DeclareOption*. Si alguien escribe por error:
LaTeX mostrará un error claro y explicará cuáles son las opciones aceptadas. Este detalle puede ahorrar mucho tiempo de depuración, especialmente cuando el paquete comienza a crecer.
Crear comandos que expresen intención
Una ventaja importante de los paquetes es que permiten escribir documentos en un nivel más cercano a la intención del autor.
Por ejemplo, el comando:
no solo produce texto en negritas y a color, sino que también comunica que linealidad es un concepto que debe destacarse. Si más adelante decides sustituir el color por versalitas, un recuadro o una tipografía distinta, solo modificas la definición dentro del paquete. El contenido de todos tus documentos permanece intacto.
Algo similar ocurre con:
Esta orden garantiza un espacio fino entre el número y la unidad, además de escribir la unidad en tipografía romana en modo matemático. El documento queda más consistente que si cada magnitud se escribiera manualmente.
La idea es bastante poderosa, porque un buen paquete no solo reduce código repetido, también convierte decisiones de estilo en comandos con significado.
Buenas prácticas desde el inicio
Un paquete pequeño puede crecer rápidamente. Las siguientes recomendaciones te ayudarán a mantenerlo sano:
- Usa nombres específicos. Prefijos como
mn,labo las iniciales de un proyecto reducen la probabilidad de conflictos con paquetes externos. - Mantén una frontera clara entre interfaz y detalles internos. Los comandos que otras personas usarán deben tener nombres comprensibles y estables. Los colores, contadores o macros auxiliares pueden permanecer como detalles internos.
- No modifiques comandos ajenos sin una razón clara.
\renewcommandpuede ser útil, pero también puede alterar el comportamiento esperado de otros paquetes. Siempre que sea posible, crea comandos nuevos. - Incluye mensajes útiles.
\PackageInfo,\PackageWarningy\PackageErrorpermiten informar al usuario qué ocurrió durante la compilación. Los errores claros son parte de la calidad de un paquete. - Actualiza la versión. Cada vez que hagas un cambio importante, modifica la fecha y el identificador en
\ProvidesPackage. Es una práctica sencilla que evita confusiones entre copias distintas del mismo archivo. - Prueba el paquete en un documento mínimo. Un
main.texde pocas líneas es la forma más rápida de comprobar que las dependencias, comandos y opciones funcionan como esperas.
De archivo local a herramienta reutilizable
Al principio, puedes colocar misnotas.sty junto al único documento main.tex. Con el
tiempo, puedes copiarlo a otros proyectos o conservarlo en una carpeta personal de plantillas.
También puedes ampliar el paquete con estilos para código, tablas, referencias, teoremas, portadas o diagramas. La clave es no convertirlo en un contenedor caótico de todo lo que has usado alguna vez. Cada comando debe tener una función clara y una justificación práctica.
Escribir un paquete propio no significa reinventar $\mathrm{\LaTeX}$. Antes de crear una solución desde cero, vale la pena
revisar si existe un paquete maduro que ya resuelva el problema. Pero cuando necesitas capturar convenciones
particulares de tu trabajo, de una asignatura, de un laboratorio o de una colección de documentos, un archivo
.sty es una de las herramientas más limpias y útiles que ofrece $\mathrm{\LaTeX}$.
La verdadera ventaja no es tener más código, sino lograr que cada documento exprese mejor sus ideas mientras el formato se mantiene consistente, reutilizable y fácil de mantener.
Bibliografía
- Mittelbach, F., & Fischer, U. (2023). The LaTeX Companion (3rd ed., Parts I–II). Addison-Wesley Professional.