Seperti yang dijanjikan, di dalam tulisan kali ini saya bincangkan cara untuk menyusun dokumen ConTeXt
dengan menggunakan aplikasi penyunting fail kegemaran saya, Vim
dan juga pembaca pdf Zathura
.
Tetapi sebelum itu, kita mulakan dengan langkah pertamalah ya? Iaitu:
ConTeXt
sememangnya sudah termasuk di dalam kumpulan pakej berkenaan.ConTeXt
.Perlu difahami dahulu, bahawa terdapat dua program untuk menjalankan ConTeXt
; Mark II (MkII) dan Mark IV (MkIV).
Kita gunakan perintah baris texexec filename.tex
untuk menjalankan program MkII
dan untuk program MkIV
, kita gunakan arahan context filename.tex
.
Kedua-dua program ini adalah berbeza. Saya tidak akan sentuh tentang sejauh mana perbezaannya. Bacaan lanjut boleh didapati di halaman [MkIV Differences] dan juga [Mark IV].
Saya cuma mahu nyatakan bahawa saya gunakan program Mark IV
kerana program ini aktif dibangunkan dan memiliki ciri-ciri yang lebih terkini.
ConTeXt
.Terdapat dua kaedah untuk tujuan ini; [1] Tanpa Makefile dan [2] Dengan Makefile.
.vimrc
atau .vimrc.local
:-" Tekan kekunci <mapleader>tt untuk kemaskini dan kompilasi dokumen ConTeXt "
nnoremap <buffer> <silent> <leader>tt :<c-u>update<cr>:ConTeXt<cr>
" Tekan kekunci <mapleader>tc untuk memadam fail-fail tambahan yang dijana ketika proses kompilasi kecuali fail PDF "
fun! ConTeXtClean()
let l:currdir = expand("%:p:h")
let l:tmpdirs = ['out'] " Temporary directories
let l:suffixes = ['aux', 'bbl', 'blg', 'fls', 'log', 'tuc', 'tua', 'synctex.gz'] " Suffixes of temporary files
for ff in glob(l:currdir . '/*.{' . join(l:suffixes, ',') . '}', 1, 1)
call delete(ff)
endfor
for dd in l:tmpdirs
let l:subdir = l:currdir . '/' . dd
if isdirectory(l:subdir)
for ff in glob(l:subdir . '/*.{' . join(l:suffixes, ',') . '}', 1, 1)
call delete(ff)
endfor
endif
call delete(l:subdir) " Delete directory (only if empty)
endfor
echomsg "Aux files removed"
endf
"mapped-to:
nnoremap <silent><buffer> <leader>tc :<c-u>call ConTeXtClean()<cr>
" Tekan kekunci <mapleader>tC untuk memadam semua fail tambahan yang dijana ketika proses kompilasi termasuk fail PDF "
fun! ConTeXtCleanall()
let l:currdir = expand("%:p:h")
let l:tmpdirs = ['out'] " Temporary directories
let l:suffixes = ['aux', 'bbl', 'blg', 'fls', 'log', 'tuc', 'pdf', 'tua', 'synctex.gz'] " Suffixes of temporary files
for ff in glob(l:currdir . '/*.{' . join(l:suffixes, ',') . '}', 1, 1)
call delete(ff)
endfor
for dd in l:tmpdirs
let l:subdir = l:currdir . '/' . dd
if isdirectory(l:subdir)
for ff in glob(l:subdir . '/*.{' . join(l:suffixes, ',') . '}', 1, 1)
call delete(ff)
endfor
endif
call delete(l:subdir) " Delete directory (only if empty)
endfor
echomsg "All aux files removed"
endf
"mapped-to:
nnoremap <silent><buffer> <leader>tC :<c-u>call ConTeXtCleanall()<cr>
" Menyemak sebarang ralat yang diterima "
nnoremap <silent> ]q :<c-u><c-r>=v:count1<cr>cnext<cr>zz
nnoremap <silent> [q :<c-u><c-r>=v:count1<cr>cprevious<cr>zz
nnoremap <silent> ]Q :<c-u>clast<cr>zz
nnoremap <silent> [Q :<c-u>cfirst<cr>zz
"let g:context_synctex = 1
let g:context_extra_options = '--arrange --autopdf --nonstopmode'
Melalui konfigurasi vim
secara langsung di atas, kita hanya perlu menekan kekunci ‘mapleader
(selalunya kekunci tanda koma, bergantung kepada tetapan yang dibuat melalui fail .vimrc) t
+ t
’ untuk mengkompilasi dokumen.
Konfigurasi di atas mirip kaedah yang digunakan oleh plugin VimTeX
tetapi kekurangan satu kemudahan, iaitu tidak memaparkan pembaca PDF secara automatik apabila menjalankan kompilasi dari dalam Vim
tanpa mengganggu akses secara langsung kepada vim itu sendiri.
Saya fikir, mungkin jika sekiranya saya ada masa dan terlebih rajin nanti, saya boleh mengkaji plugin VimTex
untuk melihat bagaimana pencipta plugin tersebut melahirkan fungsi ini dan bereksperimen dengannya. Mana tahu berjaya, kan?
ConTeXt
.make
' di terminal. Pastikan langkah ini dijalankan di dalam direktori yang mengandungi fail .tex
dan juga Makefile
tersebut.Namun, ada cara yang lebih mudah untuk diaplikasikan, iaitu dengan mengikat arahan-arahan dalam proses penyusunan kepada kekunci yang boleh digunakan dari penyunting teks vim
.
.vimrc
atau .vimrc.local
:-" map ":make" to the F9 key
imap <F9> <ESC>:exe "lcd" fnameescape(expand("%:p:h"))<CR>:make<CR>
nmap <F9> :exe "lcd" fnameescape(expand("%:p:h"))<CR>:make<CR>
"map ":make view" to the F10 key
imap <F10> <ESC>:exe "lcd" fnameescape(expand("%:p:h"))<CR>:make view<CR>
nmap <F10> :exe "lcd" fnameescape(expand("%:p:h"))<CR>:make view<CR>
"map ":make clean" to the F11 key
imap <F11 <ESC>:exe "lcd" fnameescape(expand("%:p:h"))<CR>:make clean<CR>
nmap <F11> :exe "lcd" fnameescape(expand("%:p:h"))<CR>:make clean<CR>
"map ":make cleanall" to the F12 key
imap <F12> <ESC>:exe "lcd" fnameescape(expand("%:p:h"))<CR>:make cleanall<CR>
nmap <F12> :exe "lcd" fnameescape(expand("%:p:h"))<CR>:make cleanall<CR>
Dengan konfigurasi di atas, kita boleh menekan kekunci:-
ConTeXt
melalui Vim.