Featured image of post GVIM下的LaTeX编译实时预览

GVIM下的LaTeX编译实时预览

Gvim+LaTeX+Okular

说明

本方案参考了StackExchange Answer

1. LaTeX编译时打开SyncTeX支持

编译时打开SyncTeX支持才能够在tex与PDF之间进行跳转。 例如使用pdflatex时:

1
pdflatex -synctex=1 file.tex

或者使用latexmk时:

1
latexmk -xelatex -synctex=1 file.tex

上述选项会生成一个file.synctex.gz文件。

2. Tex源码定位到PDF(Tex-to-PDF)

Okular支持打开PDF时指定到行位置,将下面的函数添加到~/.vimrc中:

对于vim-tex插件:

1
2
3
4
5
6
7
8
9
function! OkularFind()
    let this_tex_file = expand('%:p')
    let master_tex_file = b:vimtex.tex
    let pdf_file = fnamemodify(master_tex_file, ':p:r') . '.pdf'
    let line_number = line('.')
    let okular_cmd = 'okular --noraise --unique "' . pdf_file . '#src:' . line_number . ' ' . this_tex_file . '"'
    let s:okular_job = job_start(['/bin/bash', '-c', okular_cmd])
endfunction
nnoremap <leader>f :call OkularFind()<cr>

对于vim-latex插件:

1
2
3
4
5
6
7
8
9
function! OkularFind()
    let this_tex_file = expand('%:p')
    let master_tex_file = Tex_GetMainFileName()
    let pdf_file = fnamemodify(master_tex_file, ':p:r') . '.pdf'
    let line_number = line('.')
    let okular_cmd = 'okular --noraise --unique "' . pdf_file . '#src:' . line_number . ' ' . this_tex_file . '"'
    let s:okular_job = job_start(['/bin/bash', '-c', okular_cmd])
endfunction
nnoremap <leader>f :call OkularFind()<cr>

其中,二者的区别是,对于多文件的项目如何找到Tex项目的主文件:

1
2
3
4
# vim-tex
let master_tex_file = b:vimtex.tex
# vim-latex
let master_tex_file = Tex_GetMainFileName()

gvim下将光标移动到想要预览的内容,通过\f来打开Okular并指定到要预览的内容。

3. PDF定位到Tex源码(PDF-To-Tex)

Okular中设置以下:

  1. 设置 - Settings
  2. 配置Okular - Configure Okular
  3. 编辑器 - Editor
  4. 选择自定义文本编辑器 - Custom Text Editor
  5. 在命令框中填入下列命令 - Input the following command
    1
    
    gvim --remote +%l %f
    

在浏览模式下,使用快捷键Shift+鼠标左键单击想要查看源码的内容,即可跳转到相应的Tex源码文件位置中。

Licensed under CC BY-NC-SA 4.0
最后更新于 Feb 01, 2024 00:00 UTC
使用 Hugo 构建
主题 StackJimmy 设计