4

I would like to create an annual wall calendar entirely in LaTeX but cannot find an appropriate style sheet. I'd like a full page monthly figure environment, each month automatically listed, the days of the week across the top (Sunday, Monday, ...), numbers (1, 2, 3, ...) in each day cell, and small text or figure environments for each of the 365 days. The paging should correspond to a typical hanging calendar, in which the large figure for each month is at the top and the next page with the corresponding month name and day blocks hangs beneath. Ideally, the final .eps or .pdf can be printed out and bound directly, ready to hang on a wall.

3
  • 1
    Have you seen the package wallcalendar for lualatex?
    – Thérèse
    Commented Dec 26, 2017 at 20:09
  • 1
    Thanks. Just checked. Alas, none of the options permits a large day cell, where I can include some text (or even teeny graphics) and leave room for the user to hand write calendar events in the day cell. Commented Dec 26, 2017 at 20:18
  • This is an old question, but I have recently been in a similar situation. If you come across this question through a search: check out latextemplates.com/template/monthly-calendar
    – Ingmar
    Commented Dec 8, 2020 at 18:32

1 Answer 1

3

This is certainly possible with TikZ' calendar library.

There's some fine-tuning to do with the length and dimensions to fit it to the page.

Code

\documentclass[a4paper,landscape]{article}
\usepackage[margin={1cm},noheadfoot]{geometry}
\renewcommand*\thepage{}
\usepackage{libertine}
\usepackage{tikz}\usetikzlibrary{calendar}
\tikzset{
  every weekday/.style={
    anchor=south west,
    black,
    name=weekday-\pgfcalendarcurrentmonth-\pgfcalendarcurrentweekday,
    node contents=\%wt},
  weekday above/.style={
    if = {(day of month=1) [days={append after command={
          node [at={(\tikzlastnode.north west)},
                alias=@firstweekday,
                every weekday]}}]},
    if = {(day of month=2, day of month=3, day of month=4, day of month=5, day of month=6, day of month=7) [
          days={append after command={
          node [at={(@firstweekday.south west-|\tikzlastnode.south west)}, every weekday]}}]}},
  wall calendar/.style={
    week list, weekday above, day text=,
    day and weekday/.style={
      draw, outer sep=+0pt,
      minimum width=\linewidth/7,
      minimum height=\textheight/8},
    day xshift=\linewidth/7,
    day yshift=\textheight/8,
    every day label/.style={
      anchor=north east,
      font=\Large\itshape,
      node contents={\%d=},
      inner sep=.7em},
    every day/.append style={
      day and weekday,
      label={[every day label]north east:}
    },
    every weekday/.append style={
      day and weekday,
      minimum height=2em}
  }
}
\newcommand*\Year{2022}
\begin{document}\sffamily
\centering
\foreach \mon in {1,...,12}{%
  {\Huge \pgfcalendarmonthname{\mon}\par}
  {\huge \Year\par}
  \vspace{2em}
  \tikz\calendar[
    dates=\Year-0\mon-01 to \Year-0\mon-last,
    wall calendar,
  ];

\pagebreak}
\end{document}

Output

enter image description here

1
  • Wow... thanks so much. Better late than never! Commented Jul 31, 2022 at 0:41

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .