Скомпилируйте и отобразите PDF отдельного слайда в презентации проекта с помощью Vim - PullRequest
2 голосов
/ 05 августа 2011

Я использую Vim в качестве текстового редактора, и мне очень нравится beamer в качестве инструмента для слайд-презентации.Тем не менее, создание большой презентации проекта может занять немного времени (возможно, 10 или 20 секунд).Это время обычно подходит для нормального документа LaTeX, потому что контент часто просто работает.На слайдах с проектором иногда возникают проблемы с тем, насколько хорошо текст помещается на слайде.Это также верно, когда слайд включает в себя более сложную компоновку графики, текста и т. Д.

Я хотел бы настроить команду быстрого вызова с помощью Vim, которая просто компилирует активный слайд в виде PDF (какопределяется тем, что курсор находится между соответствующей средой frame.

Я понимаю, что преамбула и некоторые другие функции документа могут влиять на точное форматирование слайда. Однако я полагаю, что приближения будет достаточно.Возможно, было бы достаточно просто скомпилировать преамбулу и активный слайд.

Любые предложения будут наиболее полезны.

Ответы [ 2 ]

2 голосов
/ 19 сентября 2011

Вот небольшая функция, которая делает то, что вы хотите (копирует преамбулу и текущий кадр в отдельный файл и компилирует его):

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 голос
/ 06 августа 2011

Следующая функция должна создать новый временный файл только с преамбулой и текущим кадром.Он открывает файл в разрезе, и с этого момента вы сможете скомпилировать этот файл в одиночку и использовать любую программу, которую вы делаете для его просмотра.Я не знаю много о текс и даже меньше о бимере, поэтому вам, возможно, придется настроить его, чтобы лучше соответствовать вашим потребностям.

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