Wednesday, December 24, 2014

Kalender 2015

Seperti telah dilakukan sebelumnya, kali ini pun saya akan membagikan kalender untuk tahun 2015 yang segera akan tiba. Kalender ini saya adopsi dari Hakon Malmedal, sedangkan untuk hari-hari libur nasional saya mengacu ke Kalender Indonesia Online.

Kalender ini sepenuhnya disusun oleh paket
\usepackage{tikz}
\usetikzlibrary{calendar,fit}
tetapi kode sumbernya berbahasa Norwegia, maka saya harus mengubah nama hari dan bulan ke dalam Bahasa Indonesia pada baris 16 s.d. 42.
\usepackage[indonesian]{babel}\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%

\def\pgfcalendarmonthname#1{%
  \translate{\ifcase#1\or Januari\or Februari\or Maret\or April\or
    Mei\or Juni\or Juli\or Augustus\or September\or Oktober\or
    November\or Desember\fi}%
}
Selain itu, tentu saja, hari-hari libur nasional harus sesuai dengan kalender nasional. Oleh karena itu, pada pengkodean untuk setiap bulan, saya muat perintah hari libur (berwarna merah) yang mengacu pada kalender nasional. Berbeda dengan kode sumber, untuk hari Jumat saya ubah dengan warna SeaGreen dari xcolor.
\usepackage[svgnames]{xcolor}
Berikut ini contoh baris pengkodean untuk menandai hari libur dan hari Jumat pada bulan Februari.
  if (Sunday,
      equals=02-01) [red]
  if (Friday,
      equals=02-06) [SeaGreen]
  if (equals=02-19) [red,observance=Imlek 2566]
yang berarti bahwa hari Minggu pertama di bulan Februari jatuh pada tanggal 2 dan hari Jumat dalam minggu pertama jatuh pada tanggal 6, sedangkan satu hari libur nasional jatuh pada tanggal 19, yaitu hari Imlek tahun 2556.
Petunjuk lainnya dapat Anda pelajari pada pengkodean selengkapnya berikut ini beserta dokumen yang dihasilkannya.

Dokumen ini saya susun melalui Online LaTeX Editor ShareLaTeX
Demikian semoga bermanfaat. 

Adjie Gumarang Pujakelana 2014
\documentclass[fontsize=20pt]{scrartcl}
%http://tex.stackexchange.com/questions/170462/calendar-in-latex/170474#170474
\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,black] {\showtext};
    \node (lower left) at (-\cellwidth,0) {};
    \node[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}{25mm}
\newlength{\cellwidth}
\setlength{\cellwidth}{35mm}

\begin{document}

\centering

\begin{tikzpicture}[thick]
  \calendar[dates=2015-01-01 to 2015-01-last,
            week list,
            month label above centered,
            month text=\textsc{\%mt \%y0},
            day headings={font=\footnotesize},
            day letter headings]
  if (Monday,
      equals=01-01,
      equals=02-01,
      equals=03-01,
      equals=04-01,
      equals=05-01,
      equals=06-01,
      equals=07-01,
      equals=08-01,
      equals=09-01,
      equals=10-01,
      equals=11-01,
      equals=12-01) [week number]
  if (Sunday,
      equals=01-01) [red]
  if (Friday,
      equals=01-02) [SeaGreen]
  if (equals=01-01) [observance=Tahun Baru]
  if (equals=01-03) [red,observance=Maulid Nabi Muhammad 1436H]
;
\end{tikzpicture}

\newpage
\begin{tikzpicture}[thick]
  \calendar[dates=2015-02-01 to 2015-02-last,
            week list,
            month label above centered,
            month text=\textsc{\%mt \%y0},
            day headings={font=\footnotesize},
            day letter headings]
  if (Sunday,
      equals=02-01) [red]
  if (Friday,
      equals=02-06) [SeaGreen]
  if (equals=02-19) [red,observance=Imlek 2566]
;
\end{tikzpicture}

\newpage
\begin{tikzpicture}[thick]
  \calendar[dates=2015-03-01 to 2015-03-last,
            week list,
            month label above centered,
            month text=\textsc{\%mt \%y0},
            day headings={font=\footnotesize},
            day letter headings]
  if (Sunday,
      equals=03-01) [red]
  if (Friday,
      equals=03-06) [SeaGreen]
  if (equals=03-21) [red,observance=Hari Raya Nyepi 1937]
;
\end{tikzpicture}

\newpage
\begin{tikzpicture}[thick]
  \calendar[dates=2015-04-01 to 2015-04-last,
            week list,
            month label above centered,
            month text=\textsc{\%mt \%y0},
            day headings={font=\footnotesize},
            day letter headings]
  if (Sunday,
      equals=04-05) [red]
  if (Friday,
      equals=04-03) [SeaGreen]
  if (equals=04-03) [red,observance=Wafat Isa Al-Masih]
;
\end{tikzpicture}

\newpage
\begin{tikzpicture}[thick]
  \calendar[dates=2015-05-01 to 2015-05-last,
            week list,
            month label above centered,
            month text=\textsc{\%mt \%y0},
            day headings={font=\footnotesize},
            day letter headings]
  if (Sunday,
      equals=05-03) [red]
  if (Friday,
      equals=05-01) [SeaGreen]
  if (equals=05-14) [red,observance=Kenaikan Isa Al-Masih]
  if (equals=05-16) [red,observance=Isra' Mi'ra Nabi Muhammad]
;
\end{tikzpicture}

\newpage
\begin{tikzpicture}[thick]
  \calendar[dates=2015-06-01 to 2015-06-last,
            week list,
            month label above centered,
            month text=\textsc{\%mt \%y0},
            day headings={font=\footnotesize},
            day letter headings]
  if (Sunday,
      equals=06-07) [red]
  if (Friday,
      equals=06-05) [SeaGreen]
  if (equals=06-02) [red,observance=Hari Raya Waisak 2559]
;
\end{tikzpicture}

\newpage
\begin{tikzpicture}[thick]
  \calendar[dates=2015-07-01 to 2015-07-last,
            week list,
            month label above centered,
            month text=\textsc{\%mt \%y0},
            day headings={font=\footnotesize},
            day letter headings]
  if (Sunday,
      equals=07-05) [red]
  if (Friday,
      equals=07-03) [SeaGreen]
  if (equals=07-18) [red,observance=Idul Fitri 1436H]
  if (equals=07-19) [observance=Idul Fitri 1436H]
;
\end{tikzpicture}

\newpage
\begin{tikzpicture}[thick]
  \calendar[dates=2015-08-01 to 2015-08-last,
            week list,
            month label above centered,
            month text=\textsc{\%mt \%y0},
            day headings={font=\footnotesize},
            day letter headings]
  if (Sunday,
      equals=08-02) [red]
  if (Friday,
      equals=08-07) [SeaGreen]
  if (equals=08-17) [red,observance=HUT RI Ke-70]
;
\end{tikzpicture}

\newpage
\begin{tikzpicture}[thick]
  \calendar[dates=2015-09-01 to 2015-09-last,
            week list,
            month label above centered,
            month text=\textsc{\%mt \%y0},
            day headings={font=\footnotesize},
            day letter headings]
  if (Sunday,
      equals=09-06) [red]
  if (Friday,
      equals=09-04) [SeaGreen]
  if (equals=09-24) [red,observance=Idul Adha 1436H]
;
\end{tikzpicture}

\newpage
\begin{tikzpicture}[thick]
  \calendar[dates=2015-10-01 to 2015-10-last,
            week list,
            month label above centered,
            month text=\textsc{\%mt \%y0},
            day headings={font=\footnotesize},
            day letter headings]
  if (Sunday,
      equals=10-04) [red]
  if (Friday,
      equals=10-02) [SeaGreen]
  if (equals=10-15) [red,observance=Tahun Baru Hijriyah 1437H]
;
\end{tikzpicture}

\newpage
\begin{tikzpicture}[thick]
  \calendar[dates=2015-11-01 to 2015-11-last,
            week list,
            month label above centered,
            month text=\textsc{\%mt \%y0},
            day headings={font=\footnotesize},
            day letter headings]
  if (Sunday,
      equals=10-04) [red]
  if (Friday,
      equals=11-06) [SeaGreen]
;
\end{tikzpicture}

\newpage
\begin{tikzpicture}[thick]
  \calendar[dates=2015-12-01 to 2015-12-last,
            week list,
            month label above centered,
            month text=\textsc{\%mt \%y0},
            day headings={font=\footnotesize},
            day letter headings]
  if (Sunday,
      equals=12-06) [red]
  if (Friday,
      equals=12-04) [SeaGreen]
  if (equals=12-24) [red,observance=Maulid Nabi Muhammad]
  if (equals=12-25) [red,observance=Hari Raya Natal]
;
\end{tikzpicture}

\end{document}



No comments:

Related Posts Plugin for WordPress, Blogger...