bersama catatan peribadi & teknikalnya.

Mengautomasi Penyusunan Dokumen ConTeXt: Bahagian 1

dari Vim


geeky stuff
#context | #automasi | #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 baris perintah texexec filename.tex untuk menjalankan program MkII dan untuk program MkIV, kita gunakan baris perintah 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.

  1. 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 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?

  2. 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 baris perintah '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.


    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 dokumen ConTeXt melalui Vim.


Kali terakhir dikemaskini:
Top