1 番目 start-process
と2 番目 の間 の ステップ で 誰か 手を 貸して くださいstart-process
. pdf ファイルを表示する2番目は、 エラーなしで最初の終了を実行する必要があります。おそらく何らかのタイプの成功した終了コードが見つかる可能性がありますが、その点で助けが必要です。start-process
only if
start-process
最初の start-process
ファイルがエラーなしで終了したかどうかを判断する最善の方法に関する提案を受け付けています。1 つの方法は、バッファーを調べて、最後の行が "Process finished"output
に等しいかどうかを判断することです。process
*.pdf ファイルの作成には、エラーがなくても数秒かかる場合があり、開始が早すぎると失敗します。 start-process
Sit-for は最適なオプションではありませ start-process
ん。バッファの生成にも数秒かかるため、バッファ内の最後の行を確認するには、最初の行まで待つ必要があります。 start-process
output
start-process
終わります。ただし、(そのようなものが存在する場合) 成功した終了コードを見つけることは、出力バッファーで文字列 equals を検索するよりも優れています。. . .
参考: コードの .latexmkrc$pdflatex
行は *.pdf のコピーを作業ディレクトリに戻し$out_dir
、コードの .latexmkrc 行はすべての補助ファイルを/tmp
フォルダーに入れます。OSX 用の Tex-Live は をサポートしていないため、これが必要です$aux_dir
。その結果、*.tex ファイルと *.pdf ファイルだけを含むクリーンな作業ディレクトリが作成されます。
(defun latexmk ()
".latexmkrc should contain the following entries -- without the backslashes:
$pdflatex .= ' && (cp \"%D\" \"%R.pdf\")';
$force_mode = 1;
$pdf_mode = 1;
$out_dir = '/tmp';"
(interactive)
(let* (
(process (file-name-nondirectory buffer-file-name))
(output (concat "*" (file-name-nondirectory buffer-file-name) "*") )
(latexmk "/usr/local/texlive/2012/texmf-dist/scripts/latexmk/latexmk.pl")
(arg-1 "-interaction=nonstopmode")
(arg-2 "-file-line-error")
(arg-3 "-synctex=1")
(arg-4 "-r")
(arg-5 "/Users/HOME/.0.data/.0.emacs/.latexmkrc")
(pdf-file (concat "/tmp/" (car (split-string
(file-name-nondirectory buffer-file-name) "\\.")) ".pdf"))
(line (format "%d" (line-number-at-pos)))
(skim "/Applications/Skim.app/Contents/SharedSupport/displayline") )
(if (buffer-modified-p)
(save-buffer))
(start-process process output latexmk arg-1 arg-2 arg-3 arg-4 arg-5 buffer-file-name)
;; (if (last line of output buffer is "Process 'process' finished")
(start-process "displayline" nil skim "-b" line pdf-file buffer-file-name)
(switch-to-buffer output)
;; )
))
編集:フランチェスコが以下の回答で概説した概念に基づく実用的なソリューションは、関連スレッドで利用できます: https://tex.stackexchange.com/a/156617/26911