3

テキスト エディタとして Vim を使用しており、スライド プレゼンテーション ツールとして beamer が非常に気に入っています。ただし、大きなビーマー プレゼンテーションのコンパイルには、少し時間がかかる場合があります (おそらく 10 秒または 20 秒)。通常の LaTeX ドキュメントの場合、この時間は通常は問題ありません。コンテンツが機能することが多いからです。ビーマー スライドでは、テキストがスライドにどの程度収まるかについて問題が発生することがあります。これは、スライドにグラフィックやテキストなどのより複雑なレイアウトが含まれる場合にも当てはまります。

Vim を使用して、アクティブなスライドを PDF としてコンパイルするだけのショートカット コマンドを設定したいと思います (関連するframe環境の間にあるカーソルによって定義されます)。

ドキュメントのプリアンブルとその他のいくつかの機能が、スライドの正確な書式設定に影響を与える可能性があることを認識しています。ただし、概算で十分だと思います。おそらく、プリアンブルとアクティブ スライドをコンパイルするだけで十分でしょう。

どんな提案でも最も役に立ちます。

4

2 に答える 2

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プレゼンテーションの作成でうまくいきました.

于 2011-09-19T16:30:11.120 に答える
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
于 2011-08-06T07:08:55.213 に答える