(defun make-times-table-sheet (count) (interactive "nTasks: ") (let ((ps-buf (generate-new-buffer "1x1.ps"))) (with-temp-buffer (insert ".ds CH\n") (insert ".MC 2cm\n") (dotimes (_ count) (insert ".EQ\n") (insert (format "%d times %d = __\n" (1+ (random 8)) (1+ (random 8)))) (insert ".EN\n")) (call-process-region (point-min) (point-max) "groff" nil ps-buf nil "-Tps" "-e" "-ms" "-P-pA4") (with-current-buffer ps-buf (doc-view-mode) (pop-to-buffer ps-buf)))))