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
;
1. 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/big
Pengeluaran:
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) denganmiddle
atau/dan secara menegak(vertically)
denganlohi
.
- [r]: untuk baris (row)
Table dibuat dengan tag pemula \bTABLE dan berakhir dengan \eTABLE
Head
ditetapkan dengan \bTABLEhead dan \bTH sebagai permulaan serta berakhir dengan tag \eTABLEhead dan \eTHBody
ditetapkan dengan \bTABLEbody dan \eTABLEbody- Baris dan kolum masing-masing dimulakan dengan \bTR & \eTR serta \bTC & \eTC
- Gabungkan baris dengan [nr=#] dan kolum dengan [nc=#]
2. 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
\stoptext
Pengeluaran:
Keterangan: Kaedah ringkas untuk menghasilkan table
. Juga sukar untuk mendapatkan wrap
dengan baik untuk teks yang panjang.
Cara susun atur:-
Head
ditetapkan 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
ConTeXt
menjadi 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
3. 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]
}
\stoptext
Pengeluaran:
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
Head
ditetapkan dengan \startxtablehead sebagai permulaan dan berakhir dengan tag \stopxtableheadBody
ditetapkan 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