Monday, May 30, 2016

Menghitung Hari Bersama Date Number

Mukadimah

Mungkin ini bukanlah hal baru bagi Anda yang sudah terbiasa bekerja dalam Excel, seperti tampak pada gambar di samping. Masalahnya, dalam tulisan ini, kita akan melakukan perhitungan tentang jarak (rentang waktu) antara dua tanggal (hari) dalam $\small\LaTeX$ yang hasilnya termuat sebaris (inline) dengan teks pada naskah/dokumen yang kita tulis.

Dalam hal ini kita bekerja dalam selingkung (template). Yang pertama saya pinjam dari Steven B. Segletes, seorang ahli di forum, yang menunjukkan cara berhitung rentang waktu antara dua tanggal, dalam hitungan hari, jam, dan menit. Yang kedua saya pinjam dari Martin Scharrer, seorang ahli di forum, yang menunjukkan cara berhitung rentang waktu antara suatu tanggal hingga hari ini, dalam hitungan tahun dan bulan.

Kedua selingkung itu sama-sama menggunakan paket utama datenumber, hanya saja untuk yang kedua memerlukan tambahan paket calc.

Perhitungan Rentang Waktu (Hari, Jam, Menit) di Antara Dua Tanggal

Berapa hari, berapa jam, berapa menitkah rentang waktu antara tanggal 12 Oktober 2015 pkl. 11.30 am hingga tanggal 2 Mei 2016 pkl. 1.20 pm?
Untuk menghitungnya kita memerlukan penetapan beberapa perintah baru sebagai berikut.
\gdef\mornaft{}

\def\xfoo#1:#2 #3m#4\relax{(#1)*60+#2\if p#3+720\fi\ifnum#1=12-720\fi}

\newcommand\ampm[1][T]{%
\if T#1%
 \def\numfoo##1##2{%
  \the\numexpr(\expandafter\xfoo##2\mornaft\relax)-%
    (\expandafter\xfoo##1\mornaft\relax)\relax}%
\else%
 \def\numfoo##1##2{%
  \the\numexpr(\expandafter\xfoo##2 am\relax)-%
    (\expandafter\xfoo##1 am\relax)\relax}%
\fi
}
\ampm

\def\barr#1#2{%
  \edef\tmp{\the\numexpr((\numfoo{#1}{#2})-(30))/60\relax}%
  \ifnum\tmp<0 addtocounter="" barm="" barr="" d="" dan="" datenumber="" edef="" else="" fi="" hari="" if="" ifnum="" jam="" m="" menit="" mydays="" mystartdate="" newcommand="" newcounter="" numexpr="" numfoo="" relax="" setcounter="" setdatenumber="" span="" the="" themydays="" timediff="" tmp="" value="">
Kemudian dalam penggunaannya kita tuliskan
\timediff
{2015}{10}{12}{11:30 am}
{2016}{5}{2}{01:20 pm}
Misalnya, di dalam teks kita tulis
Rentang waktu antara tanggal 12 Oktober 2015 pkl. 11.30 am hingga tanggal 2 Mei 2016 pkl. 1.20 pm adalah \textbf{
\timediff
{2015}{10}{12}{11:30 am}
{2016}{5}{2}{01:20 pm}
}.
maka akan menghasilkan 
Rentang waktu antara tanggal 12 Oktober 2015 pkl. 11.30 am hingga tanggal 2Mei 2016 pkl. 1.20 pm adalah 203 hari, 1 jam, dan 50 menit.

Perhitungan Rentang Waktu (Tahun, Bulan) di Antara Suatu Tanggal Hingga Hari ini.

Bila Anda mulai bekerja selaku Pegawai Negeri Sipil (PNS) pada 5 Maret 1992, berapa lamakah masa kerja Anda hingga saat ini?
Dengan menambahkan paket calc, kita memerlukan penetapan perintah baru sebagai berikut.
\newcounter{datetoday}
\newcounter{diffyears}
\newcounter{diffmonths}
\newcounter{diffdays}

\newcommand{\difftoday}[3]{%
      \setmydatenumber{datetoday}{\the\year}{\the\month}{\the\day}%
      \setmydatenumber{diffdays}{#1}{#2}{#3}%
      \addtocounter{diffdays}{-\thedatetoday}%
      \ifnum\value{diffdays}>0
        \def\diffbefore{in }%
        \def\diffafter{}%
      \else
        \def\diffbefore{}%
        \def\diffafter{}%
        \setcounter{diffdays}{-\value{diffdays}}%
      \fi
      \setcounter{diffyears}{\value{diffdays}/365}%
      \setcounter{diffdays}{\value{diffdays}-365*\value{diffyears}}%
      \setcounter{diffmonths}{\value{diffdays}/30}%
      \setcounter{diffdays}{\value{diffdays}-30*\value{diffmonths}}%
      %
      \diffbefore
      \ifnum\value{diffyears}=0
      \else
        \ifnum\value{diffyears}>1
            \thediffyears\space tahun,
        \else
            \thediffyears\space tahun,
        \fi
      \fi
      \ifnum\value{diffmonths}=0
      \else
        \ifnum\value{diffmonths}>1
            \thediffmonths\space bulan
        \else
            \thediffmonths\space bulan
        \fi
      \fi
      \diffafter
}
Kemudian dalam penggunaannya kita tuliskan
\difftoday{1992}{03}{05}
Misalnya, di dalam teks kita tulis
Saya telah bekerja selaku PNS sejak 5 Maret 1992, maka masa kerja saya hingga saat ini adalah \textbf{
\difftoday{1992}{03}{05}
}
maka akan menghasilkan
Saya telah bekerja selaku PNS sejak 5 Maret 1992, maka masa kerja saya hingga saat ini adalah 24 tahun, 3 bulan.

Penutup

Kita hanya perlu mencatumkan paket dan perintah tersebut, sesuai dengan perhitungan yang diinginkan, di dalam mukadimah (preamble) dari dokumen yang kita buat. Hal-hal lainnya, seperti jenis huruf dll, mengikuti keperluan dari dokumen itu.

Demikian semoga bermanfaat.

Adjie Gumarang Pujakelana 2016

Saturday, May 28, 2016

Selingkung (Template) Kalender Pendidikan

Mukadimah

Menjelang bulan Juli pasti Bapak/Ibu guru disibukkan oleh berbagai persiapan dalam menghadapi tahun pelajaran baru. Di antaranya adalah membuat dokumen program/perencanaan pembelajaran, termasuk di dalamnya kalender pendidikan. Saat tulisan ini dibuat, tentu kalender pendidikan tahun pelajaran 2016/2017 belum diterbitkan oleh dinas pendidikan atau unit instansi. Oleh karena itu, sebagai contoh, kalender pendidikan dalam tulisan ini mengacu pada kalender pendidikan tahun pelajaran 2015/2016 yang berlaku pada instansi tempat penulis bertugas.
Perhatikan gambar di atas. Pernahkah Anda menemukan (atau membuat) kalender pendidikan semacam itu? Dalam tulisan ini akan diulas tentang cara membuat kalender pendidikan itu dalam kelas dokumen Exam dengan menggunakan paket TikZ.

Kepala dan Kaki

Inilah alasan penulis menggunakan kelas dokumen exam, karena memerlukan keterangan dokumen pada kepala dan kaki halaman dan itu sudah tersedia di dalamnya. Untuk keperluan ini kita memerlukan paket tikzpagenodes. Kalender ini termuat cukup pada satu halaman, oleh karena itu perintah kepala dan kakinya hanya untuk halaman pertama. (Tentu saja, demi keselarasan dokumen, selingkung ini pun dapat digunakan untuk membuat dokumen program tahunan, program semester, dll.)
Pada dasarnya, pada kepala halaman, kita membuat suatu persegi panjang yang dibubuhi "keterangan" di dalamnya. Sebagai pilihan, penulis isi persegi panjang itu oleh warna dan teks juga diwarnai putih.
\firstpageheader{}{
\begin{tikzpicture}[remember picture,overlay,line width=.8pt,text width=20.3cm,text height=.6cm]
\node[rectangle,font=\color{White}\bfseries\Large,fill=DarkOrange] at (-3.85,0) (atas) {\hfill Kalender Pendidikan};
\end{tikzpicture}
\vfill
}
{
\begin{tikzpicture}[remember picture,overlay,line width=.8pt,text width=7.3cm,text height=.5cm]
\node[rectangle,font=\color{White}\bfseries\Large,fill=Black] at (-3.8,0) (atas) {SMK Negeri 2 Sumbawa Besar};
\end{tikzpicture}
\vfill
}
Pada kaki halaman, kita buat ruas garis dan pada pojok kanannya kita buat "belah ketupat" (diamond) yang diisi oleh nomor halaman (untuk kesinambungan dengan naskah/dokumen lainnya).
\firstpagefooter{}{
\begin{tikzpicture}[remember picture,overlay,line width=.8pt]
\node[diamond,draw,font=\small] at (current page footer area.south east) (dia) {\thepage};
\draw ([xshift=1pt]dia.west) -- (current page footer area.south west);
\end{tikzpicture}
}{} 
%\firstpageheadrule
Karena kita membuat pengaturan sendiri untuk kepala halaman, maka garis pada kepala halaman yang telah disediakan oleh paket exam kita tiadakan.

Pengaturan Kalender

Kalender ini berbentuk memanjang/mendatar (landscape) dan dibuat oleh paket TikZ. Untuk keperluan ini kita memerlukan beberapa paket dan kepustakaan TikZ sebagai berikut.
\usepackage{tikz} 
\usetikzlibrary{shapes.geometric}
\usetikzlibrary{calendar}
\usepackage{pdflscape}
Seperti tampak pada gambar di atas, kalender tersebut diatur per bulan dengan menyertakan nama bulan, tahun, dan hari di atasnya. Untuk nama hari harus ditetapkan tersendiri ke dalam Bahasa Indonesia karena digunakan dalam keseluruhan kalender itu. Hal-hal tersebut diperintahkan oleh makro sebagai berikut.
\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/Sen,1/Sel,2/Rab,3/Kam,4/Jum,5/Sab,6/Min} {
        \pgf@xa=\d\pgf@xa%
        \pgftransformxshift{\pgf@xa}%
        \pgftransformyshift{\pgf@ya}%
        \node[every day,day heading]{\small\l};%
      } 
    }{}%
  }%
]
\makeatother%
Sedangkan nama bulan dan tahun berupa teks yang dituliskan secara langsung sesuai dengan bulannya.

Pengaturan dan Penandaan Kalender pada Tiap Bulan

Kalender untuk tiap bulannya dibuat oleh gambar TikZ sebagai berikut.
\begin{tikzpicture}[opsi]
\calendar (mycal) [opsi]
....<perintah>
\end{tikzpicture}
Untuk opsi pada gambar TikZ, penulis hanya mengatur skala dan bentuk huruf.
scale=1,font=\scriptsize\bfseries
Pada opsi untuk perintah kalender kita cantumkan penanggalan (dates): tahun-bulan-hari, tampilan mingguan (week list), peletakkan nama bulan, nama bulan, dan pengaturan hari. Sebagai contoh, berikut ini penetapan opsi untuk bulan Juli.
\calendar (mycal) [
    dates=2015-09-01 to 2015-09-30,
    week list,month label above centered,
    month text=\normalsize\textcolor{black}{September 2015}, 
    day yshift = 0.6cm,day xshift=.9cm,
    day letter headings,
    every month/.append style={yshift=-.25cm}
                ]
Perintah-perintah berikutnya berkenaan dengan penandaan untuk hari-hari tertentu yang bersesuaian dengan hari libur umum, hari libur nasional, dan kegiatan akademik di sekolah. Secara umum, hari Minggu itu libur maka pada bagian <perintah> kita cantumkan
if (Sunday) [red];
Selanjutnya pada hari-hari tertentu lainnya penulis lingkari dengan pengisian warna berbeda-beda pada tanggal yang bersangkutan. Misalnya,
\fill[biruku,fill opacity=0.5] (mycal-2015-07-01) circle (7pt);
\fill[Turquoise,fill opacity=0.5] (mycal-2015-07-02) circle (7pt);
\fill[Green,fill opacity=0.5] (mycal-2015-07-06) circle (7pt);
Setelah semua hari-hari tertentu itu ditandai semacam itu, selanjutnya keterangan untuk penandaan itu kita perintahkan di bawah/setelah lingkup perintah (environment) gambar  TikZ tersebut sebagai berikut. 
\tikz\path[fill=biruku] (0,0) circle (3pt); Libur puasa\: 
\tikz\path[fill=Green] (0,0) circle (3pt); Awal masuk sekolah\\
\tikz\path[fill=Turquoise] (0,0) circle (3pt); Masa Orientasi Siswa
Demikian pula opsi-opsi dan perintah-perintah yang dicantumkan pada bulan-bulan selanjutnya.

Penutup

Ulasan di atas memang hanya mencakup bagian-bagian pokok dalam penyusunan kalender tersebut. Pengkodean selengkapnya dapat Anda unduh di sini.
Demikian semoga bermanfaat.

Adjie Gumarang Pujakelana 2016

Thursday, May 19, 2016

Bunga Rampai Masalah Matematika

Tayangan ini hasil dari FlipSnack.
Bagaimana menurut Anda?

Adjie Gumarang Pujakelana 2016


Related Posts Plugin for WordPress, Blogger...