bersama catatan peribadi & teknikalnya.

ConTeXt vs LaTeX

Sebuah perbandingan


geeky stuff
#context | #latex

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:

\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}
Merupakan table asas. Wrap text dalam penggunaan table asas seperti ini biasanya memberikan hasil yang tidak cantik. Namun begitu, penggunaan pakej minipage mampu memberikan keputusan yang baik seperti yang saya gunakan ketika menghasilkan resume.

Untuk ConTeXt pula, terdapat tiga cara untuk membuat table;
  1. Natural Table
    \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
    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 \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) dengan middle atau/dan secara menegak (vertically) dengan lohi.
    • Table dibuat dengan tag pemula \bTABLE dan berakhir dengan \eTABLE
    • Head ditetapkan dengan \bTABLEhead dan \bTH sebagai permulaan serta berakhir dengan tag \eTABLEhead dan \eTH
    • Body 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
    \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
    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
  3. Extreme Table
    \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
    Alternatif untuk natural table dan merupakan kaedah paling fleksibel tetapi rumit. Boleh membuat tetapan padding melalui offset, toffset, loffset, roffset dan boffset serta me-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.
    • Table dibuat dengan tag pemula \startxtable[nama/tanda] dan berakhir dengan \stopxtable
    • Head ditetapkan dengan \startxtablehead sebagai permulaan dan berakhir dengan tag \stopxtablehead
    • Body ditetapkan dengan \startxtablebody dan \stopxtablebody
    • Baris 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.

Kali terakhir dikemaskini:
Top