Este sistema proporciona componentes visuales especializados para diferentes disciplinas académicas de la EPS UA.
- 📋 Índice
- Instalación y Uso
- Componentes Comunes (
eps-comunes.sty) - Componentes de Software (
eps-software.sty) - Componentes de Telecomunicaciones (
eps-telecom.sty) - Componentes de Arquitectura (
eps-arquitectura.sty) - Componentes de Química (
eps-quimica.sty) - Componentes de Geología (
eps-geologia.sty) - Componentes de Prevención (
eps-prevencion.sty) - Paleta de colores
- Regenerar previews
El paquete se carga de forma modular para minimizar el tiempo de compilación:
% Solo componentes comunes (cajas de información, alertas, etc.)
\usepackage{eps-componentes}
% Componentes específicos (carga también los comunes)
\usepackage[software]{eps-componentes} % IT/Informática
\usepackage[telecom]{eps-componentes} % Telecomunicaciones
\usepackage[arquitectura]{eps-componentes} % Arquitectura/Construcción
\usepackage[quimica]{eps-componentes} % Química/Materiales
\usepackage[geologia]{eps-componentes} % Geología
\usepackage[prevencion]{eps-componentes} % Prevención de riesgos
% Múltiples módulos
\usepackage[software,telecom]{eps-componentes}
% Todos los componentes (más lento)
\usepackage[all]{eps-componentes}Se cargan siempre automáticamente con cualquier opción.
\begin{infobox}
Esta es una caja de información general para notas importantes.
\end{infobox}Resultado:
\begin{successbox}
Operación completada correctamente. Buena práctica recomendada.
\end{successbox}Resultado:
\begin{warningbox}
Advertencia: este proceso requiere atención especial.
\end{warningbox}Resultado:
\begin{dangerbox}
¡Peligro! Error crítico que debe evitarse.
\end{dangerbox}Resultado:
\begin{tipbox}
Consejo: usa atajos de teclado para mayor productividad.
\end{tipbox}Resultado:
\begin{notebox}
Nota adicional o comentario secundario.
\end{notebox}Resultado:
\begin{titlebox}{Título Personalizado}
Contenido de la caja con título personalizado.
\end{titlebox}Resultado:
\begin{definitionbox}{Algoritmo}
Conjunto ordenado y finito de operaciones que permite hallar la solución de un problema.
\end{definitionbox}Resultado:
\begin{examplebox}[Ejemplo de uso]
Aquí se muestra un caso práctico de aplicación.
\end{examplebox}Resultado:
\begin{importantbox}
Este contenido es especialmente importante y no debe pasarse por alto.
\end{importantbox}Resultado:
\begin{checklist}
\item[\checked] Tarea completada
\item[\partialchecked] Tarea parcialmente completada
\item[\unchecked] Tarea pendiente
\end{checklist}Resultado:
\begin{proscons}
\pro Fácil de implementar
\pro Bien documentado
\con Curva de aprendizaje inicial
\con Requiere configuración
\end{proscons}Resultado:
\begin{steplist}
\step Descargar el código fuente
\step Instalar dependencias
\step Configurar variables
\step Ejecutar el script
\end{steplist}Resultado:
\badge{Estable} \quad
\badge[eps-success]{Completado} \quad
\badge[eps-warning]{En revisión} \quad
\badge[eps-danger]{Crítico}Resultado:
\badgenew \quad \badgewip \quad \badgedeprecated \quad \badgebetaResultado:
\version{1.0.0} \quad \version{2.1.0} \quad \version{3.0.0-beta}Resultado:
Progreso: \progressbar{25} \quad \progressbar{50} \quad \progressbar{75}Resultado:
Rating: \rating{3}{5} \quad \rating{4}{5} \quad \rating{5}{5}Resultado:
Nivel: \levelbar{2}{5} \quad \levelbar{4}{5} \quad \levelbar{5}{5}Resultado:
\begin{timeline}
\timeitem{Ene 2024}{Inicio del proyecto}
\timeitem{Mar 2024}{Diseño de arquitectura}
\timeitem{Jun 2024}{Implementación principal}
\timeitem{Dic 2024}{Entrega final}
\end{timeline}Resultado:
\begin{quotebox}[Albert Einstein]
La imaginación es más importante que el conocimiento.
\end{quotebox}Resultado:
\begin{comparison}{Opción A}{Opción B}
\comprow{Velocidad}{Rápido}{Moderado}
\comprow{Memoria}{Alta}{Baja}
\comprow{Costo}{Bajo}{\$\$\$}
\end{comparison}Resultado:
\personcard{Dr. García}{Director}{Experto en IA con 15 años de experiencia}Resultado:
\statcard{1.5M}{Usuarios}{\faUsers}{eps-primary}Resultado:
Cargar con: \usepackage[software]{eps-componentes}
\begin{apiendpoint}{GET}{/api/users/:id}
\apidescription{Obtiene un usuario por su ID único del sistema.}
\apiresponse{200}{\{"id": 123, "name": "Juan García"\}}
\end{apiendpoint}Resultado:
\begin{apiendpoint}{POST}{/api/users}
\apidescription{Crea un nuevo usuario en el sistema.}
\apiresponse{201}{\{"id": 124, "message": "Usuario creado"\}}
\end{apiendpoint}Resultado:
\httpget \quad \httppost \quad \httpput \quad \httppatch \quad \httpdeleteResultado:
\begin{terminal}[Instalación]
\prompt npm install express\\
\prompt npm run build\\
\promptroot systemctl restart nginx
\end{terminal}Resultado:
\begin{dirtreebox}[Estructura del Proyecto]
\dirtreeitem[1]{src/}
\dirtreeitem[2]{assets/}
\dirtreeitem[3]{logo.png}
\dirtreeitem[2]{components/}
\dirtreeitem[3]{Header.js}
\dirtreeitem[3]{Footer.js}
\dirtreeitem[2]{App.js}
\dirtreeitem[2]{index.js}
\dirtreeitem[1]{package.json}
\dirtreeitem[1]{README.md}
\end{dirtreebox}Resultado:
\begin{dbtable}{usuarios}
\pkicon~id & INT & PK, AUTO\_INCREMENT \\
nombre & VARCHAR(100) & NOT NULL \\
email & VARCHAR(255) & UNIQUE \\
\fkicon~rol\_id & INT & FK $\rightarrow$ roles.id \\
\end{dbtable}Resultado:
\umlclass{Usuario}{%
\visibility{-} id: int \\
\visibility{-} nombre: string%
}{%
\visibility{+} getNombre(): string \\
\visibility{+} setEmail(e: string): void%
}Resultado:
\gitbranch{main} \quad \gitbranch{develop} \quad \gitbranch{feature/login}
\vspace{0.5em}
\gittag{v1.0.0} \quad \gittag{v2.0.0} \quad \gittag{v2.1.0-beta}Resultado:
\gitcommit{a1b2c3d}{feat: implementar autenticación JWT}{María López}{2024-06-15}Resultado:
\begin{logbox}[Application Logs]
\logentry{INFO}{2024-06-15 10:30:45}{Servidor iniciado en puerto 3000}
\logentry{WARN}{2024-06-15 10:31:02}{Cache miss para usuario 123}
\logentry{ERROR}{2024-06-15 10:32:15}{Timeout en servicio externo}
\end{logbox}Resultado:
\begin{configbox}
DATABASE\_URL="postgresql://localhost/mydb"\\
SECRET\_KEY="super-secret-key-123"\\
DEBUG=true
\end{configbox}Resultado:
\metricbox{Tiempo de respuesta}{45ms}{-12\%}{\faArrowDown}Resultado:
\begin{tcolorbox}[enhanced, title=Benchmark Resultados]
\benchmark{React DOM}{15ms}{20}
\benchmark{Vue Virtual DOM}{12ms}{15}
\benchmark{Vanilla JS}{8ms}{10}
\benchmark{Angular Ivy}{18ms}{25}
\end{tcolorbox}Resultado:
Cargar con: \usepackage[telecom]{eps-componentes}
\begin{smithchartbox}[Adaptación de Impedancias]
\addplot [mark=none, eps-primary, thick] coordinates {(0.5,0.2) (0.2,0) (0.5,-0.2) (1,0)};
\smithpoint{0.5}{0.2}{$Z_L$}
\smithpoint{0.2}{0}{$Z_{in}$}
\end{smithchartbox}Resultado:
\begin{constellationbox}[Constelación QPSK]
\constpoint{1}{1}{00}
\constpoint{-1}{1}{01}
\constpoint{-1}{-1}{11}
\constpoint{1}{-1}{10}
\end{constellationbox}Resultado:
Tabla estilo booktabs con indicadores de conformidad.
\begin{sparameters}[Amplificador LNA - 2.4 GHz]
\sparam{2.40 GHz}{-18.5}{22.3}{-35.2}{-15.8}
\sparam{2.44 GHz}{-17.2}{21.8}{-33.5}{-14.9}
\sparam{2.48 GHz}{-16.8}{21.2}{-32.1}{-14.2}
\end{sparameters}
\textbf{Especificaciones:} S$_{11}$ < -15 dB \sparamok \quad S$_{21}$ > 20 dB \sparamokResultado:
\begin{blockdiagram}
\sysblock{ant}{0,0}{Antena}
\sysblock{lna}{3,0}{LNA}
\sysblock{mix}{6,0}{Mixer}
\sysblock{fil}{9,0}{Filtro}
\sysarrow{ant}{lna}
\sysarrow{lna}{mix}
\sysarrow{mix}{fil}
\end{blockdiagram}Resultado:
\begin{fsmdiagram}
\fsmstate{s0}{0,0}{IDLE}{initial}
\fsmstate{s1}{3,0}{TX}{}
\fsmstate{s2}{3,-2}{RX}{}
\fsmtrans{s0}{s1}{start}
\fsmtrans{s1}{s2}{ack}
\fsmtrans{s2}{s0}{done}
\end{fsmdiagram}Resultado:
Diagrama de trama con regla de bits, soporte para múltiples filas y campos de longitud variable.
\begin{protocolframe}[32]{Trama TCP/IP}
\framefield{4}{Ver}
\framefield{4}{IHL}
\framefield{8}{ToS}
\framefield{16}{Longitud total}
\framebreak
\framefield{16}{Identificación}
\framefield{3}{Flags}
\framefield{13}{Fragment Offset}
\framebreak
\framefield{8}{TTL}
\framefieldhighlight{8}{Protocolo}
\framefield{16}{Checksum cabecera}
\framebreak
\framefield{32}{Dirección IP origen}
\framebreak
\framefield{32}{Dirección IP destino}
\framebreak
\framefieldvar{Opciones + Padding}
\end{protocolframe}Resultado:
Tabla de especificaciones estilo datasheet con soporte para rangos y valores min/typ/max.
\begin{rfspecs}[Transceptor WiFi 802.11ac]
\rfspec{Frecuencia central}{5.8}{GHz}{Canal 36}
\rfspecrange{Rango de frecuencia}{5.15}{5.85}{GHz}{}
\rfspecfull{Potencia de salida}{18}{20}{22}{dBm}{HT80}
\rfspec{Sensibilidad RX}{-90}{dBm}{MCS0}
\rfspec{Figura de ruido}{4.5}{dB}{Típico}
\end{rfspecs}Resultado:
Cargar con: \usepackage[arquitectura]{eps-componentes}
Tabla de propiedades estilo booktabs con soporte para secciones.
\begin{techsheet}{Hormigón HA-25}
\techprop{Resistencia característica}{25 MPa}
\techprop{Tamaño máximo árido}{20 mm}
\techprop{Consistencia}{Blanda (6-9 cm)}
\techsection{Propiedades físicas}
\techprop{Densidad}{2400 kg/m³}
\techprop{Módulo de elasticidad}{27000 MPa}
\end{techsheet}Resultado:
Tabla de presupuesto estilo booktabs con soporte para capítulos, partidas, subtotales e IVA.
\begin{presupuesto}[Presupuesto de ejecución material]
\capitulo{1}{Movimiento de tierras}
\partida{01.01}{Excavación en zanja}{m³}{150}{25.00}
\partida{01.02}{Transporte a vertedero}{m³}{150}{8.50}
\subtotal{5025.00}
\capitulo{2}{Cimentación}
\partida{02.01}{Hormigón HA-25}{m³}{80}{95.00}
\partida{02.02}{Acero B500S}{kg}{1200}{1.25}
\subtotal{9100.00}
\totalconiva{14125.00}{17091.25}
\end{presupuesto}Resultado:
Lista de normativa con indicadores de vigencia.
\begin{normativa}
\normavigente{CTE DB-SE}{Seguridad estructural}{2019}
\normavigente{CTE DB-SI}{Seguridad en caso de incendio}{2019}
\norma{EHE-08}{Instrucción de hormigón estructural}{2008}
\normaderogada{NBE-AE/88}{Acciones en la edificación}{1988}
\end{normativa}Resultado:
\begin{leyenda}
\simbolo{\simboloagua}{Agua fría} &
\simbolo{\simbologas}{Gas natural} \\
\simbolo{\simboloelec}{Electricidad} &
\simbolo{\simbolotele}{Telecomunicaciones} \\
\end{leyenda}Resultado:
\certificacion{LEED Gold}{Sostenibilidad}
\quad
\certificacion{BREEAM}{Muy bueno}
\quad
\certiso{14001}Resultado:
Tabla estilo booktabs con soporte para plantas y subtotales.
\begin{cuadrosuperficies}
\superficieplanta{Planta baja}
\superficie{Salón-comedor}{35.50}{40.20}
\superficie{Cocina}{12.80}{14.50}
\superficie{Dormitorio principal}{18.20}{20.80}
\superficiesubtotal{66.50}{75.50}
\superficieplanta{Planta primera}
\superficie{Dormitorio 1}{14.50}{16.80}
\superficie{Dormitorio 2}{12.30}{14.20}
\superficie{Baño}{6.80}{7.90}
\superficiesubtotal{33.60}{38.90}
\superficietotal{TOTAL VIVIENDA}{100.10}{114.40}
\end{cuadrosuperficies}Resultado:
Cargar con: \usepackage[quimica]{eps-componentes}
\begin{reactionbox}[Síntesis del agua]
\ch{2 H2 + O2 -> 2 H2O}
Condiciones: 25°C, 1 atm
\end{reactionbox}Resultado:
Tabla estilo booktabs con soporte para secciones y propiedades con incertidumbre.
\begin{proptable}[Propiedades del agua (H$_2$O)]
\property{Masa molar}{18.015}{g/mol}{---}
\propertyunc{Densidad}{0.998}{0.001}{g/cm³}{a 25°C}
\propsection{Puntos de transición}
\property{Punto de fusión}{0.00}{°C}{a 1 atm}
\property{Punto de ebullición}{100.00}{°C}{a 1 atm}
\propertyrange{Densidad máxima}{3.98}{4.00}{°C}{anomalía del agua}
\end{proptable}Resultado:
Tabla de resultados con indicadores de conformidad y soporte para grupos.
\begin{analyticalresults}[Análisis de aguas - Muestra M-001]
\analytegroup{Parámetros físico-químicos}
\analyte{pH}{7.2}{0.1}{---}{OK}
\analyte{Conductividad}{450}{10}{μS/cm}{OK}
\analytegroup{Aniones}
\analyte{Cloruros}{125.5}{3.2}{mg/L}{OK}
\analyte{Nitratos}{52.8}{1.5}{mg/L}{HIGH}
\analytelod{Fluoruros}{0.1}{mg/L}
\end{analyticalresults}Resultado:
Protocolo paso a paso con soporte para tiempos, advertencias y notas.
\begin{protocol}[Síntesis de aspirina]
\protocolmaterials{Ácido salicílico, anhídrido acético, ácido fosfórico}
\protocolstep{Pesar 2.0 g de ácido salicílico en un erlenmeyer de 125 mL}
\protocolsteptime{Añadir 5 mL de anhídrido acético y 5 gotas de H$_3$PO$_4$}{2 min}
\protocolwarning{Realizar en campana de extracción. El anhídrido acético es irritante}
\protocolsteptime{Calentar en baño maría a 85°C}{15 min}
\protocolstep{Enfriar y añadir 20 mL de agua destilada fría}
\protocolnote{El producto cristaliza al enfriar}
\protocolstep{Filtrar a vacío y lavar con agua fría}
\end{protocol}Resultado:
Cargar con: \usepackage[geologia]{eps-componentes}
Tabla estilo booktabs con soporte para grupos de minerales.
\begin{mineraltable}[Minerales de la muestra S-15]
\mineralgroup{Silicatos}
\mineralrow{Cuarzo}{7}{2.65}{Incoloro}{Vítreo}{SiO2}
\mineralrow{Feldespato}{6}{2.56}{Blanco-rosado}{Vítreo}{KAlSi3O8}
\mineralgroup{Carbonatos}
\mineralrow{Calcita}{3}{2.71}{Blanco}{Vítreo}{CaCO3}
\mineralgroup{Sulfuros}
\mineralrow{Pirita}{6}{5.02}{Amarillo latón}{Metálico}{FeS2}
\end{mineraltable}Resultado:
Puede usarse independientemente o dentro de una stratigraphybox.
\begin{stratigraphybox}
\begin{stratcolumn}[2cm]
\stratlayer{2}{lito arenisca}{Aluvial}{Cuaternario}
\stratlayer{4}{lito caliza}{Calcarenitas}{Mioceno}
\stratlayer{3}{lito arcilla}{Arcillas}{Cretácico}
\stratlayer{1}{lito basalto}{Intrusión}{Triásico}
\end{stratcolumn}
\end{stratigraphybox}Resultado:
Lista de patrones de relleno disponibles:
\begin{tikzpicture}
\matrix[matrix of nodes, row sep=1mm, column sep=1mm, nodes={minimum width=2cm, minimum height=1cm, anchor=center}] {
\node[lito arenisca, label=center:\small Arenisca] {}; & \node[lito caliza, label=center:\small Caliza] {}; & \node[lito dolomia, label=center:\small Dolomía] {}; \\
\node[lito arcilla, label=center:\small Arcilla] {}; & \node[lito marga, label=center:\small Marga] {}; & \node[lito conglomerado, label=center:\small Conglom.] {}; \\
\node[lito basalto, label=center:\small\textcolor{white}{Basalto}] {}; & \node[lito granito, label=center:\small Granito] {}; & \node[lito pizarra, label=center:\small Pizarra] {}; \\
\node[lito gneis, label=center:\small Gneis] {}; & & \\
};
\end{tikzpicture}Resultado:
\begin{center}
\begin{tabular}{c c c c}
\faultline & \anticline & \syncline & \strikeanddip \\
Falla & Anticlinal & Sinclinal & Rumbo/Buzamiento \\[1em]
\verticalbeds & \horizontalbeds & & \\
Estratos Vert. & Estratos Horiz. & & \\
\end{tabular}
\end{center}Resultado:
Cargar con: \usepackage[prevencion]{eps-componentes}
Se puede usar riskmatrixplot para añadir puntos específicos sobre la matriz.
\begin{riskmatrixbox}
\begin{riskmatrixplot}
\riskpoint{1}{1}{R-1}
\riskpoint{3}{2}{R-2}
\riskpoint{4}{5}{R-3}
\end{riskmatrixplot}
\end{riskmatrixbox}Resultado:
Tabla estilo booktabs con cálculo automático de nivel de riesgo y soporte para grupos.
\begin{riskassessment}[Evaluación de riesgos - Fase de estructura]
\riskgroup{Trabajos en altura}
\riskentry{R-01}{Caída a distinto nivel}{4}{4}{}{Arnés + línea de vida, redes}
\riskentry{R-02}{Caída de objetos}{3}{3}{}{Marquesinas, zonas delimitadas}
\riskgroup{Riesgos eléctricos}
\riskentry{R-03}{Contacto eléctrico directo}{2}{5}{}{Verificar ausencia tensión}
\riskentry{R-04}{Contacto eléctrico indirecto}{2}{4}{}{Toma de tierra, diferenciales}
\end{riskassessment}Resultado:
\begin{safetychecklist}[Inspección diaria]
\checkitem{Casco de seguridad}
\checkitem{Arnés anticaídas}
\uncheckitem{Guantes de protección}
\naitem{Gafas de seguridad}
\end{safetychecklist}Resultado:
\signwarning{Riesgo eléctrico}
\quad
\signprohibition{Prohibido fumar}
\quad
\signmandatory{Uso obligatorio de casco}Resultado:
\indicatorIF{15.5}
\quad
\indicatorIG{0.85}
\quad
\indicatorDaysSafe{125}Resultado:
\begin{epilist}
\item \epihardhat
\item \epigloves
\item \epiboots
\item \epiharness
\end{epilist}Resultado:
\begin{emergencyprocedure}[Evacuación por incendio]
\begin{enumerate}
\item Activar alarma de incendio
\item Evacuar por escaleras de emergencia
\item Dirigirse al punto de reunión
\item Esperar instrucciones del coordinador
\end{enumerate}
\emergencyphone{Emergencias}{112}
\end{emergencyprocedure}Resultado:
Todos los componentes usan una paleta unificada:
| Color | Código | Uso | Muestra |
|---|---|---|---|
eps-primary |
#2563EB |
Azul principal | 🔵 |
eps-secondary |
#7C3AED |
Violeta | 🟣 |
eps-success |
#059669 |
Verde éxito | 🟢 |
eps-warning |
#D97706 |
Naranja advertencia | 🟠 |
eps-danger |
#DC2626 |
Rojo peligro | 🔴 |
eps-info |
#0284C7 |
Azul información | 🔵 |
eps-dark |
#1F2937 |
Texto oscuro | ⚫ |
eps-gray |
#6B7280 |
Gris medio | ⚪ |
eps-light |
#F3F4F6 |
Fondos claros | ⬜ |
Para regenerar las imágenes de preview de los componentes:
cd /ruta/al/proyecto
python3 .herramientas/actualizar_previews.py --archivo COMPONENTESRequisitos: lualatex, Python 3.8+
































































