Little scripts to aid the grading process
(defun grading-help ()
  "Help set things up."
  (interactive)
  (setq grading-papers-dir default-directory)
  (setq grading-scores-dir
        (expand-file-name
         "grades"
         (file-name-directory
          (directory-file-name
           default-directory))))
  (grading-preprocess)
  (setq grading-current-paper (cons (car grading-student-list) 0)))

(defun grading-merge ()
  "Merge the grading with the student paper."
  (interactive)
  (let ((result-dir
         (expand-file-name
          "results"
          (file-name-directory
           (directory-file-name
            grading-scores-dir)))))
    (mapc
     (lambda (name)
       (let ((student-paper
              (directory-files
               grading-papers-dir t
               (rx-to-string bos (eval name) (1+ any) ".pdf" eos) t 1)
              ;; (expand-file-name
              ;;  (concat name ".pdf")
              ;;  grading-papers-dir)
              )
             (grade-paper
              (expand-file-name
               (concat name ".pdf")
               grading-scores-dir))
             (result-paper
              (expand-file-name
               (concat name ".pdf")
               result-dir)))
         (cond
          ((= (length student-paper) 1)
           (setq student-paper (car student-paper)))
          ((user-error "Cannot find paper for %s" name)))
         (cond
          ((and (file-exists-p grade-paper)
                (not (file-exists-p result-paper)))
           (start-process
            (format "merge-%s" name)
            (get-buffer-create
             (format "*grading-merge %s*" name))
            "gs"
            "-sDEVICE=pdfwrite" "-dCompatibilityLevel=1.4"
            "-dPDFSETTINGS=/default" "-dNOPAUSE" "-dQUIET" "-dBATCH"
            "-dDetectDuplicateImages" "-dCompressFonts=true" "-r150"
            (format "-sOutputFile=%s" result-paper)
            student-paper grade-paper result-paper)))))
     grading-student-list)))