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

Use the \event command to insert custom events of your own

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.

Cuti-cuti Malaysia: Customisable State-by-state Holidays Calendar for 2023

I’ll cut to the chase: Cuti-cuti Malaysia calendar for 2023!

PDF for Penang version: download here.

For other states download the .zip or clone this Overleaf project to your own Overleaf account. Change

\def\mylocation{Penang}

to e.g.

\def\mylocation{Selangor}

If you would just like a calendar without the Malaysian holidays and/or Chinese lunisolar calendars, see this Github repo or this Overleaf template.

See this post for instructions on how to customise your calendar.

Data sources

The calendar data used in this sample were obtained from the following sources, and I cannot guarantee their accuracy and correctness.

  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 webpage.
  3. Chinese lunar calendar data was sourced 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.

Cuti-cuti Malaysia: Customisable State-by-state Holidays Calendar for 2022

OK, time for another Cuti-cuti Malaysia calendar for 2022… and yes I’m shamelessly reusing text wholesale from last year’s post 🙂

You can download the PDF customised for Penang here. If you would just like a calendar without the Malaysian holidays and/or Chinese lunisolar calendars, see this Github repo or this Overleaf template.

Preview of first two months in the calendar

Federal public holidays are highlighted in solid shaded pink circles, as in 1–2 February. Public holidays that are applicable for your home state (Penang in the above example) would be highlighted in solid shaded purple circles, as in 1 January. Public holidays in other states (relative to your home state) are also highlighted, but only in a hollow purple circle. See e.g. 14 January (Birthday of Yang di-Pertuan Besar) which is a public holiday in Negeri Sembilan, but not in Penang. School holidays are highlighted in light orange.

If you’d like to generate your own calendar for your own home state, or to change the illustrations/fonts/colours/etc, you can download the source code and compile with XeLaTeX. If you have an Overleaf account, you can also visit my read-only project and clone it to your own Dashboard. See this post for instructions on how to customise your calendar.

Data sources

The calendar data used in this sample were obtained from the following sources, and I cannot guarantee their accuracy and correctness.

  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 webpage.
  3. Chinese lunar calendar data was sourced 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.

Happy New Year 2022!

Cuti-cuti Malaysia: Customisable State-by-state Holidays Calendar for 2021

Another year, another Cuti-cuti Malaysia customisable calendar created with LaTeX! (Well at least this year my updates are quarterly)

You can download the PDF customised for Penang here. If you would just like a calendar without the Malaysian holidays and/or Chinese lunisolar calendars, see this Github repo or this Overleaf template.

Calendars for January, February 2021

Federal public holidays are highlighted in solid shaded pink circles, as in 12–13 February. Public holidays that are applicable for your home state (Penang in the above example) would be highlighted in solid shaded purple circles, as in 1 January. Public holidays in other states (relative to your home state) are also highlighted, but only in a hollow purple circle. See e.g. 1 February (Federal Territory Day) which is a public holiday in Kuala Lumpur, Putrajaya and Labuan, but not in Penang. School holidays are highlighted in light orange.

If you’d like to generate your own calendar for your own home state, or to change the illustrations/fonts/colours/etc, you can download the source code and compile with XeLaTeX. If you have an Overleaf account, you can also visit my read-only project and clone it to your own Dashboard. See this post for instructions on how to customise your calendar.

Data sources

The calendar data used in this sample were obtained from the following sources, and I cannot guarantee their accuracy and correctness.

  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 webpage.
  3. Chinese lunar calendar data was sourced from here, converted to a CSV file and Simplified Chinese and some minor editing for typesetting purposes (inserting \\ for line breaks.
  4. Month illustrations in the sample calendar are created by GraphicMama and distributed by Smashing Magazine under Creative Commons Attribution 3.0 Unported.

Happy New Year 2021!

Cuti-cuti Malaysia: Customisable State-by-state Holidays Calendar for 2020

Erm… I am sorry that I had neglected this blog to the point that it’s now the annual announcement for the Cuti-cuti Malaysia calendars 😅

But anyway, here it is. You can download the PDF customised for Penang here.

PG-2020

Federal public holidays are highlighted in solid shaded pink circles, as in 25–26 January. Public holidays that are applicable for your home state (Penang in the above example) would be highlighted in solid shaded purple circles, as in 1 January. Public holidays in other states (relative to your home state) are also highlighted, but only in a hollow purple circle. See e.g. 1 February (Federal Territory Day) which is a public holiday in Kuala Lumpur, Putrajaya and Labuan, but not in Penang.

This year I’ve tried to add some code that automatically detects if the Monday after a public holiday (for states like Penang, Selangor…) would also be a holiday. For example, 26 Jan falls on a Sunday; therefore 27 Jan is also a holiday: this is highlighted in the calendar by a pink shaded circle but without a solid outline.

School holidays are also highlighted, though not shown in the above sample images.

If you’d like to generate your own calendar for your own home state, or to change the illustrations/fonts/colours/etc, you can download the source code and compile with XeLaTeX. If you have an Overleaf account, you can also visit my read-only project and clone it to your own Dashboard. See last year’s post for instructions on how to customise your calendar.

This year I’ve also updated the cdcalendar class so that the giant option would generate mini calendars for the previous and next month, upon a feature request from my daughter. (Children can often come up with the most useful and practical feature requests!) While implementing it, I was pleasantly surprised that TikZ’s calendar would correctly print December 2019’s calendar when presented with a date like 2020-0-01, and January 2021’s calendar when given 2020-13-01!

BTW if you would like to use Bahasa Melayu month headings instead, change

\documentclass[17pt,british,giant]{cdcalendar}

to

\documentclass[17pt,nobabel,giant]{cdcalendar}
\usepackage[bahasam]{babel}
\usepackage{ms-mod}

Data sources

The calendar data used in this sample were obtained from the following sources, and I cannot guarantee their accuracy and correctness.

  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 webpage.
  3. Chinese lunar calendar data was sourced from here, converted to a CSV file and Simplified Chinese and some minor editing for typesetting purposes (inserting \\ for line breaks.

Happy New Year 2020!

Cuti-cuti Malaysia: 2019 calendar with Malaysian public and school holidays

I made a calendar marked with Malaysian holidays for personal use, and then decided to make it public. It uses my LaTeX CD calendar template. Here are some sample pages:
February 2019 calendar marked with Malaysian holidays, customised for PenangMarch 2019 calendar marked with Malaysian holidays, customised for Penang
Download Cuti-cuti Malaysia 2019 Calendar for Penang
Download LaTeX source code files

This has been customised specifically with Penang in mind, so state holidays observed in Penang are marked with filled purplish circles, while holidays observed in other states are marked with hollow circles. National holidays are marked with filled red circles.

Customisations

Here are the LaTeX source code files if you’d like to re-generate the calendar for a different state, or if you’d like to customise it further. You can also clone the template project if you have an Overleaf account.

Calendars for other states or federal territories

If you’d like to generate a calendar with state holidays marked for a different state, Download the source code, change the line

\def\mylocation{Penang}

to a different state or federal territory, and recompile the .tex file with XeLaTeX. For example:

\def\mylocation{Kuala Lumpur}

Valid values for \mylocation: Kedah, Johor, Kelantan, Terengganu, Malacca, Negeri Sembilan, Pahang, Penang, Perak, Sabah, Sarawak, Selangor, Kuala Lumpur, Labuan, Putrajaya.

Add Chinese lunar calendar

You can also uncomment this line in the .tex file’s preamble:

\providetoggle{chinese-lunar}\toggletrue{chinese-lunar}

The generated calendar would then include the Chinese lunar calendar.
February 2019 calendar marked with Malaysian holidays and Chinese lunar calendar, customised for PenangMarch 2019 calendar marked with Malaysian holidays and Chinese lunar calendar, customised for Penang
Download Cuti-cuti Malaysia 2019 Calendar for Penang, with Chinese lunar calendar

Add your own events

You can add your own events to the calendar and define your own styles for their markers. For example:

\tikzset{personal/.style={text=YellowGreen!50,font=\Large}}
\tikzset{work/.style={fill=SkyBlue!50,shape=cloud,aspect=1.5}}
 
\begin{monthCalendar}{2019}{01}
\event[mark style=personal,marker=\faBirthdayCake]{2019-01-12}{}{Someone's birthday}
\event[mark style=work]{2019-01-23}{2019-01-24}{Business trip}
\end{monthCalendar}

would produce this output in the January calendar:

Adding your own events to the calendar

Changing or removing the images

All photos in this sample, in the flickr/ folder, were downloaded from Flickr and are licensed under Creative Commons licenses. You can replace them with your own images for your own use. Remember to change the \graphicspath{{flickr/}} line if you use a different folder for the images.

If you do not want any illustrations, simply remove the \illustration commands before each month’s calendar.

For further information about the underlying cdcaleandr class and template, see this blog post or its Github repository.

Data sources

The calendar data used in this sample were obtained from the following sources, and I cannot guarantee their accuracy and correctness.

  1. Malaysian public holiday data was sourced from the Google Calendar here and converted to a tab-separated values file.
  2. Malaysian school holiday data was sourced from the Malaysian Ministry of Education’s webpage.
  3. Chinese lunar calendar data was sourced from here, converted to a CSV file and Simplified Chinese and some minor editing for typesetting purposes (inserting \\ for line breaks.

Happy New Year 2019!

A multilingual, customisable CD/floppy disk jewel case calendar with LaTeX

This post is also published on the Overleaf blog.

LaTeX‘s versatility makes it a rather handy (and free!) tool for creating various goodies, including monthly calendars. So here’s my stab at creating a LaTeX class and template for creating customisable, multilingual monthly calendars, that fit in CD or 3.5″ disk jewel cases. Pictures and events can be added, and you can choose any month range for your calendar — it’s not necessary that they begin on January and end on December.

You can make them for personal use, gifts or memorabilia for special events e.g. anniversaries. They may also be used for publicity or merchandise if you happen to be running a club or society.

For example, you could make a calendar showcasing birds frequenting your neighbourhood for your local birdwatching club. Work-wise, you might want to make a calendar for your journal paper reading group, highlighting important dates for assignments and conference submissions in your field in the coming semester.

Getting the Templates

You can clone the git repository on Bitbucket, or download a .zip file. Alternatively, you can also open and edit a CD-sized or floppy disk-sized calendar template on Overleaf.

The Monthly Calendars

The cdcalendar class will set up the calendar size to fit in a CD jewel case, and lay them out on an A4-sized paper:

\documentclass[12pt]{cdcalendar}
\begin{document}
%% June 2015
\monthCalendar{2015}{06}
\clearpage
 
%% July 2015
\monthCalendar{2015}{07}
\end{document}

If you want to make a smaller calendar to fit in 3.5″ floppy cases instead, pass the small option to the cdcalendar class:

\documentclass[9pt,small]{cdcalendar}

For those who are interested in the technical details: the calendar is rendered with tikz, and the 2-up or 4-up layout is done with pgfpages.

Adding Illustrations

I’ve defined a \illustration command for adding graphics to each page of the calendar:

\usepackage{graphicx}
%% syntax: \illustration[caption]{width}{image-file-name}
\illustration[We had fun at the birthday party!]{8.5cm}{Party.jpg}

The image will be added at the top left of the current page. The original proportion will be preserved, so you do have to choose an illustration of appropriate proportions to fit the empty space.

Adding/marking events

You can mark events on each month using the \event command:

\event{2015-10-25}{Daylight saving time ends}

The event will be listed above the monthly calendar, and the date is circled in the calendar itself. Events must be given after the relevant \monthCalendar and on the same page.

If your event spans over several days, you can give the duration (in days) as an option to \event:

\event[5]{2015-07-26}{ACL 2015, Beijing}

Alternatively, you can also give the end date as the option instead:

\event[2015-07-31]{2015-07-26}{ACL 2015, Beijing}

Both forms of the command will give the same output.

If an event spans two months, e.g. \event[9]{2015-06-27}{Summer Camp}, you’ll have to issue this command in both months i.e. once for June and once for July:

\monthCalendar{2015}{06}
\event[9]{2015-06-27}{Summer Camp}
\clearpage
 
\monthCalendar{2015}{07}
\event[9]{2015-06-27}{Summer Camp}
\clearpage

Multilingual Calendars

The dates, month names and weekday initials can be localised to languages that are supported by the babel, translator and datetime2.

For example, to get a calendar with Spanish dates, just pass spanish as a class option:

\documentclass[12pt,spanish]{cdcalendar}

We’ve tested the following language options: british, spanish, french, ngerman, italian, portuges, polish, croatian, greek.

Just remember to use LuaLaTeX to compile your project if it’s in french — it doesn’t work well with PDFLaTeX, and XeLaTeX doesn’t work well for this template. [31 Dec, 2019] The latest version can now be compiled with XeLaTeX.

Customising styles

The fonts and colours of most elements can be customised at any point in the calendar; take a look at the templates to see some examples. For convenience’s sake, a \makeCover command (and the necessary metadata commands) is also provided.

It’s been a lot of fun creating this template, and I’m sure you’ll find many more uses for this calendar. Enjoy!