Mengautomasi Penyusunan Dokumen ConTeXt: Bahagian 1
dari Vim
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:
PEMASANGAN
Dengan memasang [texlive-most], perisian
ConTeXt
sememangnya sudah termasuk di dalam kumpulan pakej berkenaan.MENGKOMPILASI FAIL CONTEXT
Baik, sekarang kita terus kepada cara mengkompilasi dokumen yang dihasilkan melalui
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.
AUTOMASIKAN PENYUSUNAN DOKUMEN CONTEXT DARI VIM
Jadi, saya teruskan dengan membincangkan cara untuk memudahkan proses mengkompilasi dokumen yang dihasilkan melalui
ConTeXt
.Terdapat dua kaedah untuk tujuan ini; [1] Tanpa Makefile dan [2] Dengan Makefile.
- Tanpa Makefile
Tambah kod-kod konfigurasi di bawah ke dalam fail.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 pluginVimTeX
tetapi kekurangan satu kemudahan, iaitu tidak memaparkan pembaca PDF secara automatik apabila menjalankan kompilasi dari dalamVim
tanpa mengganggu akses secara langsung kepada vim itu sendiri.
Saya fikir, mungkin jika sekiranya saya ada masa dan terlebih rajin nanti, saya boleh mengkaji pluginVimTex
untuk melihat bagaimana pencipta plugin tersebut melahirkan fungsi ini dan bereksperimen dengannya. Mana tahu berjaya, kan? - Dengan Makefile
Sila rujuk pada pautan yang disertakan ini untuk melihat contoh [Makefile] yang dibuat bagi menjalankan proses mengkompilasi dokumenConTeXt
.
Dengan fail ini, kita boleh mengkompilasi dokumen ConTeXt dengan menjalankan perintah baris 'make
' di terminal. Pastikan langkah ini dijalankan di dalam direktori yang mengandungi fail.tex
dan jugaMakefile
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
.
Tambah kod-kod konfigurasi di bawah ke dalam fail.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:-
- F9 untuk mengkompilasi dokumen ConTeXt
- F10 untuk melihat fail PDF yang dijana daripadanya
- F11 untuk memadam fail-fail janaan tambahan (kecuali fail PDF)
- F12 untuk memadam kesemua fail tambahan yang dijana termasuk fail PDF.
Kaedah ini perlu dijalankan ketika membuka dokumenConTeXt
melalui Vim.