ConTeXt vs LaTeX (Table)
Sebuah perbandingan
Saya pernah menyebut di dalam salah sebuah status saya sebelum ini bahawa saya akan mencari masa terluang untuk belajar ConTeXt pula selepas LaTeX. Ada masa terluang sikit-sikit, saya belajar walaupun banyak juga tergaru-garu dan berkerut-kerut kening tambah-tambah lagi selalu hilang tumpuan kerana anak-anak perlulah dilayan juga.
Jadi di dalam penulisan kali ini, saya akan tunjukkan serba sedikit perbezaan di antara keduanya. Saya gunakan table dalam penghasilan dokumen melalui LaTeX dan ConTeXt ini.
Saya tunjukkan dokumen LaTeX dahulu:
bash\documentclass[a4paper,12pt]{article}
\usepackage{multirow} % Required for multirows
\usepackage[top=1.5in,bottom=1in,left=1in,right=1in]{geometry} % Required for multirows
\renewcommand{\baselinestretch}{1.3}
%https://www.sharelatex.com/learn/Headers_and_footers
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
%\rhead{Share\LaTeX}
%\lhead{Guides and tutorials}
\rhead{\it{Produced in \LaTeX}}
%\rfoot{Produced in \LaTeX}
\begin{document}
\begin{table}[h!]
\begin{center}
\caption{BAYARAN BALIK UJRAH PTPTN \-- JOMPAY}
\label{tab:table1}
\vspace*{.5em}
\begin{tabular}{|c|c|l|}
\hline
\textbf{No. I/C} & \textbf{Peringkat Pengajian} & \textbf{Rujukan JOMPAY}\\
\hline
\multirow{3}{*}{************} &
\multirow{3}{*}{Ijazah Pertama Sepenuh Masa} &
Biller Code: *****\\
& & Ref-1: 211************7\\
& & Ref-2: 019*******\\
\hline
\end{tabular}
\end{center}
\end{table}
\end{document}Pengeluaran:

Keterangan: Merupakan table asas. Wrap text dalam penggunaan table asas seperti ini biasanya memberikan hasil yang kurang memuaskan. Namun begitu, penggunaan pakej minipage mampu menampung kekurangan ini.
Untuk ConTeXt pula, terdapat tiga cara untuk membuat table;
Natural Table
bash\setuppapersize[A4][A4] %http://wiki.contextgarden.net/Detailed_Example
\setuplayout[topspace=1in,backspace=1in,header=24pt,headerdistance=3em,footerdistance=0em,height=middle,width=middle]
% uncomment the next line to see the layout
% \showframe
% headers and footers
%\setupheader[style=\it]
%\setupheadertexts[\rightaligned{Produced in \ConTeXt}]
\setupheadertexts[Natural Table\hfill \it{Produced in \ConTeXt}]
%\setupfooter[style=\it]
%\setupfootertexts[\rightaligned{Produced in \ConTeXt}] %http://wiki.contextgarden.net/Right_and_left
%\setuppagenumbering[location=empty] %http://wiki.contextgarden.net/Command/setuppagenumbering
\setuppagenumbering[location={}, style=bold]
\setupbackgrounds[header][text][bottomframe=on] %https://tex.stackexchange.com/questions/110701/draw-a-line-under-the-headertext-in-context
\setupTABLE[c][each][align={lohi},frame=off] %http://wiki.contextgarden.net/TABLE
\setupTABLE[r][1][topframe=on,bottomframe=on,height=2em,style=bold]
\setupTABLE[r][2][toffset=1mm]
\setupTABLE[r][4][bottomframe=on]
\setupTABLE[c][1][leftframe=on,width=3cm]
\setupTABLE[c][2][width=6cm]
\setupTABLE[c][3][width=5cm,loffset=2mm]
\setupTABLE[c][1,2][align={middle,lohi},bottomframe=on] %http://wiki.contextgarden.net/TABLE
\setupTABLE[c][1,2,3][rightframe=on]
\setupcaptions[location=top]
%\setupcaptions[figure][location=bottom]
%\setupcaptions[way=bysection,prefixsegments=section,headstyle=\bf]
\starttext
\placetable{BAYARAN BALIK PTPTN UJRAH - JOMPAY}
{\bTABLE[split=yes]
\bTABLEhead
\bTR
\bTH No. I/C \eTH
\bTH Peringkat Pengajian \eTH
\bTH Rujukan JOMPAY \eTH
\eTR
\eTABLEhead
\bTABLEbody
\bTR
\bTC[nr=3] ************ \eTC
\bTC[nr=3] Ijazah Pertama Sepenuh Masa \eTC
\bTC Biller Code: ***** \eTC
\eTR
\bTR
\bTC Ref-1: 211************7 \eTC
\eTR
\bTR
\bTC Ref-2: 019******* \eTC
\eTR
\eTABLEbody
\eTABLE}
\stoptext
%\blank[1*big] %small/medium/bigPengeluaran:

Keterangan: Juga dipanggil Automatic Table ataupun HTML Table. Sesuai untuk penukaran XML. Untuk penyediaan mudah dan cepat namun tidak sesuai untuk teks panjang yang memerlukan wrap. Boleh menetapkan offset, toffset (top/atas),loffset (left/kiri), roffset (right/kanan) dan boffset (bottom/bawah) untuk fungsi padding teks.
Cara susun atur:-
Buat tetapan terlebih dahulu (predefine) untuk table yang akan dicipta dengan arahan
setupTABLE: ↴\setupTABLE[r/c/each][#][settings]
- [r]: untuk baris (row)
- [c]: untuk kolum (column)
- [each]: untuk kedua-duanya (baris dan kolum)
- [#]: untuk kedudukan nombor baris atau kolum i.e. 1,2,3
- [settings]: Tetapan e.g. [align={middle,lohi}]
- Jajarkan (
align) sel ke bahagian tengah secara mendatar (horizontally) denganmiddleatau/dan secara menegak(vertically)denganlohi.
- [r]: untuk baris (row)
Table dibuat dengan tag pemula \bTABLE dan berakhir dengan \eTABLE
Headditetapkan dengan \bTABLEhead dan \bTH sebagai permulaan serta berakhir dengan tag \eTABLEhead dan \eTHBodyditetapkan dengan \bTABLEbody dan \eTABLEbody- Baris dan kolum masing-masing dimulakan dengan \bTR & \eTR serta \bTC & \eTC
- Gabungkan baris dengan [nr=#] dan kolum dengan [nc=#]
Tabulate
bash\setuppapersize[A4][A4]
\setuplayout[topspace=1in,backspace=1in,header=24pt,headerdistance=3em,footerdistance=0em,height=middle,width=middle]
% uncomment the next line to see the layout
% \showframe
% headers and footers
%\setupheader[style=\it]
%\setupheadertexts[\rightaligned{Produced in \ConTeXt}]
\setupheadertexts[Tabulate\hfill \it{Produced in \ConTeXt}]
%\setupfooter[style=\it]
%\setupfootertexts[\rightaligned{Produced in \ConTeXt}]
%\setuppagenumbering[location=empty] %http://wiki.contextgarden.net/Command/setuppagenumbering
\setuppagenumbering[location={},style=bold]
\setupbackgrounds[header][text][bottomframe=on] %https://tex.stackexchange.com/questions/110701/draw-a-line-under-the-headertext-in-context
%\setuptabulate[split=yes,header=repeat]
\setupcaptions[location=top]
\starttext
\starttabulatehead[]
\FL
\VL {\bf No. I/C} \VL {\bf Peringkat Pengajian} \VL {\bf Rujukan JOMPAY} \VL \NR
\ML
\stoptabulatehead
\placetable{BAYARAN BALIK PTPTN UJRAH - JOMPAY}
\starttabulate[|cw(.2\textwidth)|c|lw(.35\textwidth)|]
\VL \VL \VL Biller Code: ***** \VL \NR
\VL ************ \VL Ijazah Pertama Sepenuh Masa \VL Ref-1: 211************7 \VL \NR
\VL \VL \VL Ref-2: 019******* \VL \NR
\BL
\stoptabulate
\stoptextPengeluaran:

Keterangan: Kaedah ringkas untuk menghasilkan table. Juga sukar untuk mendapatkan wrap dengan baik untuk teks yang panjang.
Cara susun atur:-
Headditetapkan dengan tag pemula \starttabulatehead dan berakhir dengan tag \stoptabulatehead\placetable untuk kapsyen hanya boleh diletakkan selepas \stoptabulatehead dan sebelum \starttabulate. Jika tidak, ralat akan dipaparkan dan proses penyusunan dokumen
ConTeXtmenjadi gagal\NC untuk membuat kolum baru (new column or new cell)
\NN untuk menambah kolum/sel matematik baru
\NR bagi membuat baris baru (new row)
\NB memulakan baris baru sebagai blok untuk mengelakkan page daripada putus di dalam blok tersebut
\TB (Table Blank) menambah beberapa ruang secara menegak di antara baris
\VL untuk garisan menegak
Pilihan-pilihan untuk garisan mendatar:
- \HL: untuk garis mendatar standard
- \FL: garisan pertama
- \ML: garisan tengah
- \LL: garisan bawah
- \LL dan \TL: garisan bawah
- \BL: garisan terakhir
- \HL: untuk garis mendatar standard
Extreme Table
bash\setuppapersize[A4][A4] %http://wiki.contextgarden.net/Detailed_Example
\setuplayout[topspace=1in,backspace=1in,header=24pt,headerdistance=3em,footerdistance=0em,height=middle,width=middle]
% uncomment the next line to see the layout
% \showframe
% headers and footers
%\setupheader[style=\it]
%\setupheadertexts[\rightaligned{Produced in \ConTeXt}]
\setupheadertexts[Extreme Table\hfill \it{Produced in \ConTeXt}]
%\setupfooter[style=\it]
%\setupfootertexts[\rightaligned{Produced in \ConTeXt}] %http://wiki.contextgarden.net/Right_and_left
%\setuppagenumbering[location=empty] %http://wiki.contextgarden.net/Command/setuppagenumbering
\setuppagenumbering[location={}, style=bold]
\setupbackgrounds[header][text][bottomframe=on] %https://tex.stackexchange.com/questions/110701/draw-a-line-under-the-headertext-in-context
%\setupxtable[mytable][leftmargindistance=.5em,align=lohi,frame=off] %https://tex.stackexchange.com/questions/267221/context-xtable-split-to-multiple-pages
\setupxtable[mytable][align=lohi,frame=off]
%\setupxtable[align=lohi,frame=off,option={stretch,width}]
\setupxtable[r1c1][frame=on,align={middle,lohi},width=3.5cm]
\setupxtable[r1c2][topframe=on,bottomframe=on,align={middle,lohi},width=4.5cm]
\setupxtable[r1c3][topframe=on,bottomframe=on,leftframe=on,loffset=1.5mm,width=5cm]
\setupxtable[r1c4][frame=on,align={middle,lohi},width=3cm]
\setupxtable[r2c1][leftframe=on,bottomframe=on,align={lohi,middle}]
\setupxtable[r2c2][leftframe=on,bottomframe=on,rightframe=on,align={lohi,middle}]
\setupxtable[r2c3][rightframe=on,toffset=.75mm,loffset=1.5mm]
\setupxtable[r2c4][bottomframe=on,rightframe=on,align={lohi,middle}]
\setupxtable[r3c3][rightframe=on,loffset=1.5mm]
\setupxtable[r4c3][bottomframe=on,rightframe=on,loffset=1.5mm]
\setupcaptions[location=top]
\startbuffer[table]
\startxtable[mytable]
\startxtablehead
\startxrow
\startxcell[r1c1] \bold{No. Kad Pengenalan} \stopxcell
\startxcell[r1c2] \bold{Peringkat Pengajian} \stopxcell
\startxcell[r1c3] \bold{Rujukan JOMPAY} \stopxcell
\startxcell[r1c4] \bold{No. Pinjaman} \stopxcell
\stopxrow
\stopxtablehead
\startxtablebody
\startxrow
\startxcell[r2c1][ny=4] ************ \stopxcell
\startxcell[r2c2][ny=4] Ijazah Pertama Sepenuh Masa \stopxcell
\startxcell[r2c3] Biller Code: ***** \stopxcell
\startxcell[r2c4][ny=4] ****** \stopxcell
\stopxrow
\startxrow
\startxcell[r3c3] Ref-1: 211************7 \stopxcell
\stopxrow
\startxrow
\startxcell[r4c3] Ref-2: 019******* \stopxcell
\stopxrow
\stopxtablebody
\stopxtable
\stopbuffer
\starttext
\placetable[here,split]{BAYARAN BALIK PTPTN UJRAH - JOMPAY}{
\getbuffer[table]
}
\stoptextPengeluaran:

Keterangan: Alternatif untuk natural table dan merupakan kaedah paling fleksibel tetapi rumit. Boleh membuat tetapan padding melalui offset, toffset, loffset, roffset dan boffset serta wrap teks secara automatik.
Cara susun atur:-
- Buat tetapan terlebih dahulu (predefine) untuk table yang akan dicipta dengan
\setupxtable:↴\setupxtable[name/tag][settings]
- [name/tag]: Nama atau tanda yang ditakrifkan untuk digunakan ketika membuat table
- [settings]: Tetapan sama seperti yang didapati pada Natural Table di atas.
- [name/tag]: Nama atau tanda yang ditakrifkan untuk digunakan ketika membuat table
Table dibuat dengan tag pemula \startxtable[nama/tanda] dan berakhir dengan \stopxtable
Headditetapkan dengan \startxtablehead sebagai permulaan dan berakhir dengan tag \stopxtableheadBodyditetapkan dengan \startxtablebody dan \stopxtablebodyBaris dan kolum masing-masing dimulakan dengan \startxrow & \stopxrow serta \startxcell & \stopxcell
Berbeza dengan
Natural Table, gabungan baris dan kolum dibuat dengan tetapan [ny=#] (untuk baris) dan [nx=#] (untuk kolum)
Melihat kepada contoh-contoh di atas, objektif menghasilkan dokumen boleh dicapai dengan menggunakan kedua-dua sistem; baik LaTeX mahupun ConTeXt. Namun, memilih untuk menggunakan yang mana satu di antara keduanya mungkin bergantung kepada hasil yang bagaimana dimahukan oleh pengguna. Atau mungkin kaedah mana yang lebih memudahkan. Atau mungkin juga faktor fleksibiliti memainkan peranan dalam pemilihan.
Who knows? It is up to the user. Lihat pos saya selepas ini yang bakal membincangkan cara mengautomasi penyusunan dokumen yang dihasilkan melalui ConTeXt.
- Headers and Footers (untuk LaTeX)
- Natural Table
- Tabulate
- Extreme Table
