Setup Menus in Admin Panel

  • LOGIN
  • No hay productos en el carrito.

Calendario usando TikZ de LaTeX2e

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

febrero 1, 2022

0 responses on "Calendario usando TikZ de LaTeX2e"

    Leave a Message

    Tu dirección de correo electrónico no será publicada.

    Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

    A+
    X