
¿Cómo elaborar un calendario usando LaTeX2e?
El fin de semana pasado generé este calendario para planificar mis tareas semanales. Aquí te comparto mi código fuente.
La idea del código es usar la instrucción \foreach
para los ciclos. Empiezo el código con los paquetes requeridos para generar el documento. Después incluyo una descripción breve del documento y los términos de uso.
La instrucción \theyear
indica el año actual. Después defino \DiaMes
para indicar el día de la semana en que empieza cada mes. Esto, desde luego, se puede calcular, pero no quise investigar el algoritmo para este fin. Por ahora me conformo con generar el calendario así. De la misma manera, la instrucción \DiasEnElMes
indica el número de días que tiene cada mes y la instrucción \NombreDelMes
sirve para incluir el nombre que corresponde a cada mes.
Al iniciar el documento primero genero las etiquetas que indicarán el año en la parte norte (parte más alta) de la página actual y agrego también la dirección de nuestra página de Internet en el sur (parte más baja) de la página actual.
Despues viene el código que genera el calendario. Las macros \base
y \altura
guardan las longitudes de la base y la altura de cada rectángulo que se usa para los días del mes. Después uso la instrucción \foreach
para ir del 1 (enero) al 6 (junio) generando un calendario para cada mes.
Calculo el \UltimoDiaMes
(cuántos días tiene ese mes) al igual que \MesInicia
(el día de la semana que empieza ese mes) a partir de las definiciones previas. A partir de estos datos, puedo generar la posición del calendario de cada mes.
El calendario de cada mes está encerrado en un ambiente scope
para poder ubicarlo apropiadamente y que no queden todos en el mismo lugar de la página. Para el calendario mensual primero indico el nombre del mes, luego indico los días de la semana, después genero la cuadrícula donde irán los días del mes y finalmente incluyo todos los días del mes actual.
Desde luego, se puede mejorar el código si se calcula el último día del mes que cabe en 5 renglones de la cuadrícula y se envían los últimos días del mes al siguiente, en caso de que queden uno o dos días en el último renglón de la cuadrícula y hacer cada mes de 5 renglones en lugar de 6.
Tenía un poco de prisa cuando lo hice, por eso decidí que esa solución me era suficiente por el momento. Espero que te ayude a mejorar tus habilidades en el uso de TikZ.
Muchas gracias por respetar los términos de uso de este código fuente.
\documentclass{article} % Márgenes de la página \usepackage[letterpaper,top=0.5in,bottom=0.5in,left=1.0in,right=1.0in]{geometry} \usepackage[spanish,mexico]{babel} \usepackage[T1]{fontenc} \usepackage[ansinew]{inputenc} % % Diseño del párrafo % \setlength{\parskip}{1ex} \setlength{\parindent}{0cm} \pagestyle{empty} % No quiero número de páginas % Para las figuras \usepackage{tikz} % % Nombre de archivo: CalendarioSemestral2022.tex % Descripción: % Se genera un calendario del primer semestre del año 2022. % % Fecha de creación: 30 de enero de 2022. % Fecha de última modificación: 30 de enero de 2022. % Autor: Efraín Soto Apolinar. % https://www.aprendematematicas.org.mx/author/efrain-soto-apolinar/instructing-courses/ % Términos de uso: % https://creativecommons.org/licenses/by-nc-sa/4.0/ % Muchas gracias por respetar los términos de uso. % % % \newcommand{\theyear}{2022} % Indico el año \def\DiaMes#1{ % Indico el día de la semana en que empieza cada mes \ifcase#1 0\or % Mes cero no existe 4\or % Enero 0\or % Febrero 0\or % Marzo 3\or % Abril 5\or % Mayo 1\or % Junio 3\or % Julio -1\or % Agosto 2\or % Septiembre 4\or % Octubre 0\or % Noviembre 2\else % Diciembre \number#1\fi } \def\DiasEnElMes#1{% Indico cuántos días tiene cada mes \ifcase#1 0\or % Mes cero no existe 31\or % Enero 28\or % Febrero 31\or % Marzo 30\or % Abril 31\or % Mayo 30\or % junio 31\or % Julio 31\or % Agosto 30\or % Septiembre 31\or % Octubre 30\or % Noviembre 31\else % Diciembre \number#1\fi } \def\NombreDelMes#1{ % Indico el nombre de cada mes \ifcase#1 0\or % Mes cero no existe Enero\or % Enero Febrero\or % Febrero Marzo\or % Marzo Abril\or % Abril Mayo\or % Mayo Junio\or % junio Julio\or % Julio Agosto\or % Agosto Septiembre\or % Septiembre Octubre\or % Octubre Noviembre\or % Noviembre Diciembre\else % Diciembre \number#1\fi } % % % \begin{document} % \begin{tikzpicture}[remember picture,overlay] \node[below,shift={(0,-1)},scale=5] at (current page.north) {\theyear}; \node[blue,above,shift={(0,1)}] at (current page.south) {www.aprendematematicas.org.mx}; \end{tikzpicture} % % % \begin{center} % \begin{tikzpicture} \pgfmathsetmacro{\base}{1} % Altura del rectángulo para cada día \pgfmathsetmacro{\altura}{1} % Base del rectángulo para cada día \foreach \mes in {1,2,...,6}{ % Únicamente genero el calendario de enero a junio (primeros 6 meses del año) \pgfmathsetmacro{\MesInicia}{\DiaMes{\mes}} % Indico el día de la semana que empieza cada mes. \pgfmathsetmacro{\UltimoDiaMes}{\DiasEnElMes{\mes}} % Indico cuántos días tiene cada mes. % Calculo la posición del calendario mensual \pgfmathsetmacro{\Lx}{8.0*int(mod(1+\mes,2))} \pgfmathsetmacro{\Ly}{-8.0*int((\mes-1)/2)} % % Calendario mensual % \begin{scope}[shift={(\Lx,\Ly)}] \node[above,text width=7cm,text centered] at (4.5,1) {\huge\sl\NombreDelMes{\mes}}; % Los días de la semana \foreach \dia/\nombre in {1/Lun, 2/Mar, 3/Mié, 4/Jue, 5/Vie, 6/Sáb, 7/Dom}{ \draw[cyan,fill=yellow!25,shift={(\dia,0.5)}] (0,0) rectangle (\base,0.5*\altura); \node[below] at (\dia+0.5,1) {\sf\nombre}; } % Dibujo la cuadrícula \foreach \semana in {1,2,...,6}{ \foreach \dia in {1,...,7}{ \draw[cyan,shift={(\dia,-\semana+0.5)}] (0,0) rectangle (\base,\altura); } } % Los días del mes \foreach \fecha in {1,2,...,\UltimoDiaMes}{ \pgfmathsetmacro{\px}{int(mod(\MesInicia+\fecha,7)+1)+0.5} \pgfmathsetmacro{\py}{-int((\MesInicia+\fecha)/7.0)} \node at (\px,\py) {\fecha}; } \end{scope} } % END [ \foreach \mes ] \end{tikzpicture} % \end{center} % % % \end{document} |
El resultado final se ve así.

Si aún no conoces LaTeX2e, te invito a aprenderlo con nuestro curso en línea gratuito, titulado LaTeX2e para principiantes.
0 responses on "Calendario usando TikZ de LaTeX2e"