Cuti-cuti Malaysia: Customisable state-by-state holiday calendar for 2024

Annual cuti-cuti Malaysia calendar! This year I’ve made quite a lot of updates to the underlying code for cdcalendar; the documentation has been shaken up quite a bit too.

The Cuti-cuti Malaysia 2024 calendar LaTeX files is available as an Overleaf read-only project here. By default, this generates an A4 landscape calendar that highlights national and Penang state public holidays and school holidays, along with the nongli (Chinese lunisolar) calendar.

Cuti-cuti Malaysia January 2024 for Penang, A4 landscape without mini calendars
Cuti-cuti Malaysia January 2024 for Penang, A4 landscape without mini calendars ([giantsolo, landscape])
If you’d like to generate a calendar for a different state, or choose a different layout or size, or use your own pictures, or add/mark your own events, you can clone that Overleaf project to edit your own copy; or download the source files to edit on your own local LaTeX installation.

So, a quick recap of what this is: depending on which state (negeri) or federal territory (wilayah persekutuan) you’re in, the public holidays and school holidays would differ. It can get really hard to keep up with which holiday your local bank or your kid’s school is observing… so I decided to make my own calendar that would mark the holidays with different colours, depending on which state you’re in.

Generating for different states and layout options

The screenshots below show how holidays are highlighted differently, by changing \def\mylocation{Penang} to \def\mylocation{Kuala Lumpur} or \def\mylocation{Kedah}. Essentially holidays marked with solid colours are holidays that are observed in the state you’re in: National holidays are in solid pink; state holidays are in solid purple. Holidays observed in other states are marked with empty purple circles.

Cuti-cuti Malaysia February 2024 for Penang Cuti-cuti Malaysia February 2024 for Kuala Lumpur

Cuti-cuti Malaysia February 2024 for Kedah

Holidays are marked differently depending on which state name \mylocation is set to.
  • Instead of giantsolo, these three calendars use the giant class option, so will also generate two mini calendars on each page for the previous and next months.
  • For the Kedah calendar we also used the sundayweek document class option, to make the weeks start with Sunday instead of Monday.
  • Using giant or giantsolo without the landscape class option will generate A4-sized portrait calendars.

There are two variants of smaller sizes:

  • Without any particular class options (i.e. the default output size for cdcalendar actually), each calendar page is 11.7cm × 13.65cm and would fit a CD case
  • With the small class option, each calendar page is 9cm × 7.5cm, similar to a 3.5″ floppy disk.
Without any document class options, each calendar page is 11.7cm × 13.65cm and fits a CD case.
Without any document class options, each calendar page is 11.7cm × 13.65cm and fits a CD case.

With [small] class option, each calendar page is 9cm × 7.5cm
With [small] class option, each calendar page is 9cm × 7.5cm like a 3.5″ floppy disk

At such small sizes, it may be better to turn off the nongli calendars by changing \toggletrue{chinese-nongli} in the .tex file preamble to \togglefalse{chinese-nongli}.

Changing the pictures

For convenience the images are numbered 01–12. You can create a folder with a different name and place your own image files in it, and then update the \graphicspath{{.../}}. Images of 9:16 or 1:2 aspect ratio work best.

Adding your own events

The public holidays are listed in the tab-separated values files 2024-my-holidays.tsv; and school holidays in 2024-my-school.tsv. If you would like to add your own custom events, you can use the \event command in the .tex files themselves. The mark styles can be customised too. Here’s an example adding 1-day and 5-day events to the monthly of July, 2024:

\begin{monthCalendar}{2024}{07}
%% This is a 1-day event
\event{2024-07-03}{}{Birthday!}
%% This is a 5-day event starting July 15th
\event{2024-07-15}{5}{Exam week}
%% You could also write equivalently
%\event{2024-07-15}{2024-07-19}{Exam week}
\end{monthCalendar}
Use the \event command to insert custom events of your own
Use the \event command to insert custom events of your own

Data sources

The calendar data used in this sample were obtained from the following sources.

  1. Malaysian public holiday data was sourced from the Google Calendar here using the Google Calendars API, then converted to a tab-separated values file.
  2. Malaysian school holiday data was sourced from the Malaysian Ministry of Education’s portal (2023/2024) (2024/2025).
  3. Chinese lunar calendar data was generated from here, converted to a CSV file and Simplified Chinese and some minor editing for typesetting purposes (inserting \\ for line breaks.
  4. Photos in the sample calendar are sourced from Pexels and provided under the Pexels License.

Leave a Reply

Your email address will not be published. Required fields are marked *