emacs/layers.personal/orgtools/local/org-lsf-theme/org-lsf-theme.el

62 lines
2.9 KiB
EmacsLisp
Raw Normal View History

2018-04-07 10:54:04 +08:00
(defun org-lsf-gen-header (docinfo)
(let ((my-org-doc-tags '(("THEME" . nil)
("REVIEWERS" . "docreviewers")
("VERSION" . "docversion")
("STATUS" . "docstatus")
("CIRCULATION" . "circulation")
("PROJDESCR" . "docdescription")
("CONTRIBUTORS" . "contributors")
("TYPE" . "doctype")
("PROJID" . "projid")
("PRODVER" . "productversion")
("PRODNAME" . "productname")
("PROJNAME" . "projname")
("PROJECT" . "docname")
("AUTHOR" . "docauthor"))))
(concat "\\usepackage{mythemes}\n"
(apply #'concat
(mapcar #'(lambda (tag)
(let ((tagname (car tag))
(cmd (cdr tag)))
(let ((v (cdr (assoc tagname docinfo))))
(when cmd
(concat "\\newcommand\\" cmd "{"
(if v v "") "}\n")))))
my-org-doc-tags))
"\\newcommand\\docupdate{\\today}\n")))
(defun org-lsf-gen-title (docinfo)
(let ((history ""))
(org-table-map-tables #'(lambda ()
(let ((tblname (my-org-get-table-name)))
(when (string= tblname "document-history")
(let ((table (buffer-substring-no-properties
(org-table-begin)
(org-table-end))))
(setq history
(let ((params (list
:tstart "\\begin{dochistory}"
:tend "\\end{dochistory}"
:lstart "" :lend "\\\\" :sep " & "
:efmt "%s\\,(%s)" :hline "\\hline")))
(orgtbl-to-generic (org-table-to-lisp table)
params)))))))
t)
(concat "\\ibmcoverpage\n\\projectinfo\n"
history "\n\\newpage\n")))
(defun org-lsf-put-info (info docinfo)
(plist-put info :latex-header-extra
(org-lsf-gen-header docinfo))
(plist-put info :latex-title-command
(org-lsf-gen-title docinfo))
info)
;;;###autoload
(defun org-lsf-theme-latex-template (content info docinfo)
(list (concat "\\newpage\n" content)
(org-lsf-put-info info docinfo)))
(provide 'org-lsf-theme)