Education Calendar for Academic Year 2021/2022

It doesn’t feel like we’ll be entering a new school year soon. Of course, the teacher does a lot of preparation. As we know, the teacher’s job is to plan, implement, evaluate, assess and follow up on learning outcomes. Regarding planning learning, teachers need to create a syllabus, lesson plans, teaching materials, LKPD and so on. For timing, refer to the educational calendar made by the district or provincial education and culture office. The educational calendar is a time setting for students’ learning activities during one academic year which includes the beginning of the academic year, effective learning weeks, effective learning time and holidays.

Educational Calendar Components
The start of the school year is the time when learning activities begin at the beginning of the school year in each educational unit. Effective learning weeks are the number of weeks of learning activities for each academic year in each educational unit. Effective learning time is the number of learning hours each week, including the number of learning hours for all subjects including local content, plus the number of hours for self-development activities. Holiday time is the time specified when scheduled learning activities are not held in the educational unit in question. Holiday time can take the form of mid-semester breaks, inter-semester breaks, end-of-school year holidays, religious holidays, public holidays including national holidays, and special holidays.
Create an Education Calendar
In this post, I will create a guide for creating an educational calendar using LaTeX. Of course, the syntax is different from educational calendars created using Microsoft Word or Microsoft Excel. I obtained the technicalities for creating an educational calendar using LaTeX here. Then I adjust it to the needs of the 2021/2022 academic year.
Document Class
The document class used to create an educational calendar is *scrartcl, *and then we write it using the following command.
\documentclass[fontsize=20pt]{scrartcl}%http://tex.stackexchange.com/questions/170462/calendar-in-latex/170474#170474Preamble
In the preamble, we will write the packages and orders needed to create the educational calendar. In the preamble section we can determine the size of the letters used, the color of the letters, and the size (width and length) of the boxes containing the date.
\usepackage{bookman}\usepackage[indonesian]{babel}\usepackage[utf8]{inputenc}\usepackage[T1]{fontenc}\usepackage{dejavu}\usepackage[margin=1cm,a4paper,landscape]{geometry}\usepackage[dvipsnames,svgnames]{xcolor}\pagestyle{empty}\usepackage{graphicx}\usepackage{tikz}\usetikzlibrary{calendar,fit}\usepackage{expl3,xparse}%% Adapted from http://tex.stackexchange.com/a/10199/4771\makeatletter%\tikzoption{day headings}{\tikzstyle{day heading}=[#1]}\tikzstyle{day heading}=[]\tikzstyle{day letter headings}=[ execute before day scope={ \ifdate{day of month=1}{% \pgfmathsetlength{\pgf@ya}{\tikz@lib@cal@yshift}% \pgfmathsetlength\pgf@xa{\tikz@lib@cal@xshift}% \pgftransformyshift{-\pgf@ya} \foreach \d/\l in {0/Senin,1/Selasa,2/Rabu,3/Kamis,% 4/Jumat,5/Sabtu,6/Minggu} { \pgf@xa=\d\pgf@xa% \pgftransformxshift{\pgf@xa-\cellwidth/2}% \pgftransformyshift{\pgf@ya}% \node[above=-0.5ex,day heading]{\l};% } }{}% }%]\makeatother%%% End%% Adapted from pgf source\def\pgfcalendarmonthname#1{% \translate{\ifcase#1\or Januari\or Februari\or Maret\or April\or Mei\or Juni\or Juli\or Agustus\or September\or Oktober\or November\or Desember\fi}%}\makeatletter\tikzstyle{month label above centered}=[% execute before day scope={% \ifdate{day of month=1}{% { \pgfmathsetlength{\pgf@xa}{\tikz@lib@cal@xshift}% \pgf@xb=\tikz@lib@cal@width\pgf@xa% \advance\pgf@xb by-\pgf@xa% \pgf@xb=.5\pgf@xb% \pgftransformxshift{\pgf@xb}% \pgftransformxshift{-\cellwidth/2}% \pgfmathsetlength{\pgf@y}{\tikz@lib@cal@yshift}% \pgftransformyshift{0.333\pgf@y} \tikzmonthcode% } }{}}, every month/.append style={anchor=base}]\makeatother%% End\ExplSyntaxOn%% Adapted from http://tex.stackexchange.com/a/56214/4771%%% first of all we define the user level commands\NewDocumentCommand{\addtext}{ m }{ \bdaycal_input_add:n { #1 } }\NewDocumentCommand{\addtextyear}{ mm }{ \bdaycal_input_add_y:nn { #1 } { #2 } }\NewDocumentCommand{\showtext}{ }{ \bdaycal_output_direct: }% allocate variable:% a sequence for global storage of the inputs;\seq_new:N \g_bdaycal_input_seq% store globally an input in the sequence\cs_new:Npn \bdaycal_input_add:n #1 { \seq_gput_right:Nn \g_bdaycal_input_seq { #1 } }\cs_new:Npn \bdaycal_input_add_y:nn #1 #2 { \seq_gput_right:Nn \g_bdaycal_input_seq { #1 ~ ( \int_to_arabic:n { \pgfcalendarifdateyear - #2 } ) } }% how to output in direct order; we simply do a mapping function calling% \bdaycal_print:n after incrementing the counter\cs_new_protected:Npn \bdaycal_output_direct: { \seq_map_inline:Nn \g_bdaycal_input_seq { \bdaycal_print:n { ##1 } } \seq_gclear:N \g_bdaycal_input_seq }% the printing macro; change here for adapting to your wishes\cs_new:Npn \bdaycal_print:n #1 { #1 \par }%% End%% Knuth's AoCP, vol 1, 2nd ed, pp 155--156\int_new:N \l_easter_Y_int\int_new:N \l_easter_G_int\int_new:N \l_easter_C_int\int_new:N \l_easter_X_int\int_new:N \l_easter_Z_int\int_new:N \l_easter_D_int\int_new:N \l_easter_E_int\int_new:N \l_easter_N_int\int_new:N \l_easter_M_int\int_new:N \l_easter_julian_day_int\cs_new:Nn \easter_sunday:n { \int_set:Nn \l_easter_Y_int { #1 } \int_set:Nn \l_easter_G_int { \int_mod:nn { \l_easter_Y_int } { 19 } + 1 } \int_set:Nn \l_easter_C_int { \int_div_truncate:nn { \l_easter_Y_int } { 100 } + 1 } \int_set:Nn \l_easter_X_int { \int_div_truncate:nn { 3 * \l_easter_C_int } { 4 } - 12 } \int_set:Nn \l_easter_Z_int { \int_div_truncate:nn { 8 * \l_easter_C_int + 5 } { 25 } - 5 } \int_set:Nn \l_easter_D_int { \int_div_truncate:nn { 5 * \l_easter_Y_int } { 4 } - \l_easter_X_int - 10 } \int_set:Nn \l_easter_E_int { \int_mod:nn { 11 * \l_easter_G_int + 20 + \l_easter_Z_int - \l_easter_X_int } { 30 } } % \int_mod:nn behaves strangely. \int_compare:nNnT { \l_easter_E_int } < { 0 } { \int_add:Nn \l_easter_E_int { 30 } } \int_compare:nNnTF { \l_easter_E_int } = { 25 } { % true \int_compare:nNnT { \l_easter_G_int } > { 11 } { % true \int_incr:N \l_easter_E_int } } { % false \int_compare:nNnT { \l_easter_E_int } = { 24 } { % true \int_incr:N \l_easter_E_int } } \int_set:Nn \l_easter_N_int { 44 - \l_easter_E_int } \int_compare:nNnT { \l_easter_N_int } < { 21 } { % true \int_add:Nn \l_easter_N_int { 30 } } \int_add:Nn \l_easter_N_int { 7 - \int_mod:nn { \l_easter_D_int + \l_easter_N_int } { 7 } } \int_compare:nNnTF { \l_easter_N_int } > { 31 } { % true \int_sub:Nn \l_easter_N_int { 31 } \int_set:Nn \l_easter_M_int { 4 } % April } { % false \int_set:Nn \l_easter_M_int { 3 } % March } \pgfcalendardatetojulian { \l_easter_Y_int - \l_easter_M_int - \l_easter_N_int } { \l_easter_julian_day_int }}\pgfkeys{/pgf/calendar/Easter/.default = 0}\pgfkeys{/pgf/calendar/Easter/.code = { \easter_sunday:n { \pgfcalendarifdateyear } \int_compare:nNnT { \pgfcalendarifdatejulian } = {\l_easter_julian_day_int + #1} { \pgfcalendarmatchestrue } }}\int_new:N \l_advent_Y_int\int_new:N \l_advent_xmas_julian_day_int\int_new:N \l_advent_xmas_week_day_int\int_new:N \l_advent_julian_day_int\cs_new:Nn \advent_sunday:n { \int_set:Nn \l_advent_Y_int { #1 } \pgfcalendardatetojulian { \l_advent_Y_int - 12 - 25 } { \l_advent_xmas_julian_day_int } \pgfcalendarjuliantoweekday { \l_advent_xmas_julian_day_int } { \l_advent_xmas_week_day_int } \int_set:Nn \l_advent_julian_day_int { \l_advent_xmas_julian_day_int - \l_advent_xmas_week_day_int - 22 }}\pgfkeys{/pgf/calendar/Advent/.default = 0}\pgfkeys{/pgf/calendar/Advent/.code = { \advent_sunday:n { \pgfcalendarifdateyear } \int_compare:nNnT { \pgfcalendarifdatejulian } = {\l_advent_julian_day_int + #1} { \pgfcalendarmatchestrue } }}%% http://www.tondering.dk/claus/cal/week.php#calcweekno\int_new:N \l_week_number_year_int\int_new:N \l_week_number_month_int\int_new:N \l_week_number_day_int\int_new:N \l_week_number_a_int\int_new:N \l_week_number_b_int\int_new:N \l_week_number_c_int\int_new:N \l_week_number_s_int\int_new:N \l_week_number_e_int\int_new:N \l_week_number_f_int\int_new:N \l_week_number_g_int\int_new:N \l_week_number_d_int\int_new:N \l_week_number_n_int\int_new:N \l_week_number_W_int\cs_new:Nn \week_number:nnn { \int_set:Nn \l_week_number_year_int { #1 } \int_set:Nn \l_week_number_month_int { #2 } \int_set:Nn \l_week_number_day_int { #3 } \int_compare:nNnTF { \l_week_number_month_int } < { 3 } % jan or feb { % true \int_set:Nn \l_week_number_a_int { \l_week_number_year_int - 1 } \int_set:Nn \l_week_number_b_int { \int_div_truncate:nn { \l_week_number_a_int } { 4 } - \int_div_truncate:nn { \l_week_number_a_int } { 100 } + \int_div_truncate:nn { \l_week_number_a_int } { 400 } } \int_set:Nn \l_week_number_c_int { \int_div_truncate:nn { \l_week_number_a_int - 1 } { 4 } - \int_div_truncate:nn { \l_week_number_a_int - 1 } { 100 } + \int_div_truncate:nn { \l_week_number_a_int - 1 } { 400 } } \int_set:Nn \l_week_number_s_int { \l_week_number_b_int - \l_week_number_c_int } \int_zero:N \l_week_number_e_int \int_set:Nn \l_week_number_f_int { \l_week_number_day_int - 1 + 31 * ( \l_week_number_month_int - 1 ) } } % end true { % false \int_set_eq:NN \l_week_number_a_int \l_week_number_year_int \int_set:Nn \l_week_number_b_int { \int_div_truncate:nn { \l_week_number_a_int } { 4 } - \int_div_truncate:nn { \l_week_number_a_int } { 100 } + \int_div_truncate:nn { \l_week_number_a_int } { 400 } } \int_set:Nn \l_week_number_c_int { \int_div_truncate:nn { \l_week_number_a_int - 1 } { 4 } - \int_div_truncate:nn { \l_week_number_a_int - 1 } { 100 } + \int_div_truncate:nn { \l_week_number_a_int - 1 } { 400 } } \int_set:Nn \l_week_number_s_int { \l_week_number_b_int - \l_week_number_c_int } \int_set:Nn \l_week_number_e_int { \l_week_number_s_int + 1 } \int_set:Nn \l_week_number_f_int { \l_week_number_day_int + \int_div_truncate:nn { 153 * ( \l_week_number_month_int - 3 ) + 2 } { 5 } + 58 + \l_week_number_s_int } } % end false \int_set:Nn \l_week_number_g_int { \int_mod:nn { \l_week_number_a_int + \l_week_number_b_int } { 7 } } \int_set:Nn \l_week_number_d_int { \int_mod:nn { \l_week_number_f_int + \l_week_number_g_int - \l_week_number_e_int } { 7 } } \int_set:Nn \l_week_number_n_int { \l_week_number_f_int + 3 - \l_week_number_d_int } \int_compare:nNnTF { \l_week_number_n_int } < { 0 } { %true \int_set:Nn \l_week_number_W_int { 53 - \int_div_truncate:nn { \l_week_number_g_int - \l_week_number_s_int } { 5 } } } % end true { % false \int_compare:nNnTF { \l_week_number_n_int } > { 364 + \l_week_number_s_int } { % true \int_set:Nn \l_week_number_W_int { 1 } } % end true { % false \int_set:Nn \l_week_number_W_int { \int_div_truncate:nn { \l_week_number_n_int } { 7 } + 1 } } % end false } % end false}\definecolor{roed}{rgb}{0.937254901961,0.16862745098,0.176470588235}\definecolor{blaa}{rgb}{0,0.156862745098,0.407843137255}\newsavebox{\flagNO}\savebox{\flagNO}{\begin{tikzpicture} \fill[roed] rectangle (6pt,6pt); \fill[roed,yshift=10pt] rectangle (6pt,6pt); \fill[roed,xshift=10pt] rectangle (12pt,6pt); \fill[roed,xshift=10pt,yshift=10pt] rectangle (12pt,6pt); \fill[blaa,yshift=7pt] rectangle (22pt,2pt); \fill[blaa,xshift=7pt] rectangle (2pt,16pt);\end{tikzpicture}}\pgfkeys{/tikz/week~number/.code = { \week_number:nnn { \pgfcalendarifdateyear } { \pgfcalendarifdatemonth } { \pgfcalendarifdateday } \addtext{ }%dapat diisi }}\ExplSyntaxOff\pgfkeys{/tikz/flag-flying day/.code = { \draw (-\cellwidth,0) node [above right,font=\Huge] {\resizebox{!}{0.8ex}{\usebox{\flagNO}}}; }}\pgfkeys{/tikz/observance/.code = { \addtext{#1} }}\pgfkeys{/tikz/anniversary/.code 2 args=\addtextyear{#1}{#2}}\pgfkeys{/tikz/day code = { \node (lower right) at (0,0) [above left,font=\huge] {\tikzdaytext}; \node (upper left) at (-\cellwidth,\cellheight) [below right,align=left,text width=\cellwidth-\pgflinewidth, font=\tiny,blue] {\showtext}; \node (lower left) at (-\cellwidth,0) {}; \node[blue,rounded corners, draw, fit=(lower right) (upper left) (lower left), inner sep=1mm] {}; }}\pgfkeys{/tikz/inner sep = 0pt}\pgfkeys{/tikz/day xshift=\cellwidth+2mm+2mm}\pgfkeys{/tikz/day yshift=\cellheight+2mm+2mm}\newlength{\cellheight}\setlength{\cellheight}{20mm}\newlength{\cellwidth}\setlength{\cellwidth}{25mm}Document Body
Next we enter the body of the document and start writing the school identity, using the following command.
\begin{document}\centering\textcolor{blue}{\textbf{Kalender Pendidikan\\SMP/MTs ................\\Tahun Pelajaran 2021/2022}}\vspace{.5cm}July 2021
The start of the 2021/2022 academic year starts in July 2021. The start of school starts on Monday, July 12 2021. For the following months, please adjust it to the needs of each school. For details, pay attention to the following commands.
\begin{tikzpicture}[thick] \calendar[dates=2021-07-01 to 2021-07-last, week list, month label above centered, month text=\textsc{\%mt \%y0}, day headings={font=\footnotesize}, day letter headings] if (Monday, equals=01-07, equals=02-07, equals=03-07, equals=04-07, equals=05-07, equals=06-07, equals=07-07, equals=08-07, equals=09-07, equals=10-07, equals=11-07, equals=12-07) [week number] if (Sunday, equals=07-04) [red] if (Friday, equals=07-02) [SeaGreen] if (equals=07-05) [blue,observance=Milad] if (equals=07-12) [observance=HPS] if (equals=07-13) [observance=MPLS] if (equals=07-14) [observance=MPLS] if (equals=07-20) [observance=Hari Raya Idul Adha];\end{tikzpicture}August 2021
\newpage\begin{tikzpicture}[thick] \calendar[dates=2021-08-01 to 2021-08-last, week list, month label above centered, month text=\textsc{\%mt \%y0}, day headings={font=\footnotesize}, day letter headings] if (Sunday, equals=08-01) [red] if (Friday, equals=08-06) [SeaGreen] if (equals=08-10) [red,observance= Tahun Baru Islam 1443 H] if (equals=08-17) [blue,observance=HUT RI];\end{tikzpicture}September 2021
\newpage\begin{tikzpicture}[thick] \calendar[dates=2021-09-01 to 2021-09-last, week list, month label above centered, month text=\textsc{\%mt \%y0}, day headings={font=\footnotesize}, day letter headings] if (Sunday, equals=09-05) [red] if (Friday, equals=09-03) [SeaGreen] if (equals=09-06) [blue,observance=PTS] if (equals=09-07) [blue,observance=PTS] if (equals=09-08) [blue,observance=PTS] if (equals=09-09) [blue,observance=PTS] if (equals=09-10) [blue,observance=PTS] if (equals=09-11) [blue,observance=PTS];\end{tikzpicture}October 2021
\newpage\begin{tikzpicture}[thick] \calendar[dates=2021-10-01 to 2021-10-last, week list, month label above centered, month text=\textsc{\%mt \%y0}, day headings={font=\footnotesize}, day letter headings] if (Sunday, equals=10-03) [red] if (Friday, equals=10-08) [SeaGreen] if (equals=10-01) [blue,observance=Hari kesaktian Pancasila] if (equals=10-02) [blue,observance=Hari batik] if (equals=10-19) [red,observance=Maulid Nabi Muhammad SAW] if (equals=10-28) [blue,observance=Hari sumpah pemuda];\end{tikzpicture}November 2021
\newpage\begin{tikzpicture}[thick] \calendar[dates=2021-11-01 to 2021-11-last, week list, month label above centered, month text=\textsc{\%mt \%y0}, day headings={font=\footnotesize}, day letter headings] if (Sunday, equals=11-07) [red] if (Friday, equals=11-05) [SeaGreen] if (equals=11-10) [blue,observance=Hari pahlawan] if (equals=11-25) [blue,observance=Hari guru];\end{tikzpicture}December 2021
\newpage\begin{tikzpicture}[thick] \calendar[dates=2021-12-01 to 2021-12-last, week list, month label above centered, month text=\textsc{\%mt \%y0}, day headings={font=\footnotesize}, day letter headings] if (Sunday, equals=12-05) [red] if (Friday, equals=12-03) [SeaGreen] if (equals=12-06) [blue,observance=PAS] if (equals=12-07) [blue,observance=PAS] if (equals=12-08) [blue,observance=PAS] if (equals=12-09) [blue,observance=PAS] if (equals=12-10) [blue,observance=PAS] if (equals=12-11) [blue,observance=PAS] if (equals=12-18) [blue,observance=Penyerahan raport] if (equals=12-20) [red,observance=Libur semester ganjil] if (equals=12-21) [red,observance=Libur semester ganjil] if (equals=12-22) [red,observance=Libur semester ganjil] if (equals=12-23) [red,observance=Libur semester ganjil] if (equals=12-24) [red,observance=Libur semester ganjil] if (equals=12-25) [red,observance=Hari raya natal] if (equals=12-27) [red,observance=Libur semester ganjil] if (equals=12-28) [red,observance=Libur semester ganjil] if (equals=12-29) [red,observance=Libur semester ganjil] if (equals=12-30) [red,observance=Libur semester ganjil] if (equals=12-31) [red,observance=Libur semester ganjil];\end{tikzpicture}January 2022
\newpage\begin{tikzpicture}[thick] \calendar[dates=2022-01-01 to 2022-01-last, week list, month label above centered, month text=\textsc{\%mt \%y0}, day headings={font=\footnotesize}, day letter headings] if (Sunday, equals=01-02) [red] if (Friday, equals=01-07) [SeaGreen] if (equals=01-01) [red,observance=Tahun baru masehi 2022 M];\end{tikzpicture}February 2022
\newpage\begin{tikzpicture}[thick] \calendar[dates=2022-02-01 to 2022-02-last, week list, month label above centered, month text=\textsc{\%mt \%y0}, day headings={font=\footnotesize}, day letter headings] if (Sunday, equals=02-06) [red] if (Friday, equals=02-04) [SeaGreen] if (equals=02-01) [red,observance=Tahun baru imlek 2573];\end{tikzpicture}March 2022
\newpage\begin{tikzpicture}[thick] \calendar[dates=2022-03-01 to 2022-03-last, week list, month label above centered, month text=\textsc{\%mt \%y0}, day headings={font=\footnotesize}, day letter headings] if (Sunday, equals=03-06) [red] if (Friday, equals=03-04) [SeaGreen] if (equals=03-01) [red,observance=Isra' mikraj] if (equals=03-03) [red,observance=Hari raya nyepi 1944 S] if (equals=03-14) [blue,observance=PTS] if (equals=03-15) [blue,observance=PTS] if (equals=03-16) [blue,observance=PTS] if (equals=03-17) [blue,observance=PTS] if (equals=03-18) [blue,observance=PTS] if (equals=03-19) [blue,observance=PTS];\end{tikzpicture}April 2022
\newpage\begin{tikzpicture}[thick] \calendar[dates=2022-04-01 to 2022-04-last, week list, month label above centered, month text=\textsc{\%mt \%y0}, day headings={font=\footnotesize}, day letter headings] if (Sunday, equals=04-03) [red] if (Friday, equals=04-01) [SeaGreen] if (equals=04-15) [red,observance=Wafat Isa al masih] if (equals=04-17) [red,observance=Hari paskah] if (equals=04-18) [blue,observance=Ujian Sekolah] if (equals=04-19) [blue,observance=Ujian Sekolah] if (equals=04-20) [blue,observance=Ujian Sekolah] if (equals=04-21) [blue,observance=Ujian Sekolah] if (equals=04-22) [blue,observance=Ujian Sekolah] if (equals=04-23) [blue,observance=Ujian Sekolah] if (equals=04-28) [red,observance=Libur Hari Raya] if (equals=04-29) [red,observance=Libur Hari Raya] if (equals=04-30) [red,observance=Libur Hari Raya];\end{tikzpicture}May 2022
\newpage\begin{tikzpicture}[thick] \calendar[dates=2022-05-01 to 2022-05-last, week list, month label above centered, month text=\textsc{\%mt \%y0}, day headings={font=\footnotesize}, day letter headings] if (Sunday, equals=05-01) [red] if (Friday, equals=05-06) [SeaGreen] if (equals=05-01) [red,observance=Hari buruh] if (equals=05-02) [red,observance=Libur Hari Raya] if (equals=05-03) [red,observance=Hari raya idul fitri 1443 H] if (equals=05-04) [red,observance=Hari raya idul fitri 1443 H] if (equals=05-05) [red,observance=Libur Hari Raya] if (equals=05-06) [red,observance=Libur Hari Raya] if (equals=05-07) [red,observance=Libur Hari Raya] if (equals=05-08) [red,observance=Libur Hari Raya] if (equals=05-09) [red,observance=Libur Hari Raya] if (equals=05-16) [red,observance=Hari raya waisak]if (equals=05-26) [red,observance=Kenaikan Isa al masih] ;\end{tikzpicture}June 2022
\newpage\begin{tikzpicture}[thick] \calendar[dates=2022-06-01 to 2022-06-last, week list, month label above centered, month text=\textsc{\%mt \%y0}, day headings={font=\footnotesize}, day letter headings] if (Sunday, equals=06-05) [red] if (Friday, equals=06-03) [SeaGreen] if (equals=06-01) [red,observance=Hari lahir Pancasila] if (equals=06-06) [blue,observance=PAT] if (equals=06-07) [blue,observance=PAT] if (equals=06-08) [blue,observance=PAT] if (equals=06-09) [blue,observance=PAT] if (equals=06-10) [SeaGreen,observance=PAT] if (equals=06-11) [blue,observance=PAT] if (equals=06-22) [red,observance=Libur semester genap];\end{tikzpicture}Lastly we will create text for the place, name and signature of the principal of the school where we teach, here I place it on the right, as well as to close the document using the following command.
\begin{flushright}{.........,\hspace{.8cm}Juli 2021\\Kepala SMP/MTs .............\\\vspace{1.5cm}(.........................)\\NIP ......................}\end{flushright}\end{document}And now to see the compiled results of the documents we have written, please download here.
Closing
Step by step has been taken to create an educational calendar using LaTeX, and you have seen the results. And to better understand, Below is the complete LaTeX code to create the educational calendar.
\documentclass[fontsize=20pt]{scrartcl}%http://tex.stackexchange.com/questions/170462/calendar-in-latex/170474#170474\usepackage{bookman}\usepackage[indonesian]{babel}\usepackage[utf8]{inputenc}\usepackage[T1]{fontenc}\usepackage{dejavu}\usepackage[margin=1cm,a4paper,landscape]{geometry}\usepackage[dvipsnames,svgnames]{xcolor}\pagestyle{empty}\usepackage{graphicx}\usepackage{tikz}\usetikzlibrary{calendar,fit}\usepackage{expl3,xparse}%% Adapted from http://tex.stackexchange.com/a/10199/4771\makeatletter%\tikzoption{day headings}{\tikzstyle{day heading}=[#1]}\tikzstyle{day heading}=[]\tikzstyle{day letter headings}=[ execute before day scope={ \ifdate{day of month=1}{% \pgfmathsetlength{\pgf@ya}{\tikz@lib@cal@yshift}% \pgfmathsetlength\pgf@xa{\tikz@lib@cal@xshift}% \pgftransformyshift{-\pgf@ya} \foreach \d/\l in {0/Senin,1/Selasa,2/Rabu,3/Kamis,% 4/Jumat,5/Sabtu,6/Minggu} { \pgf@xa=\d\pgf@xa% \pgftransformxshift{\pgf@xa-\cellwidth/2}% \pgftransformyshift{\pgf@ya}% \node[above=-0.5ex,day heading]{\l};% } }{}% }%]\makeatother%%% End%% Adapted from pgf source\def\pgfcalendarmonthname#1{% \translate{\ifcase#1\or Januari\or Februari\or Maret\or April\or Mei\or Juni\or Juli\or Agustus\or September\or Oktober\or November\or Desember\fi}%}\makeatletter\tikzstyle{month label above centered}=[% execute before day scope={% \ifdate{day of month=1}{% { \pgfmathsetlength{\pgf@xa}{\tikz@lib@cal@xshift}% \pgf@xb=\tikz@lib@cal@width\pgf@xa% \advance\pgf@xb by-\pgf@xa% \pgf@xb=.5\pgf@xb% \pgftransformxshift{\pgf@xb}% \pgftransformxshift{-\cellwidth/2}% \pgfmathsetlength{\pgf@y}{\tikz@lib@cal@yshift}% \pgftransformyshift{0.333\pgf@y} \tikzmonthcode% } }{}}, every month/.append style={anchor=base}]\makeatother%% End\ExplSyntaxOn%% Adapted from http://tex.stackexchange.com/a/56214/4771%%% first of all we define the user level commands\NewDocumentCommand{\addtext}{ m }{ \bdaycal_input_add:n { #1 } }\NewDocumentCommand{\addtextyear}{ mm }{ \bdaycal_input_add_y:nn { #1 } { #2 } }\NewDocumentCommand{\showtext}{ }{ \bdaycal_output_direct: }% allocate variable:% a sequence for global storage of the inputs;\seq_new:N \g_bdaycal_input_seq% store globally an input in the sequence\cs_new:Npn \bdaycal_input_add:n #1 { \seq_gput_right:Nn \g_bdaycal_input_seq { #1 } }\cs_new:Npn \bdaycal_input_add_y:nn #1 #2 { \seq_gput_right:Nn \g_bdaycal_input_seq { #1 ~ ( \int_to_arabic:n { \pgfcalendarifdateyear - #2 } ) } }% how to output in direct order; we simply do a mapping function calling% \bdaycal_print:n after incrementing the counter\cs_new_protected:Npn \bdaycal_output_direct: { \seq_map_inline:Nn \g_bdaycal_input_seq { \bdaycal_print:n { ##1 } } \seq_gclear:N \g_bdaycal_input_seq }% the printing macro; change here for adapting to your wishes\cs_new:Npn \bdaycal_print:n #1 { #1 \par }%% End%% Knuth's AoCP, vol 1, 2nd ed, pp 155--156\int_new:N \l_easter_Y_int\int_new:N \l_easter_G_int\int_new:N \l_easter_C_int\int_new:N \l_easter_X_int\int_new:N \l_easter_Z_int\int_new:N \l_easter_D_int\int_new:N \l_easter_E_int\int_new:N \l_easter_N_int\int_new:N \l_easter_M_int\int_new:N \l_easter_julian_day_int\cs_new:Nn \easter_sunday:n { \int_set:Nn \l_easter_Y_int { #1 } \int_set:Nn \l_easter_G_int { \int_mod:nn { \l_easter_Y_int } { 19 } + 1 } \int_set:Nn \l_easter_C_int { \int_div_truncate:nn { \l_easter_Y_int } { 100 } + 1 } \int_set:Nn \l_easter_X_int { \int_div_truncate:nn { 3 * \l_easter_C_int } { 4 } - 12 } \int_set:Nn \l_easter_Z_int { \int_div_truncate:nn { 8 * \l_easter_C_int + 5 } { 25 } - 5 } \int_set:Nn \l_easter_D_int { \int_div_truncate:nn { 5 * \l_easter_Y_int } { 4 } - \l_easter_X_int - 10 } \int_set:Nn \l_easter_E_int { \int_mod:nn { 11 * \l_easter_G_int + 20 + \l_easter_Z_int - \l_easter_X_int } { 30 } } % \int_mod:nn behaves strangely. \int_compare:nNnT { \l_easter_E_int } < { 0 } { \int_add:Nn \l_easter_E_int { 30 } } \int_compare:nNnTF { \l_easter_E_int } = { 25 } { % true \int_compare:nNnT { \l_easter_G_int } > { 11 } { % true \int_incr:N \l_easter_E_int } } { % false \int_compare:nNnT { \l_easter_E_int } = { 24 } { % true \int_incr:N \l_easter_E_int } } \int_set:Nn \l_easter_N_int { 44 - \l_easter_E_int } \int_compare:nNnT { \l_easter_N_int } < { 21 } { % true \int_add:Nn \l_easter_N_int { 30 } } \int_add:Nn \l_easter_N_int { 7 - \int_mod:nn { \l_easter_D_int + \l_easter_N_int } { 7 } } \int_compare:nNnTF { \l_easter_N_int } > { 31 } { % true \int_sub:Nn \l_easter_N_int { 31 } \int_set:Nn \l_easter_M_int { 4 } % April } { % false \int_set:Nn \l_easter_M_int { 3 } % March } \pgfcalendardatetojulian { \l_easter_Y_int - \l_easter_M_int - \l_easter_N_int } { \l_easter_julian_day_int }}\pgfkeys{/pgf/calendar/Easter/.default = 0}\pgfkeys{/pgf/calendar/Easter/.code = { \easter_sunday:n { \pgfcalendarifdateyear } \int_compare:nNnT { \pgfcalendarifdatejulian } = {\l_easter_julian_day_int + #1} { \pgfcalendarmatchestrue } }}\int_new:N \l_advent_Y_int\int_new:N \l_advent_xmas_julian_day_int\int_new:N \l_advent_xmas_week_day_int\int_new:N \l_advent_julian_day_int\cs_new:Nn \advent_sunday:n { \int_set:Nn \l_advent_Y_int { #1 } \pgfcalendardatetojulian { \l_advent_Y_int - 12 - 25 } { \l_advent_xmas_julian_day_int } \pgfcalendarjuliantoweekday { \l_advent_xmas_julian_day_int } { \l_advent_xmas_week_day_int } \int_set:Nn \l_advent_julian_day_int { \l_advent_xmas_julian_day_int - \l_advent_xmas_week_day_int - 22 }}\pgfkeys{/pgf/calendar/Advent/.default = 0}\pgfkeys{/pgf/calendar/Advent/.code = { \advent_sunday:n { \pgfcalendarifdateyear } \int_compare:nNnT { \pgfcalendarifdatejulian } = {\l_advent_julian_day_int + #1} { \pgfcalendarmatchestrue } }}%% http://www.tondering.dk/claus/cal/week.php#calcweekno\int_new:N \l_week_number_year_int\int_new:N \l_week_number_month_int\int_new:N \l_week_number_day_int\int_new:N \l_week_number_a_int\int_new:N \l_week_number_b_int\int_new:N \l_week_number_c_int\int_new:N \l_week_number_s_int\int_new:N \l_week_number_e_int\int_new:N \l_week_number_f_int\int_new:N \l_week_number_g_int\int_new:N \l_week_number_d_int\int_new:N \l_week_number_n_int\int_new:N \l_week_number_W_int\cs_new:Nn \week_number:nnn { \int_set:Nn \l_week_number_year_int { #1 } \int_set:Nn \l_week_number_month_int { #2 } \int_set:Nn \l_week_number_day_int { #3 } \int_compare:nNnTF { \l_week_number_month_int } < { 3 } % jan or feb { % true \int_set:Nn \l_week_number_a_int { \l_week_number_year_int - 1 } \int_set:Nn \l_week_number_b_int { \int_div_truncate:nn { \l_week_number_a_int } { 4 } - \int_div_truncate:nn { \l_week_number_a_int } { 100 } + \int_div_truncate:nn { \l_week_number_a_int } { 400 } } \int_set:Nn \l_week_number_c_int { \int_div_truncate:nn { \l_week_number_a_int - 1 } { 4 } - \int_div_truncate:nn { \l_week_number_a_int - 1 } { 100 } + \int_div_truncate:nn { \l_week_number_a_int - 1 } { 400 } } \int_set:Nn \l_week_number_s_int { \l_week_number_b_int - \l_week_number_c_int } \int_zero:N \l_week_number_e_int \int_set:Nn \l_week_number_f_int { \l_week_number_day_int - 1 + 31 * ( \l_week_number_month_int - 1 ) } } % end true { % false \int_set_eq:NN \l_week_number_a_int \l_week_number_year_int \int_set:Nn \l_week_number_b_int { \int_div_truncate:nn { \l_week_number_a_int } { 4 } - \int_div_truncate:nn { \l_week_number_a_int } { 100 } + \int_div_truncate:nn { \l_week_number_a_int } { 400 } } \int_set:Nn \l_week_number_c_int { \int_div_truncate:nn { \l_week_number_a_int - 1 } { 4 } - \int_div_truncate:nn { \l_week_number_a_int - 1 } { 100 } + \int_div_truncate:nn { \l_week_number_a_int - 1 } { 400 } } \int_set:Nn \l_week_number_s_int { \l_week_number_b_int - \l_week_number_c_int } \int_set:Nn \l_week_number_e_int { \l_week_number_s_int + 1 } \int_set:Nn \l_week_number_f_int { \l_week_number_day_int + \int_div_truncate:nn { 153 * ( \l_week_number_month_int - 3 ) + 2 } { 5 } + 58 + \l_week_number_s_int } } % end false \int_set:Nn \l_week_number_g_int { \int_mod:nn { \l_week_number_a_int + \l_week_number_b_int } { 7 } } \int_set:Nn \l_week_number_d_int { \int_mod:nn { \l_week_number_f_int + \l_week_number_g_int - \l_week_number_e_int } { 7 } } \int_set:Nn \l_week_number_n_int { \l_week_number_f_int + 3 - \l_week_number_d_int } \int_compare:nNnTF { \l_week_number_n_int } < { 0 } { %true \int_set:Nn \l_week_number_W_int { 53 - \int_div_truncate:nn { \l_week_number_g_int - \l_week_number_s_int } { 5 } } } % end true { % false \int_compare:nNnTF { \l_week_number_n_int } > { 364 + \l_week_number_s_int } { % true \int_set:Nn \l_week_number_W_int { 1 } } % end true { % false \int_set:Nn \l_week_number_W_int { \int_div_truncate:nn { \l_week_number_n_int } { 7 } + 1 } } % end false } % end false}\definecolor{roed}{rgb}{0.937254901961,0.16862745098,0.176470588235}\definecolor{blaa}{rgb}{0,0.156862745098,0.407843137255}\newsavebox{\flagNO}\savebox{\flagNO}{\begin{tikzpicture} \fill[roed] rectangle (6pt,6pt); \fill[roed,yshift=10pt] rectangle (6pt,6pt); \fill[roed,xshift=10pt] rectangle (12pt,6pt); \fill[roed,xshift=10pt,yshift=10pt] rectangle (12pt,6pt); \fill[blaa,yshift=7pt] rectangle (22pt,2pt); \fill[blaa,xshift=7pt] rectangle (2pt,16pt);\end{tikzpicture}}\pgfkeys{/tikz/week~number/.code = { \week_number:nnn { \pgfcalendarifdateyear } { \pgfcalendarifdatemonth } { \pgfcalendarifdateday } \addtext{ }%dapat diisi }}\ExplSyntaxOff\pgfkeys{/tikz/flag-flying day/.code = { \draw (-\cellwidth,0) node [above right,font=\Huge] {\resizebox{!}{0.8ex}{\usebox{\flagNO}}}; }}\pgfkeys{/tikz/observance/.code = { \addtext{#1} }}\pgfkeys{/tikz/anniversary/.code 2 args=\addtextyear{#1}{#2}}\pgfkeys{/tikz/day code = { \node (lower right) at (0,0) [above left,font=\huge] {\tikzdaytext}; \node (upper left) at (-\cellwidth,\cellheight) [below right,align=left,text width=\cellwidth-\pgflinewidth, font=\tiny,blue] {\showtext}; \node (lower left) at (-\cellwidth,0) {}; \node[blue,rounded corners, draw, fit=(lower right) (upper left) (lower left), inner sep=1mm] {}; }}\pgfkeys{/tikz/inner sep = 0pt}\pgfkeys{/tikz/day xshift=\cellwidth+2mm+2mm}\pgfkeys{/tikz/day yshift=\cellheight+2mm+2mm}\newlength{\cellheight}\setlength{\cellheight}{20mm}\newlength{\cellwidth}\setlength{\cellwidth}{25mm}\begin{document}\centering\textcolor{blue}{\textbf{Kalender Pendidikan\\SMP/MTs ..............\\Tahun Pelajaran 2021/2022}}\vspace{.5cm}\begin{tikzpicture}[thick] \calendar[dates=2021-07-01 to 2021-07-last, week list, month label above centered, month text=\textsc{\%mt \%y0}, day headings={font=\footnotesize}, day letter headings] if (Monday, equals=01-07, equals=02-07, equals=03-07, equals=04-07, equals=05-07, equals=06-07, equals=07-07, equals=08-07, equals=09-07, equals=10-07, equals=11-07, equals=12-07) [week number] if (Sunday, equals=07-04) [red] if (Friday, equals=07-02) [SeaGreen] if (equals=07-05) [blue,observance=Milad] if (equals=07-12) [observance=HPS] if (equals=07-13) [observance=MPLS] if (equals=07-14) [observance=MPLS] if (equals=07-20) [red,observance=Hari Raya Idul Adha];\end{tikzpicture}\newpage\begin{tikzpicture}[thick] \calendar[dates=2021-08-01 to 2021-08-last, week list, month label above centered, month text=\textsc{\%mt \%y0}, day headings={font=\footnotesize}, day letter headings] if (Sunday, equals=08-01) [red] if (Friday, equals=08-06) [SeaGreen] if (equals=08-10) [red,observance= Tahun Baru Islam 1443 H] if (equals=08-17) [blue,observance=HUT RI];\end{tikzpicture}\newpage\begin{tikzpicture}[thick] \calendar[dates=2021-09-01 to 2021-09-last, week list, month label above centered, month text=\textsc{\%mt \%y0}, day headings={font=\footnotesize}, day letter headings] if (Sunday, equals=09-05) [red] if (Friday, equals=09-03) [SeaGreen] if (equals=09-06) [blue,observance=PTS] if (equals=09-07) [blue,observance=PTS] if (equals=09-08) [blue,observance=PTS] if (equals=09-09) [blue,observance=PTS] if (equals=09-10) [blue,observance=PTS] if (equals=09-11) [blue,observance=PTS];\end{tikzpicture}\newpage\begin{tikzpicture}[thick] \calendar[dates=2021-10-01 to 2021-10-last, week list, month label above centered, month text=\textsc{\%mt \%y0}, day headings={font=\footnotesize}, day letter headings] if (Sunday, equals=10-03) [red] if (Friday, equals=10-08) [SeaGreen] if (equals=10-01) [blue,observance=Hari kesaktian Pancasila] if (equals=10-02) [blue,observance=Hari batik] if (equals=10-19) [red,observance=Maulid Nabi Muhammad SAW] if (equals=10-28) [blue,observance=Hari sumpah pemuda];\end{tikzpicture}\newpage\begin{tikzpicture}[thick] \calendar[dates=2021-11-01 to 2021-11-last, week list, month label above centered, month text=\textsc{\%mt \%y0}, day headings={font=\footnotesize}, day letter headings] if (Sunday, equals=11-07) [red] if (Friday, equals=11-05) [SeaGreen] if (equals=11-10) [blue,observance=Hari pahlawan] if (equals=11-25) [blue,observance=Hari guru];\end{tikzpicture}\newpage\begin{tikzpicture}[thick] \calendar[dates=2021-12-01 to 2021-12-last, week list, month label above centered, month text=\textsc{\%mt \%y0}, day headings={font=\footnotesize}, day letter headings] if (Sunday, equals=12-05) [red] if (Friday, equals=12-03) [SeaGreen] if (equals=12-06) [blue,observance=PAS] if (equals=12-07) [blue,observance=PAS] if (equals=12-08) [blue,observance=PAS] if (equals=12-09) [blue,observance=PAS] if (equals=12-10) [blue,observance=PAS] if (equals=12-11) [blue,observance=PAS] if (equals=12-18) [blue,observance=Penyerahan raport] if (equals=12-20) [red,observance=Libur semester ganjil] if (equals=12-21) [red,observance=Libur semester ganjil] if (equals=12-22) [red,observance=Libur semester ganjil] if (equals=12-23) [red,observance=Libur semester ganjil] if (equals=12-24) [red,observance=Libur semester ganjil] if (equals=12-25) [red,observance=Hari raya natal] if (equals=12-27) [red,observance=Libur semester ganjil] if (equals=12-28) [red,observance=Libur semester ganjil] if (equals=12-29) [red,observance=Libur semester ganjil] if (equals=12-30) [red,observance=Libur semester ganjil] if (equals=12-31) [red,observance=Libur semester ganjil];\end{tikzpicture}\newpage\begin{tikzpicture}[thick] \calendar[dates=2022-01-01 to 2022-01-last, week list, month label above centered, month text=\textsc{\%mt \%y0}, day headings={font=\footnotesize}, day letter headings] if (Sunday, equals=01-02) [red] if (Friday, equals=01-07) [SeaGreen] if (equals=01-01) [red,observance=Tahun baru masehi 2022 M];\end{tikzpicture}\newpage\begin{tikzpicture}[thick] \calendar[dates=2022-02-01 to 2022-02-last, week list, month label above centered, month text=\textsc{\%mt \%y0}, day headings={font=\footnotesize}, day letter headings] if (Sunday, equals=02-06) [red] if (Friday, equals=02-04) [SeaGreen] if (equals=02-01) [red,observance=Tahun baru imlek 2573];\end{tikzpicture}\newpage\begin{tikzpicture}[thick] \calendar[dates=2022-04-01 to 2022-04-last, week list, month label above centered, month text=\textsc{\%mt \%y0}, day headings={font=\footnotesize}, day letter headings] if (Sunday, equals=04-03) [red] if (Friday, equals=04-01) [SeaGreen] if (equals=04-15) [red,observance=Wafat Isa al masih] if (equals=04-17) [red,observance=Hari paskah] if (equals=04-18) [blue,observance=Ujian Sekolah] if (equals=04-19) [blue,observance=Ujian Sekolah] if (equals=04-20) [blue,observance=Ujian Sekolah] if (equals=04-21) [blue,observance=Ujian Sekolah] if (equals=04-22) [blue,observance=Ujian Sekolah] if (equals=04-23) [blue,observance=Ujian Sekolah] if (equals=04-28) [red,observance=Libur Hari Raya] if (equals=04-29) [red,observance=Libur Hari Raya] if (equals=04-30) [red,observance=Libur Hari Raya];\end{tikzpicture}\newpage\begin{tikzpicture}[thick] \calendar[dates=2022-05-01 to 2022-05-last, week list, month label above centered, month text=\textsc{\%mt \%y0}, day headings={font=\footnotesize}, day letter headings] if (Sunday, equals=05-01) [red] if (Friday, equals=05-06) [SeaGreen] if (equals=05-01) [red,observance=Hari buruh] if (equals=05-02) [red,observance=Libur Hari Raya] if (equals=05-03) [red,observance=Hari raya idul fitri 1443 H] if (equals=05-04) [red,observance=Hari raya idul fitri 1443 H] if (equals=05-05) [red,observance=Libur Hari Raya] if (equals=05-06) [red,observance=Libur Hari Raya] if (equals=05-07) [red,observance=Libur Hari Raya] if (equals=05-08) [red,observance=Libur Hari Raya] if (equals=05-09) [red,observance=Libur Hari Raya] if (equals=05-16) [red,observance=Hari raya waisak]if (equals=05-26) [red,observance=Kenaikan Isa al masih] ;\end{tikzpicture}\newpage\begin{tikzpicture}[thick] \calendar[dates=2022-06-01 to 2022-06-last, week list, month label above centered, month text=\textsc{\%mt \%y0}, day headings={font=\footnotesize}, day letter headings] if (Sunday, equals=06-05) [red] if (Friday, equals=06-03) [SeaGreen] if (equals=06-01) [red,observance=Hari lahir Pancasila] if (equals=06-06) [blue,observance=PAT] if (equals=06-07) [blue,observance=PAT] if (equals=06-08) [blue,observance=PAT] if (equals=06-09) [blue,observance=PAT] if (equals=06-10) [SeaGreen,observance=PAT] if (equals=06-11) [blue,observance=PAT] if (equals=06-22) [red,observance=Libur semester genap];\end{tikzpicture}\begin{flushright}{.........,\hspace{.8cm}Juli 2021\\Kepala SMP/MTs .............\\\vspace{1.5cm}(.........................)\\NIP ......................}\end{flushright}\end{document}If you want to change some parts of this educational calendar, I recommend doing it via a TeX ’engine’ such as TeXlive or online using the overleaf site. How to? Please read the guide here. That’s the article about creating an educational calendar for the 2021/2022 school year using LaTeX. If there are errors, please correct them, if you have input, please write them here. I hope this is helpful.




