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
.
Untuk pemasangan, sila rujuk laman web rasmi [PRAGMA Advanced Document Engineering].
Arahan yang digunakan untuk menyusun fail .tex
dan menghasilkan dokumen PDF adalah,
bash
context filename.tex
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
:-VimL
" 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 adalah mirip kaedah yang digunakan oleh plugin
VimTeX
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 plugin
VimTex
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 dokumen
ConTeXt
.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
:-VimL
" 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 dokumen
ConTeXt
melalui Vim.- F9 untuk mengkompilasi dokumen ConTeXt