|
@@ -1288,7 +1288,27 @@ which are given by `org-latex-engraved-preamble' and
|
|
|
(let* ((engraved-options
|
|
|
(plist-get info :latex-engraved-options))
|
|
|
(engraved-preamble (plist-get info :latex-engraved-preamble))
|
|
|
- (engraved-theme (plist-get info :latex-engraved-theme)))
|
|
|
+ (engraved-theme (plist-get info :latex-engraved-theme))
|
|
|
+ (engraved-themes
|
|
|
+ (cl-delete-duplicates
|
|
|
+ (org-element-map
|
|
|
+ (plist-get info :parse-tree)
|
|
|
+ '(src-block inline-src-block)
|
|
|
+ (lambda (src)
|
|
|
+ (plist-get
|
|
|
+ (org-export-read-attribute :attr_latex src)
|
|
|
+ :engraved-theme))
|
|
|
+ info)))
|
|
|
+ (gen-theme-spec
|
|
|
+ (lambda (theme)
|
|
|
+ (if (eq engrave-faces-latex-output-style 'preset)
|
|
|
+ (engrave-faces-latex-gen-preamble (when theme (intern theme)))
|
|
|
+ (engrave-faces-latex-gen-preamble-line
|
|
|
+ 'default
|
|
|
+ (alist-get 'default
|
|
|
+ (if theme
|
|
|
+ (engrave-faces-get-theme (intern theme))
|
|
|
+ engrave-faces-current-preset-style)))))))
|
|
|
(when (string-match "^[ \t]*\\[FVEXTRA-SETUP\\][ \t]*\n?" engraved-preamble)
|
|
|
(setq engraved-preamble
|
|
|
(replace-match
|
|
@@ -1318,10 +1338,31 @@ which are given by `org-latex-engraved-preamble' and
|
|
|
(concat
|
|
|
"\n% Setup for code blocks [1/2]\n\n"
|
|
|
engraved-preamble
|
|
|
- "\n\n% Setup for code blocks [2/2]: syntax highlighting colors\n"
|
|
|
+ "\n\n% Setup for code blocks [2/2]: syntax highlighting colors\n\n"
|
|
|
(if (require 'engrave-faces-latex nil t)
|
|
|
- (engrave-faces-latex-gen-preamble
|
|
|
- (when engraved-theme (intern engraved-theme)))
|
|
|
+ (if engraved-themes
|
|
|
+ (concat
|
|
|
+ (mapconcat
|
|
|
+ (lambda (theme)
|
|
|
+ (format
|
|
|
+ "\n\\newcommand{\\engravedtheme%s}{%%\n%s\n}"
|
|
|
+ (replace-regexp-in-string "[^A-Za-z]" "" theme)
|
|
|
+ (replace-regexp-in-string
|
|
|
+ "newcommand" "renewcommand"
|
|
|
+ (replace-regexp-in-string
|
|
|
+ "#" "##"
|
|
|
+ (funcall gen-theme-spec theme)))))
|
|
|
+ engraved-themes
|
|
|
+ "\n")
|
|
|
+ "\n\n"
|
|
|
+ (cond
|
|
|
+ ((memq engraved-theme engraved-themes)
|
|
|
+ (concat "\\engravedtheme"
|
|
|
+ (replace-regexp-in-string
|
|
|
+ "[^A-Za-z]" "" engraved-theme)
|
|
|
+ "\n"))
|
|
|
+ (t (funcall gen-theme-spec engraved-theme))))
|
|
|
+ (funcall gen-theme-spec engraved-theme))
|
|
|
(message "Cannot engrave source blocks. Consider installing `engrave-faces'.")
|
|
|
"% WARNING syntax highlighting unavailible as engrave-faces-latex was missing.\n")
|
|
|
"\n")
|
|
@@ -2359,10 +2400,11 @@ INFO, CODE, and LANG are provided by `org-latex-inline-src-block'."
|
|
|
mint-lang
|
|
|
code)))
|
|
|
|
|
|
-(defun org-latex-inline-src-block--engraved (_info code lang)
|
|
|
+(defun org-latex-inline-src-block--engraved (info code lang)
|
|
|
"Transcode an inline src block's content from Org to LaTeX, using engrave-faces.
|
|
|
INFO, CODE, and LANG are provided by `org-latex-inline-src-block'."
|
|
|
- (format "\\Verb{%s}" (org-latex-src--engrave-code code lang)))
|
|
|
+ (org-latex-src--engrave-code
|
|
|
+ code lang nil (plist-get info :latex-engraved-options) t))
|
|
|
|
|
|
(defun org-latex-inline-src-block--listings (info code lang)
|
|
|
"Transcode an inline src block's content from Org to LaTeX, using lstlistings.
|
|
@@ -3347,13 +3389,25 @@ and FLOAT are extracted from SRC-BLOCK and INFO in `org-latex-src-block'."
|
|
|
;; Return value.
|
|
|
(format float-env body)))
|
|
|
|
|
|
-(defun org-latex-src--engrave-code (content lang)
|
|
|
- "Engrave CONTENT to LaTeX in a LANG-mode buffer, and give the result."
|
|
|
+(defun org-latex-src--engrave-code (content lang &optional theme options inline)
|
|
|
+ "Engrave CONTENT to LaTeX in a LANG-mode buffer, and give the result.
|
|
|
+When the THEME symbol is non-nil, that theme will be used.
|
|
|
+
|
|
|
+When INLINE is nil, a Verbatim environment wrapped in a Code
|
|
|
+environment will be used. When t, a Verb command will be used.
|
|
|
+
|
|
|
+When OPTIONS is provided, as either a string or list of key-value
|
|
|
+pairs accepted by `org-latex--make-option-string', it is passed
|
|
|
+to the Verbatim environment or Verb command."
|
|
|
(if (require 'engrave-faces-latex nil t)
|
|
|
(let* ((lang-mode (and lang (org-src-get-lang-mode lang)))
|
|
|
+ (engrave-faces-current-preset-style
|
|
|
+ (if theme
|
|
|
+ (engrave-faces-get-theme theme)
|
|
|
+ engrave-faces-current-preset-style))
|
|
|
(engraved-buffer
|
|
|
(with-temp-buffer
|
|
|
- (insert content)
|
|
|
+ (insert (string-trim-right content "\n"))
|
|
|
(when lang-mode
|
|
|
(if (functionp lang-mode)
|
|
|
(funcall lang-mode)
|
|
@@ -3362,9 +3416,27 @@ and FLOAT are extracted from SRC-BLOCK and INFO in `org-latex-src-block'."
|
|
|
(engrave-faces-latex-buffer)))
|
|
|
(engraved-code
|
|
|
(with-current-buffer engraved-buffer
|
|
|
- (buffer-string))))
|
|
|
+ (buffer-string)))
|
|
|
+ (engraved-options
|
|
|
+ (when options
|
|
|
+ (concat "["
|
|
|
+ (if (listp options)
|
|
|
+ (org-latex--make-option-string options)
|
|
|
+ options)
|
|
|
+ "]")))
|
|
|
+ (engraved-wrapped
|
|
|
+ (if inline
|
|
|
+ (concat "\\Verb" engraved-options "{" engraved-code "}")
|
|
|
+ (concat "\\begin{Code}\n\\begin{Verbatim}" engraved-options "\n"
|
|
|
+ engraved-code "\n\\end{Verbatim}\n\\end{Code}"))))
|
|
|
(kill-buffer engraved-buffer)
|
|
|
- engraved-code)
|
|
|
+ (if theme
|
|
|
+ (concat "{\\engravedtheme"
|
|
|
+ (replace-regexp-in-string "[^A-Za-z]" ""
|
|
|
+ (symbol-name theme))
|
|
|
+ engraved-wrapped
|
|
|
+ "}")
|
|
|
+ engraved-wrapped))
|
|
|
(user-error "Cannot engrave code as `engrave-faces-latex' is unavailible.")))
|
|
|
|
|
|
(cl-defun org-latex-src-block--engraved
|
|
@@ -3392,7 +3464,15 @@ and FLOAT are extracted from SRC-BLOCK and INFO in `org-latex-src-block'."
|
|
|
placement)
|
|
|
"%s\n\\end{listing}"))
|
|
|
(t "%s")))
|
|
|
- (options (plist-get info :latex-engraved-options))
|
|
|
+ (options
|
|
|
+ (let ((engraved-options (plist-get info :latex-engraved-options))
|
|
|
+ (local-options (plist-get attributes :options)))
|
|
|
+ (append
|
|
|
+ (when (and num-start (not (assoc "linenos" engraved-options)))
|
|
|
+ `(("linenos")
|
|
|
+ ("firstnumber" ,(number-to-string (1+ num-start)))))
|
|
|
+ (and local-options (list local-options)))))
|
|
|
+ (engraved-theme (plist-get attributes :engraved-theme))
|
|
|
(content
|
|
|
(let* ((code-info (org-export-unravel-code src-block))
|
|
|
(max-width
|
|
@@ -3414,18 +3494,10 @@ and FLOAT are extracted from SRC-BLOCK and INFO in `org-latex-src-block'."
|
|
|
(format "(%s)" ref)))))
|
|
|
nil (and retain-labels (cdr code-info)))))
|
|
|
(body
|
|
|
- (format
|
|
|
- "\\begin{Code}\n\\begin{Verbatim}[%s]\n%s\\end{Verbatim}\n\\end{Code}"
|
|
|
- ;; Options.
|
|
|
- (concat
|
|
|
- (org-latex--make-option-string
|
|
|
- (append
|
|
|
- (when (and num-start (not (assoc "linenos" options)))
|
|
|
- `(("linenos")
|
|
|
- ("firstnumber" ,(number-to-string (1+ num-start)))))
|
|
|
- (let ((local-options (plist-get attributes :options)))
|
|
|
- (and local-options (list local-options))))))
|
|
|
- (org-latex-src--engrave-code content lang))))
|
|
|
+ (org-latex-src--engrave-code
|
|
|
+ content lang
|
|
|
+ (when engraved-theme (intern engraved-theme))
|
|
|
+ options)))
|
|
|
(format float-env body)))
|
|
|
|
|
|
(cl-defun org-latex-src-block--listings
|