我使用Vim作为我的文本编辑器,我非常喜欢beamer作为幻灯片演示工具。 但是,编译大型投影仪演示文稿可能需要一些时间(可能需要10或20秒)。 对于普通的LaTeX文档,这个时间通常很好,因为内容通常只是起作用。在beamer幻灯片中,有时会出现文本在幻灯片上的适应性问题。当幻灯片涉及更复杂的图形,文本等布局时,情况也是如此。
我想使用Vim设置一个快捷命令,它只是将活动幻灯片编译为PDF(由光标定义在相关的frame
环境之间。
我意识到文档的序言和其他几个功能会影响幻灯片的确切格式。但是,我认为近似就足够了。也许仅仅编译序言和活动幻灯片就足够了。
任何建议都会有所帮助。
答案 0 :(得分:2)
这是一个小功能,可以执行您想要的操作(将前导码和当前帧复制到单独的文件中并编译它):
function! CompileCurrentSlide()
let tmpfile = "current-slide.tex"
silent! exe '1,/\s*\\begin{document}/w! '.tmpfile
silent! exe '.+1?\\begin{frame}?,.-1/\\end{frame}/w! >> '.tmpfile
silent! exe '/\s*\\end{document}/w! >> '.tmpfile
silent! exe '!pdflatex -halt-on-error '.tmpfile.' >/dev/null'
endfunction
"
noremap <silent><buffer> zz :silent call <SID>CompileCurrentSlide()<CR>
按zz将编译光标所在的任何帧,并将输出放在“current-slide.pdf”中。您可以使用您想要的任何其他选项替换-halt-on-error。该脚本不会打开一个单独的窗口,就像上一个答案中的函数一样;你只需继续编辑主文件。我不是一个vim专家,所以可能有更好的方法来做到这一点,但上面在创建几个Beamer演示文稿时对我来说很好。
答案 1 :(得分:1)
以下函数应创建仅包含前导码和当前帧的新临时文件。它以分割方式打开文件,从那时起,您应该能够单独编译该文件并使用您执行的任何程序进行查看。我不太了解tex,甚至不太了解beamer,所以你可能需要调整它以更好地满足你的需求。
function! CompileBeamer()
" Collect the lines for the current frame:
let frame = []
if searchpair('\\begin{frame}', '', '\\end{frame}', 'bW') > 0
let frame = s:LinesUpto('\\end{frame}')
call add(frame, getline('.')) " add the end tag as well
endif
" Go to the start, and collect all the lines up to the first "frame" item.
call cursor(1, 1)
let preamble = s:LinesUpto('\\begin{frame}')
let body = preamble + frame
" Open up a temporary file and put the selected lines in it.
let filename = tempname().'.tex'
exe "split ".filename
call append(0, body)
set nomodified
endfunction
function! s:LinesUpto(pattern)
let line = getline('.')
let lines = []
while line !~ a:pattern && line('.') < line('$')
call add(lines, line)
call cursor(line('.') + 1, 1)
let line = getline('.')
endwhile
return lines
endfunction