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].

MENGKOMPILASI FAIL CONTEXT

Arahan yang digunakan untuk menyusun fail .tex dan menghasilkan dokumen PDF adalah,

bash
context filename.tex
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:-

    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 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 perintah baris ‘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:-

    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.


Kali terakhir dikemaskini:

Tentang Blog & Penulis

Topik perbincangan dalam blog ini merangkumi Linux & perisian sumber terbuka, Virtual Machine, serta Typesetting system.
Fokus semasa: Full Stack Development
Minat sampingan: Analisis Data
Bakat tersembunyi hamba: Menyanyi dan melukis.

Sumber dari Wallpaper Cave.