Emacs: si latexmk termina bien, entonces muestra el pdf, de lo contrario, muestra los errores

¿Podría alguien darme la mano con el paso entre elprimero start-process y elsegundo start-process. lossegundo start-process que muestra el archivo pdf debe ejecutarseonly if laprimero start-process acabadossin errores. Probablemente haya algún tipo de código de salida exitoso que pueda ser detectado, pero necesitaría ayuda, por favor.

Estoy abierto a sugerencias sobre la mejor manera de determinar si elprimero start-process Terminado sin errores. Un método sería mirar eloutput búfer para determinar si la última línea es igual a "Procesoprocess terminado ". Hacer el archivo * .pdf puede tomar algunossegundos incluso si es sin errores, y lasegundo start-process falla si comienza demasiado temprano. Sit-for no es la mejor opción, ya que lasegundo start-process debe ser abortado si elprimero start-process No se completó correctamente. Generando eloutput el búfer también toma un par de segundos, por lo que revisar la última línea en el búfer también tendría que esperar hasta queprimero start-process acabados Sin embargo, detectar un código de salida exitoso (si tal cosa existe) sería mejor que buscar un búfer de salida para una cadena igual. . . .

Para tu información: El .latexmkrc$pdflatex La línea de código coloca una copia del * .pdf en el directorio de trabajo y el .latexmkrc$out_dir línea de código pone todos los archivos auxiliares en el/tmp carpeta. Esto es necesario porque Tex-Live para OSX no es compatible$aux_dir. El resultado es un directorio de trabajo limpio que contiene solo archivos * .tex y * .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)
  ;;  )
    ))

EDITAR: Una solución de trabajo basada en el concepto descrito por Francesco en la respuesta a continuación está disponible en un tema relacionado:https://tex.stackexchange.com/a/156617/26911

Respuestas a la pregunta(1)

Su respuesta a la pregunta