2007-09-26 Bastien Guerry <bzg@altern.org>
* org-export-latex.el (org-export-latex-tables-verbatim): New function. (org-export-latex-remove-from-headlines): Name changed because of typo. (org-export-latex-quotation-marks-convention): Option removed. (org-export-latex-make-preamble): Handle the DATE option. (org-export-latex-cleaned-string): Now the only cleaning function, synched up with org.el. (org-export-latex-lists, org-export-latex-parse-list) (org-export-list-to-latex): New functions. 2007-09-26 Carsten Dominik <dominik@science.uva.nl> * org.el (org-kill-is-subtree-p): Use `org-outline-regexp'. (org-outline-regexp): New constant. (org-remember-handler): Throw error when the target file is not in org-mode. (org-cleaned-string-for-export): No longer call `org-export-latex-cleaned-string' with an argument. (org-get-tags): Returns now a list, not a string. (org-get-tags-string): New function. (org-archive-subtree): No need to split return of `org-get-tags'. (org-set-tags, org-entry-properties): Call `org-get-tags-string' instead of `org-get-tags'. (org-agenda-format-date): Renamed from `org-agenda-date-format'. (org-time-from-absolute, org-agenda-format-date-aligned): New functions. (org-compatible-face): New argument INHERITS. Inherit from this face if possible. (org-level-1, org-level-2, org-level-3, org-level-4) (org-level-5, org-level-6, org-level-7, org-level-8) (org-special-keyword, org-drawer, org-column, org-warning) (org-archived, org-todo, org-done, org-headline-done, org-table) (org-formula, org-code, org-agenda-structure) (org-scheduled-today, org-scheduled-previously) (org-upcoming-deadline, org-time-grid): Call `org-compatible-face' in the new way. (org-get-heading): New argument NO-TAGS. (org-fast-tag-selection-include-todo): Made defvar instead of defcustom, feature is not deprecated. (org-remember-store-without-prompt): New default value t. (org-todo-log-states): New variable. (org-set-regexps-and-options): #+TODO is an alias for SEQ_TODO. Compute the log states. (org-goto-map): More commands copied from global map. Also bind `org-occur'. (org-goto): Made into a general lookup command. (org-get-location): Complete rewrite. (org-goto-exit-command): New variable. (org-goto-selected-point): New variable. (org-goto-ret, org-goto-left, org-goto-right, org-goto-quit): Set the new variables. (org-paste-subtree): Whitespace insertion strategy revised. (org-remember-apply-template): Protect v-A from the possibility that v-a might be nil. (org-remember-handler): Insertion rules revised. (org-todo): Respect org-todo-log-states. (org-up-heading-safe): New function. (org-entry-get-with-inheritance): Use `org-up-heading-safe'. * org.texi: Change links to webpage and maintained email. (Remember): Promoted to Chapter, significant changes. (Fast access to TODO states): New section. (Faces for TODO keywords): New section. (Export options): Example for #+DATE. (Progress logging): Section moved.
This commit is contained in:
parent
62035afde2
commit
d509888517
4 changed files with 640 additions and 581 deletions
|
@ -1,3 +1,73 @@
|
|||
2007-09-26 Bastien Guerry <bzg@altern.org>
|
||||
|
||||
* org-export-latex.el (org-export-latex-tables-verbatim): New
|
||||
function.
|
||||
(org-export-latex-remove-from-headlines): Name changed because of
|
||||
typo.
|
||||
(org-export-latex-quotation-marks-convention): Option removed.
|
||||
(org-export-latex-make-preamble): Handle the DATE option.
|
||||
(org-export-latex-cleaned-string): Now the only cleaning function,
|
||||
synched up with org.el.
|
||||
(org-export-latex-lists, org-export-latex-parse-list)
|
||||
(org-export-list-to-latex): New functions.
|
||||
|
||||
|
||||
2007-09-26 Carsten Dominik <dominik@science.uva.nl>
|
||||
|
||||
* org.el (org-kill-is-subtree-p): Use `org-outline-regexp'.
|
||||
(org-outline-regexp): New constant.
|
||||
(org-remember-handler): Throw error when the target file is not in
|
||||
org-mode.
|
||||
(org-cleaned-string-for-export): No longer call
|
||||
`org-export-latex-cleaned-string' with an argument.
|
||||
(org-get-tags): Returns now a list, not a string.
|
||||
(org-get-tags-string): New function.
|
||||
(org-archive-subtree): No need to split return of `org-get-tags'.
|
||||
(org-set-tags, org-entry-properties): Call `org-get-tags-string'
|
||||
instead of `org-get-tags'.
|
||||
(org-agenda-format-date): Renamed from `org-agenda-date-format'.
|
||||
(org-time-from-absolute, org-agenda-format-date-aligned): New
|
||||
functions.
|
||||
(org-compatible-face): New argument INHERITS. Inherit from this
|
||||
face if possible.
|
||||
(org-level-1, org-level-2, org-level-3, org-level-4)
|
||||
(org-level-5, org-level-6, org-level-7, org-level-8)
|
||||
(org-special-keyword, org-drawer, org-column, org-warning)
|
||||
(org-archived, org-todo, org-done, org-headline-done, org-table)
|
||||
(org-formula, org-code, org-agenda-structure)
|
||||
(org-scheduled-today, org-scheduled-previously)
|
||||
(org-upcoming-deadline, org-time-grid): Call `org-compatible-face'
|
||||
in the new way.
|
||||
(org-get-heading): New argument NO-TAGS.
|
||||
(org-fast-tag-selection-include-todo): Made defvar instead of
|
||||
defcustom, feature is not deprecated.
|
||||
(org-remember-store-without-prompt): New default value t.
|
||||
(org-todo-log-states): New variable.
|
||||
(org-set-regexps-and-options): #+TODO is an alias for SEQ_TODO.
|
||||
Compute the log states.
|
||||
(org-goto-map): More commands copied from global map. Also bind
|
||||
`org-occur'.
|
||||
(org-goto): Made into a general lookup command.
|
||||
(org-get-location): Complete rewrite.
|
||||
(org-goto-exit-command): New variable.
|
||||
(org-goto-selected-point): New variable.
|
||||
(org-goto-ret, org-goto-left, org-goto-right, org-goto-quit): Set
|
||||
the new variables.
|
||||
(org-paste-subtree): Whitespace insertion strategy revised.
|
||||
(org-remember-apply-template): Protect v-A from the possibility
|
||||
that v-a might be nil.
|
||||
(org-remember-handler): Insertion rules revised.
|
||||
(org-todo): Respect org-todo-log-states.
|
||||
(org-up-heading-safe): New function.
|
||||
(org-entry-get-with-inheritance): Use `org-up-heading-safe'.
|
||||
|
||||
* org.texi: Change links to webpage and maintained email.
|
||||
(Remember): Promoted to Chapter, significant changes.
|
||||
(Fast access to TODO states): New section.
|
||||
(Faces for TODO keywords): New section.
|
||||
(Export options): Example for #+DATE.
|
||||
(Progress logging): Section moved.
|
||||
|
||||
2007-09-26 Dan Nicolaescu <dann@ics.uci.edu>
|
||||
|
||||
* progmodes/cc-cmds.el (c-indent-line-or-region): Only indent the
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
;;
|
||||
;; Author: Bastien Guerry <bzg AT altern DOT org>
|
||||
;; Keywords: org organizer latex export convert
|
||||
;; Version: $Id: org-export-latex.el,v 1.5 2007/09/07 20:16:45 johnw Exp $
|
||||
;; X-URL: <http://www.cognition.ens.fr/~guerry/u/org-export-latex.el>
|
||||
;; Homepage: http://www.cognition.ens.fr/~guerry/u/org-export-latex.el
|
||||
;; Version: 5.09
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
@ -52,6 +52,8 @@
|
|||
(defvar org-latex-all-targets-regexp nil)
|
||||
(defvar org-latex-add-level 0)
|
||||
(defvar org-latex-sectioning-depth 0)
|
||||
(defvar org-export-latex-list-beginning-re
|
||||
"^\\([ \t]*\\)\\([-+]\\|[0-9]+\\(?:\\.\\|)\\)\\) *?")
|
||||
|
||||
(defvar org-latex-special-string-regexps
|
||||
'(org-ts-regexp
|
||||
|
@ -99,11 +101,17 @@ The %s formatter will be replaced by the title of the section."
|
|||
:group 'org-export-latex
|
||||
:type 'string)
|
||||
|
||||
(defcustom org-export-latex-date-format nil
|
||||
(defcustom org-export-latex-date-format
|
||||
"%d %B %Y"
|
||||
"Format string for \\date{...}."
|
||||
:group 'org-export-latex
|
||||
:type 'string)
|
||||
|
||||
(defcustom org-export-latex-tables-verbatim nil
|
||||
"When non-nil, export tables as verbatim."
|
||||
:group 'org-export-latex
|
||||
:type 'boolean)
|
||||
|
||||
(defcustom org-export-latex-packages-alist nil
|
||||
"Alist of packages to be inserted in the preamble.
|
||||
Each cell is of the forma \( option . package \).
|
||||
|
@ -126,7 +134,7 @@ headline is mandatory)."
|
|||
(symbol :tag "Convert as descriptive list" description)
|
||||
(string :tag "Use a section string" :value "\\subparagraph{%s}")))
|
||||
|
||||
(defcustom org-export-latex-remove-from-headines
|
||||
(defcustom org-export-latex-remove-from-headlines
|
||||
'(:todo t :priority t :tags t)
|
||||
"A plist of keywords to remove from headlines.
|
||||
Non-nil means remove this keyword type from the headline.
|
||||
|
@ -135,13 +143,6 @@ Don't remove the keys, just change their values."
|
|||
:type 'plist
|
||||
:group 'org-export-latex)
|
||||
|
||||
(defcustom org-export-latex-quotation-marks-convention "en"
|
||||
"Convention for conversion of the quotation marks.
|
||||
This value is overriden by any infile language setup."
|
||||
:group 'org-export-latex
|
||||
:type '(choice (string :tag "english" "en")
|
||||
(string :tag "french" "fr")))
|
||||
|
||||
(defcustom org-export-latex-image-default-option "width=10em"
|
||||
"Default option for images."
|
||||
:group 'org-export-latex
|
||||
|
@ -155,7 +156,6 @@ This value is overriden by any infile language setup."
|
|||
;; FIXME Do we want this one?
|
||||
;; (defun org-export-as-latex-and-open (arg) ...)
|
||||
|
||||
|
||||
;;; Autoload functions:
|
||||
;;;###autoload
|
||||
(defun org-export-as-latex-batch ()
|
||||
|
@ -280,13 +280,12 @@ in a window. A non-interactive call will only retunr the buffer."
|
|||
(if region-p (region-beginning) (point-min))
|
||||
(if region-p (region-end) (point-max))))
|
||||
(string-for-export
|
||||
;; FIXME Use org-cleaned-string-for-export instead, only when
|
||||
;; everyone uses Org >5.04
|
||||
(org-latex-cleaned-string-for-export
|
||||
region :for-html nil
|
||||
:comments nil
|
||||
(org-cleaned-string-for-export
|
||||
region :emph-multiline t
|
||||
:for-LaTeX t
|
||||
:skip-before-1st-heading nil
|
||||
:comments nil
|
||||
:add-text text
|
||||
:skip-before-1st-heading skip
|
||||
:LaTeX-fragments nil)))
|
||||
(set-buffer buffer)
|
||||
(erase-buffer)
|
||||
|
@ -311,7 +310,7 @@ in a window. A non-interactive call will only retunr the buffer."
|
|||
(setq org-latex-add-level
|
||||
(if odd (1- (/ (1+ asters) 2)) (1- asters)))
|
||||
(org-export-latex-parse-global level odd))))
|
||||
|
||||
|
||||
(unless body-only (insert "\n\\end{document}"))
|
||||
(or to-buffer (save-buffer))
|
||||
(goto-char (point-min))
|
||||
|
@ -321,7 +320,6 @@ in a window. A non-interactive call will only retunr the buffer."
|
|||
(kill-buffer (current-buffer)))
|
||||
(current-buffer))))
|
||||
|
||||
|
||||
;;; Parsing functions:
|
||||
(defun org-export-latex-parse-global (level odd)
|
||||
"Parse the current buffer recursively, starting at LEVEL.
|
||||
|
@ -372,6 +370,52 @@ Return A list reflecting the document structure."
|
|||
(widen)))
|
||||
(list output))))
|
||||
|
||||
(defun org-export-latex-parse-list (&optional delete)
|
||||
"Parse the list at point.
|
||||
Return a list containing first level items as strings and
|
||||
sublevels as list of strings."
|
||||
(let ((start (point))
|
||||
;; Find the end of the list
|
||||
(end (save-excursion
|
||||
(catch 'exit
|
||||
(while (or (looking-at org-export-latex-list-beginning-re)
|
||||
(looking-at "^[ \t]+\\|^$"))
|
||||
(if (eq (point) (point-max))
|
||||
(throw 'exit (point-max)))
|
||||
(forward-line 1))) (point)))
|
||||
output itemsep)
|
||||
(while (re-search-forward org-export-latex-list-beginning-re end t)
|
||||
(setq itemsep (if (save-match-data
|
||||
(string-match "^[0-9]" (match-string 2)))
|
||||
"[0-9]+\\(?:\\.\\|)\\)" "[-+]"))
|
||||
(let* ((indent1 (match-string 1))
|
||||
(nextitem (save-excursion
|
||||
(save-match-data
|
||||
(or (and (re-search-forward
|
||||
(concat "^" indent1 itemsep " *?") end t)
|
||||
(match-beginning 0)) end))))
|
||||
(item (buffer-substring
|
||||
(point)
|
||||
(or (and (re-search-forward
|
||||
org-export-latex-list-beginning-re end t)
|
||||
(goto-char (match-beginning 0)))
|
||||
(goto-char end))))
|
||||
(nextindent (match-string 1))
|
||||
(item (org-trim item))
|
||||
(item (if (string-match "^\\[.+\\]" item)
|
||||
(replace-match "\\\\texttt{\\&}"
|
||||
t nil item) item)))
|
||||
(push item output)
|
||||
(when (> (length nextindent)
|
||||
(length indent1))
|
||||
(narrow-to-region (point) nextitem)
|
||||
(push (org-export-latex-parse-list) output)
|
||||
(widen))))
|
||||
(when delete (delete-region start end))
|
||||
(setq output (nreverse output))
|
||||
(push (if (string-match "^\\[0" itemsep)
|
||||
'ordered 'unordered) output)))
|
||||
|
||||
(defun org-export-latex-parse-content ()
|
||||
"Extract the content of a section."
|
||||
(let ((beg (point))
|
||||
|
@ -391,7 +435,6 @@ If ODD Is non-nil, assume subcontent only contains odd sections."
|
|||
nil ; subcontent is nil
|
||||
(org-export-latex-parse-global (+ (if odd 2 1) level) odd)))
|
||||
|
||||
|
||||
;;; Rendering functions:
|
||||
(defun org-export-latex-global (content)
|
||||
"Export CONTENT to LaTeX.
|
||||
|
@ -405,9 +448,10 @@ CONTENT is an element of the list produced by
|
|||
"Export the list SUBCONTENT to LaTeX.
|
||||
SUBCONTENT is an alist containing information about the headline
|
||||
and its content."
|
||||
(mapc (lambda(x) (org-export-latex-subcontent x)) subcontent))
|
||||
(let ((num (plist-get org-latex-options-plist :section-numbers)))
|
||||
(mapc (lambda(x) (org-export-latex-subcontent x num)) subcontent)))
|
||||
|
||||
(defun org-export-latex-subcontent (subcontent)
|
||||
(defun org-export-latex-subcontent (subcontent num)
|
||||
"Export each cell of SUBCONTENT to LaTeX."
|
||||
(let ((heading (org-export-latex-fontify-headline
|
||||
(cdr (assoc 'heading subcontent))))
|
||||
|
@ -415,8 +459,7 @@ and its content."
|
|||
org-latex-add-level))
|
||||
(occur (number-to-string (cdr (assoc 'occur subcontent))))
|
||||
(content (cdr (assoc 'content subcontent)))
|
||||
(subcontent (cadr (assoc 'subcontent subcontent)))
|
||||
(num (plist-get org-latex-options-plist :section-numbers)))
|
||||
(subcontent (cadr (assoc 'subcontent subcontent))))
|
||||
(cond
|
||||
;; Normal conversion
|
||||
((<= level org-latex-sectioning-depth)
|
||||
|
@ -475,49 +518,54 @@ EXT-PLIST is an optional additional plist."
|
|||
"Make the LaTeX preamble and return it as a string.
|
||||
Argument OPT-PLIST is the options plist for current buffer."
|
||||
(let ((toc (plist-get opt-plist :table-of-contents)))
|
||||
(format (concat org-export-latex-preamble
|
||||
"
|
||||
%s
|
||||
(concat (if (plist-get opt-plist :time-stamp-file)
|
||||
(format-time-string "% Created %Y-%m-%d %a %H:%M\n"))
|
||||
|
||||
\\begin{document}
|
||||
;; LaTeX custom preamble
|
||||
org-export-latex-preamble "\n"
|
||||
|
||||
\\title{%s}
|
||||
%s
|
||||
%s
|
||||
\\maketitle
|
||||
%s
|
||||
%s
|
||||
")
|
||||
(if org-export-latex-packages-alist
|
||||
(mapconcat (lambda(p)
|
||||
(if (equal "" (car p))
|
||||
(format "\\usepackage{%s}" (cadr p))
|
||||
(format "\\usepackage[%s]{%s}"
|
||||
(car p) (cadr p))))
|
||||
org-export-latex-packages-alist "\n") "")
|
||||
(or (plist-get opt-plist :title)
|
||||
(and (not
|
||||
(plist-get opt-plist :skip-before-1st-heading))
|
||||
(org-export-grab-title-from-buffer))
|
||||
(and buffer-file-name
|
||||
(file-name-sans-extension
|
||||
(file-name-nondirectory buffer-file-name)))
|
||||
"UNTITLED")
|
||||
(if (plist-get opt-plist :author-info)
|
||||
(format "\\author{%s}"
|
||||
(or (plist-get opt-plist :author) user-full-name))
|
||||
(format "%%\\author{%s}"
|
||||
(or (plist-get opt-plist :author) user-full-name)))
|
||||
(if (plist-get opt-plist :timestamps)
|
||||
(format "\\date{%s}"
|
||||
(format-time-string (or org-export-latex-date-format
|
||||
(car org-time-stamp-formats))))
|
||||
"%\\date{}")
|
||||
(if (and (plist-get opt-plist :section-numbers) toc)
|
||||
(format "\\setcounter{tocdepth}{%s}"
|
||||
(plist-get opt-plist :headline-levels)) "")
|
||||
(if (and (plist-get opt-plist :section-numbers) toc)
|
||||
"\\tableofcontents" ""))))
|
||||
;; LaTeX packages
|
||||
(if org-export-latex-packages-alist
|
||||
(mapconcat (lambda(p)
|
||||
(if (equal "" (car p))
|
||||
(format "\\usepackage{%s}" (cadr p))
|
||||
(format "\\usepackage[%s]{%s}"
|
||||
(car p) (cadr p))))
|
||||
org-export-latex-packages-alist "\n") "")
|
||||
"\n\\begin{document}\n\n"
|
||||
|
||||
;; title
|
||||
(format
|
||||
"\\title{%s}\n"
|
||||
(or (plist-get opt-plist :title)
|
||||
(and (not
|
||||
(plist-get opt-plist :skip-before-1st-heading))
|
||||
(org-export-grab-title-from-buffer))
|
||||
(and buffer-file-name
|
||||
(file-name-sans-extension
|
||||
(file-name-nondirectory buffer-file-name)))
|
||||
"UNTITLED"))
|
||||
|
||||
;; author info
|
||||
(if (plist-get opt-plist :author-info)
|
||||
(format "\\author{%s}\n"
|
||||
(or (plist-get opt-plist :author) user-full-name))
|
||||
(format "%%\\author{%s}\n"
|
||||
(or (plist-get opt-plist :author) user-full-name)))
|
||||
|
||||
;; date
|
||||
(format "\\date{%s}\n"
|
||||
(format-time-string
|
||||
(or (plist-get opt-plist :date)
|
||||
org-export-latex-date-format)))
|
||||
|
||||
"\\maketitle\n\n"
|
||||
;; table of contents
|
||||
(if (and (plist-get opt-plist :section-numbers) toc)
|
||||
(format "\\setcounter{tocdepth}{%s}\n"
|
||||
(plist-get opt-plist :headline-levels)) "")
|
||||
(if (and (plist-get opt-plist :section-numbers) toc)
|
||||
"\\tableofcontents\n" "\n"))))
|
||||
|
||||
(defun org-export-latex-first-lines (&optional comments)
|
||||
"Export the first lines before first headline.
|
||||
|
@ -529,10 +577,11 @@ formatting string like %%%%s if we want to comment them out."
|
|||
(goto-char (match-beginning 0))
|
||||
(goto-char (point-max)))))
|
||||
(org-export-latex-content
|
||||
(org-latex-cleaned-string-for-export
|
||||
(org-cleaned-string-for-export
|
||||
(buffer-substring (point-min) end)
|
||||
:for-html nil
|
||||
:for-LaTeX t
|
||||
:emph-multiline t
|
||||
:add-text nil
|
||||
:comments nil
|
||||
:skip-before-1st-heading nil
|
||||
:LaTeX-fragments nil)))))
|
||||
|
@ -565,39 +614,32 @@ formatting string like %%%%s if we want to comment them out."
|
|||
;; the beginning of the buffer - inserting "\n" is safe here though.
|
||||
(insert "\n" headline)
|
||||
(goto-char (point-min))
|
||||
(org-export-latex-special-chars
|
||||
(plist-get org-latex-options-plist :sub-superscript))
|
||||
(when (plist-get org-latex-options-plist :emphasize)
|
||||
(org-export-latex-fontify))
|
||||
(org-export-latex-special-chars
|
||||
(plist-get org-latex-options-plist :sub-superscript))
|
||||
(org-export-latex-keywords-maybe
|
||||
org-export-latex-remove-from-headines)
|
||||
org-export-latex-remove-from-headlines)
|
||||
(org-export-latex-links)
|
||||
(org-trim (buffer-substring-no-properties (point-min) (point-max)))))
|
||||
|
||||
(defun org-export-latex-fix-invisible-strings ()
|
||||
"Comment out (INVISIBLE) warnings."
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "(INVISIBLE)" nil t)
|
||||
(replace-match "%\\&")))
|
||||
|
||||
(defun org-export-latex-content (content)
|
||||
"Convert CONTENT string to LaTeX."
|
||||
(with-temp-buffer
|
||||
(insert content)
|
||||
(org-export-latex-quotation-marks)
|
||||
(org-export-latex-special-chars
|
||||
(plist-get org-latex-options-plist :sub-superscript))
|
||||
(when (plist-get org-latex-options-plist :emphasize)
|
||||
(org-export-latex-fontify))
|
||||
(org-export-latex-special-chars
|
||||
(plist-get org-latex-options-plist :sub-superscript))
|
||||
(org-export-latex-links)
|
||||
(org-export-latex-keywords)
|
||||
(org-export-latex-itemize)
|
||||
(org-export-latex-enumerate)
|
||||
(org-export-latex-keywords
|
||||
(plist-get org-latex-options-plist :timestamps))
|
||||
(org-export-latex-lists)
|
||||
(org-export-latex-tables
|
||||
(plist-get org-latex-options-plist :tables))
|
||||
(org-export-latex-fixed-width
|
||||
(plist-get org-latex-options-plist :fixed-width))
|
||||
(org-export-latex-fix-invisible-strings)
|
||||
(buffer-substring (point-min) (point-max))))
|
||||
|
||||
(defun org-export-latex-quotation-marks ()
|
||||
|
@ -605,8 +647,7 @@ formatting string like %%%%s if we want to comment them out."
|
|||
Local definition of the language overrides
|
||||
`org-export-latex-quotation-marks-convention' which overrides
|
||||
`org-export-default-language'."
|
||||
(let* ((lang (or (plist-get org-latex-options-plist :language)
|
||||
org-export-latex-quotation-marks-convention))
|
||||
(let* ((lang (plist-get org-latex-options-plist :language))
|
||||
(quote-rpl (if (equal lang "fr")
|
||||
'(("\\(\\s-\\)\"" "«~")
|
||||
("\\(\\S-\\)\"" "~»")
|
||||
|
@ -624,7 +665,7 @@ Local definition of the language overrides
|
|||
;; | chars/string in Org | normal environment | math environment |
|
||||
;; |-----------------------+-----------------------+-----------------------|
|
||||
;; | & # % $ | \& \# \% \$ | \& \# \% \$ |
|
||||
;; | { } _ ^ \ | \ { \ } \_ \^ \\ | { } _ ^ \ |
|
||||
;; | { } _ ^ \ | \{ \} \_ \^ \\ | { } _ ^ \ |
|
||||
;; |-----------------------+-----------------------+-----------------------|
|
||||
;; | a_b and a^b | $a_b$ and $a^b$ | a_b and a^b |
|
||||
;; | a_abc and a_{abc} | $a_a$bc and $a_{abc}$ | a_abc and a_{abc} |
|
||||
|
@ -718,8 +759,10 @@ Convert CHAR depending on STRING-BEFORE and STRING-AFTER."
|
|||
(format "$%s%s{%s}$" string-before char
|
||||
(match-string 1 string-after)))
|
||||
(subsup (concat "$" string-before char string-after "$"))
|
||||
(t (concat string-before "\\" char string-after))))
|
||||
(t (concat string-before "\\" char string-after))))
|
||||
(t (org-latex-protect
|
||||
(concat string-before "\\" char "{}" string-after)))))
|
||||
(t (org-latex-protect
|
||||
(concat string-before "\\" char "{}" string-after)))))
|
||||
|
||||
(defun org-export-latex-treat-backslash-char (string-before string-after)
|
||||
"Convert the \"$\" special character to LaTeX.
|
||||
|
@ -744,16 +787,17 @@ The conversion is made depending of STRING-BEFORE and STRING-AFTER."
|
|||
(concat string-before "$\\backslash$" string-after))
|
||||
(t (concat string-before "$\\backslash$" string-after))))
|
||||
|
||||
(defun org-export-latex-keywords ()
|
||||
(defun org-export-latex-keywords (timestamps)
|
||||
"Convert special keywords to LaTeX.
|
||||
Regexps are those from `org-latex-special-string-regexps'."
|
||||
(let ((rg org-latex-special-string-regexps) r)
|
||||
(while (setq r (pop rg))
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward (eval r) nil t)
|
||||
(replace-match (format "\\\\texttt{%s}" (match-string 0)) t)))))
|
||||
|
||||
;; FIXME - we need better implementation for nested lists
|
||||
(if (not timestamps)
|
||||
(replace-match (format "\\\\texttt{%s}" (match-string 0)) t)
|
||||
(replace-match ""))))))
|
||||
|
||||
(defun org-export-latex-fixed-width (opt)
|
||||
"When OPT is non-nil convert fixed-width sections to LaTeX."
|
||||
(goto-char (point-min))
|
||||
|
@ -773,12 +817,78 @@ Regexps are those from `org-latex-special-string-regexps'."
|
|||
(forward-line))))))
|
||||
|
||||
;; FIXME Use org-export-highlight-first-table-line ?
|
||||
(defun org-export-latex-lists ()
|
||||
"Convert lists to LaTeX."
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward org-export-latex-list-beginning-re nil t)
|
||||
(beginning-of-line)
|
||||
(org-export-list-to-latex
|
||||
(org-export-latex-parse-list t))))
|
||||
|
||||
(defun org-export-list-to-generic (list params)
|
||||
"Convert a LIST parsed through `org-export-latex-parse-list' to other formats.
|
||||
|
||||
Valid parameters are
|
||||
|
||||
:ustart String to start an unordered list
|
||||
:uend String to end an unordered list
|
||||
|
||||
:ostart String to start an ordered list
|
||||
:oend String to end an ordered list
|
||||
|
||||
:splice When set to t, return only list body lines, don't wrap
|
||||
them into :[u/o]start and :[u/o]end. Default is nil.
|
||||
|
||||
:istart String to start a list item
|
||||
:iend String to end a list item
|
||||
:isep String to separate items
|
||||
:lsep String to separate sublists"
|
||||
(interactive)
|
||||
(let* ((p params) sublist
|
||||
(splicep (plist-get p :splice))
|
||||
(ostart (plist-get p :ostart))
|
||||
(oend (plist-get p :oend))
|
||||
(ustart (plist-get p :ustart))
|
||||
(uend (plist-get p :uend))
|
||||
(istart (plist-get p :istart))
|
||||
(iend (plist-get p :iend))
|
||||
(isep (plist-get p :isep))
|
||||
(lsep (plist-get p :lsep)))
|
||||
(let ((wrapper
|
||||
(cond ((eq (car list) 'ordered)
|
||||
(concat ostart "\n%s" oend "\n"))
|
||||
((eq (car list) 'unordered)
|
||||
(concat ustart "\n%s" uend "\n"))))
|
||||
rtn)
|
||||
(while (setq sublist (pop list))
|
||||
(cond ((symbolp sublist) nil)
|
||||
((stringp sublist)
|
||||
(setq rtn (concat rtn istart sublist iend isep)))
|
||||
(t
|
||||
(setq rtn (concat rtn ;; previous list
|
||||
lsep ;; list separator
|
||||
(org-export-list-to-generic sublist p)
|
||||
lsep ;; list separator
|
||||
)))))
|
||||
(format wrapper rtn))))
|
||||
|
||||
(defun org-export-list-to-latex (list)
|
||||
"Convert LIST into a LaTeX list."
|
||||
(insert
|
||||
(org-export-list-to-generic
|
||||
list '(:splicep nil :ostart "\\begin{enumerate}" :oend "\\end{enumerate}"
|
||||
:ustart "\\begin{itemize}" :uend "\\end{itemize}"
|
||||
:istart "\\item " :iend ""
|
||||
:isep "\n" :lsep "\n"))
|
||||
;; Add a trailing \n after list conversion
|
||||
"\n"))
|
||||
|
||||
(defun org-export-latex-tables (opt)
|
||||
"When OPT is non-nil convert tables to LaTeX."
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "^\\([ \t]*\\)|" nil t)
|
||||
;; Re-align the table to update org-table-last-alignment
|
||||
(save-window-excursion (save-match-data (org-table-align)))
|
||||
;; (save-excursion (save-match-data (org-table-align)))
|
||||
(let (tbl-list
|
||||
(beg (match-beginning 0))
|
||||
(end (save-excursion
|
||||
|
@ -786,63 +896,22 @@ Regexps are those from `org-latex-special-string-regexps'."
|
|||
(concat "^" (regexp-quote (match-string 1))
|
||||
"[^|]\\|\\'") nil t) (match-beginning 0))))
|
||||
(beginning-of-line)
|
||||
(while (not (eq end (point)))
|
||||
(if (looking-at "[ \t]*|\\([^-|].+\\)|[ \t]*$")
|
||||
(push (split-string (org-trim (match-string 1)) "|") tbl-list)
|
||||
(push 'hline tbl-list))
|
||||
(forward-line))
|
||||
;; comment region out instead of deleting it ?
|
||||
(apply 'delete-region (list beg end))
|
||||
(when opt (insert (orgtbl-to-latex (nreverse tbl-list)
|
||||
nil) "\n\n")))))
|
||||
|
||||
(defun org-export-latex-list (srch0 srch1 srch2 rpl0 rpl1)
|
||||
"Convert lists to LaTeX."
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward srch0 nil t)
|
||||
(let* ((beg (match-beginning 0))
|
||||
(prefix (regexp-quote (match-string 1)))
|
||||
(end-string (when (re-search-forward srch1 nil t)
|
||||
(match-string 0))))
|
||||
(goto-char beg) (insert rpl0)
|
||||
(while (re-search-forward
|
||||
(concat "^" prefix srch2)
|
||||
(if (not end-string)
|
||||
(point-max)
|
||||
(save-match-data
|
||||
(save-excursion
|
||||
(re-search-forward
|
||||
(regexp-quote end-string) nil t)))) t)
|
||||
(replace-match
|
||||
(concat "\\item "
|
||||
(if (match-string 1)
|
||||
(format "\\texttt{%s}" (match-string 1))))
|
||||
t t))
|
||||
(goto-char (if end-string
|
||||
(progn (re-search-forward
|
||||
(regexp-quote end-string) nil t)
|
||||
(match-beginning 0))
|
||||
(point-max)))
|
||||
(skip-chars-backward "\n") (forward-line 2)
|
||||
(insert rpl1))))
|
||||
|
||||
(defun org-export-latex-itemize ()
|
||||
"Convert item list to LaTeX."
|
||||
(org-export-latex-list
|
||||
"^\\([ \t]*\\)-"
|
||||
"^[^ \n\t-]+.*$"
|
||||
"- ?\\(\\[.+\\]\\)?"
|
||||
"\\begin{itemize}\n"
|
||||
"\\end{itemize}\n"))
|
||||
|
||||
(defun org-export-latex-enumerate ()
|
||||
"Convert numeric list to LaTeX."
|
||||
(org-export-latex-list
|
||||
"^\\([ \t]*\\)[0-9]+[\.)] \\(\\[.+\\]\\)? ?"
|
||||
"^[^ \n\t0-9]+.*$"
|
||||
"[0-9]+[\.)] ?\\(\\[.+\\]\\)?"
|
||||
"\\begin{enumerate}\n"
|
||||
"\\end{enumerate}\n"))
|
||||
(if org-export-latex-tables-verbatim
|
||||
(let* ((raw-table (buffer-substring beg end))
|
||||
(tbl (concat "\\begin{verbatim}\n" raw-table
|
||||
"\\end{verbatim}\n")))
|
||||
(apply 'delete-region (list beg end))
|
||||
(insert tbl))
|
||||
(progn
|
||||
(while (not (eq end (point)))
|
||||
(if (looking-at "[ \t]*|\\([^-|].+\\)|[ \t]*$")
|
||||
(push (split-string (org-trim (match-string 1)) "|") tbl-list)
|
||||
(push 'hline tbl-list))
|
||||
(forward-line))
|
||||
;; comment region out instead of deleting it ?
|
||||
(apply 'delete-region (list beg end))
|
||||
(when opt (insert (orgtbl-to-latex (nreverse tbl-list)
|
||||
nil) "\n\n")))))))
|
||||
|
||||
(defun org-export-latex-fontify ()
|
||||
"Convert fontification to LaTeX."
|
||||
|
@ -908,189 +977,24 @@ Regexps are those from `org-latex-special-string-regexps'."
|
|||
(path (insert (format "\\href{%s}{%s}" path desc)))
|
||||
(t (insert "\\texttt{" desc "}")))))))
|
||||
|
||||
|
||||
;;; org-latex-cleaned-string-for-export:
|
||||
(defun org-latex-cleaned-string-for-export (string &rest parameters)
|
||||
"Cleanup a buffer STRING so that links can be created safely."
|
||||
(interactive)
|
||||
(let* ((re-radio (and org-target-link-regexp
|
||||
(concat "\\([^<]\\)\\(" org-target-link-regexp "\\)")))
|
||||
(re-plain-link (concat "\\([^[<]\\)" org-plain-link-re))
|
||||
(re-angle-link (concat "\\([^[]\\)" org-angle-link-re))
|
||||
(re-archive (concat ":" org-archive-tag ":"))
|
||||
(re-quote (concat "^\\*+[ \t]+" org-quote-string "\\>"))
|
||||
(htmlp (plist-get parameters :for-html))
|
||||
(latexp (plist-get parameters :for-LaTeX))
|
||||
(commentsp (plist-get parameters :comments))
|
||||
(inhibit-read-only t)
|
||||
(outline-regexp "\\*+ ")
|
||||
a b xx
|
||||
rtn p)
|
||||
(save-excursion
|
||||
(set-buffer (get-buffer-create " org-mode-tmp"))
|
||||
(erase-buffer)
|
||||
(insert string)
|
||||
;; Remove license-to-kill stuff
|
||||
(while (setq p (text-property-any (point-min) (point-max)
|
||||
:org-license-to-kill t))
|
||||
(delete-region p (next-single-property-change p :org-license-to-kill)))
|
||||
|
||||
(let ((org-inhibit-startup t)) (org-mode))
|
||||
(untabify (point-min) (point-max))
|
||||
|
||||
;; Get the correct stuff before the first headline
|
||||
(when (plist-get parameters :skip-before-1st-heading)
|
||||
(goto-char (point-min))
|
||||
(when (re-search-forward "^\\*+[ \t]" nil t)
|
||||
(delete-region (point-min) (match-beginning 0))
|
||||
(goto-char (point-min))
|
||||
(insert "\n")))
|
||||
(when (plist-get parameters :add-text)
|
||||
(goto-char (point-min))
|
||||
(insert (plist-get parameters :add-text) "\n"))
|
||||
|
||||
;; Get rid of archived trees
|
||||
(when (not (eq org-export-with-archived-trees t))
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward re-archive nil t)
|
||||
(if (not (org-on-heading-p t))
|
||||
(org-end-of-subtree t)
|
||||
(beginning-of-line 1)
|
||||
(setq a (if org-export-with-archived-trees
|
||||
(1+ (point-at-eol)) (point))
|
||||
b (org-end-of-subtree t))
|
||||
(if (> b a) (delete-region a b)))))
|
||||
|
||||
;; Get rid of property drawers
|
||||
(unless org-export-with-property-drawer
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "^[ \t]*:PROPERTIES:[ \t]*\n\\([^@]*?\n\\)?[ \t]*:END:[ \t]*\n" nil t)
|
||||
(replace-match "")))
|
||||
|
||||
;; Find targets in comments and move them out of comments,
|
||||
;; but mark them as targets that should be invisible
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "^#.*?\\(<<<?[^>\r\n]+>>>?\\).*" nil t)
|
||||
(replace-match "\\1(INVISIBLE)"))
|
||||
|
||||
;; Specific LaTeX cleaning
|
||||
(when latexp
|
||||
(require 'org-export-latex nil t)
|
||||
(org-export-latex-cleaned-string))
|
||||
|
||||
;; Protect stuff from HTML processing
|
||||
(goto-char (point-min))
|
||||
(let ((formatters `((,htmlp "HTML" "BEGIN_HTML" "END_HTML"))) fmt)
|
||||
(while (re-search-forward "^[ \t]*:.*\\(\n[ \t]*:.*\\)*" nil t)
|
||||
(add-text-properties (match-beginning 0) (match-end 0)
|
||||
'(org-protected t)))
|
||||
(while formatters
|
||||
(setq fmt (pop formatters))
|
||||
(when (car fmt)
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward (concat "^#\\+" (cadr fmt)
|
||||
":[ \t]*\\(.*\\)") nil t)
|
||||
(replace-match "\\1" t)
|
||||
(add-text-properties
|
||||
(point-at-bol) (min (1+ (point-at-eol)) (point-max))
|
||||
'(org-protected t))))
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward
|
||||
(concat "^#\\+"
|
||||
(caddr fmt) "\\>.*\\(\\(\n.*\\)*?\n\\)#\\+"
|
||||
(cadddr fmt) "\\>.*\n?") nil t)
|
||||
(if (car fmt)
|
||||
(add-text-properties (match-beginning 1) (1+ (match-end 1))
|
||||
'(org-protected t))
|
||||
(delete-region (match-beginning 0) (match-end 0))))
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward re-quote nil t)
|
||||
(goto-char (match-beginning 0))
|
||||
(end-of-line 1)
|
||||
(add-text-properties (point) (org-end-of-subtree t)
|
||||
'(org-protected t)))))
|
||||
|
||||
;; Find matches for radio targets and turn them into internal links
|
||||
(goto-char (point-min))
|
||||
(when re-radio
|
||||
(while (re-search-forward re-radio nil t)
|
||||
(org-if-unprotected
|
||||
(replace-match "\\1[[\\2]]"))))
|
||||
|
||||
;; Find all links that contain a newline and put them into a single line
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "\\(\\(\\[\\|\\]\\)\\[[^]]*?\\)[ \t]*\n[ \t]*\\([^]]*\\]\\(\\[\\|\\]\\)\\)" nil t)
|
||||
(org-if-unprotected
|
||||
(replace-match "\\1 \\3")
|
||||
(goto-char (match-beginning 0))))
|
||||
|
||||
;; Convert LaTeX fragments to images
|
||||
(when (plist-get parameters :LaTeX-fragments)
|
||||
(org-format-latex
|
||||
(concat "ltxpng/" (file-name-sans-extension
|
||||
(file-name-nondirectory
|
||||
org-current-export-file)))
|
||||
org-current-export-dir nil "Creating LaTeX image %s"))
|
||||
(message "Exporting...")
|
||||
|
||||
;; Normalize links: Convert angle and plain links into bracket links
|
||||
;; Expand link abbreviations
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward re-plain-link nil t)
|
||||
(goto-char (1- (match-end 0)))
|
||||
(org-if-unprotected
|
||||
(let* ((s (concat (match-string 1) "[[" (match-string 2)
|
||||
":" (match-string 3) "]]")))
|
||||
;; added 'org-protected property to links
|
||||
(put-text-property 0 (length s) 'face 'org-link s)
|
||||
(replace-match s t t))))
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward re-angle-link nil t)
|
||||
(goto-char (1- (match-end 0)))
|
||||
(org-if-unprotected
|
||||
(let* ((s (concat (match-string 1) "[[" (match-string 2)
|
||||
":" (match-string 3) "]]")))
|
||||
(put-text-property 0 (length s) 'face 'org-link s)
|
||||
(replace-match s t t))))
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward org-bracket-link-regexp nil t)
|
||||
(org-if-unprotected
|
||||
(let* ((s (concat "[[" (setq xx (save-match-data
|
||||
(org-link-expand-abbrev (match-string 1))))
|
||||
"]"
|
||||
(if (match-end 3)
|
||||
(match-string 2)
|
||||
(concat "[" xx "]"))
|
||||
"]")))
|
||||
(put-text-property 0 (length s) 'face 'org-link s)
|
||||
(replace-match s t t))))
|
||||
|
||||
;; Find multiline emphasis and put them into single line
|
||||
(when (plist-get parameters :emph-multiline)
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward org-emph-re nil t)
|
||||
(if (not (= (char-after (match-beginning 3))
|
||||
(char-after (match-beginning 4))))
|
||||
(org-if-unprotected
|
||||
(subst-char-in-region (match-beginning 0) (match-end 0)
|
||||
?\n ?\ t)
|
||||
(goto-char (1- (match-end 0))))
|
||||
(goto-char (1+ (match-beginning 0))))))
|
||||
|
||||
(setq rtn (buffer-string)))
|
||||
(kill-buffer " org-mode-tmp")
|
||||
rtn))
|
||||
|
||||
(defun org-export-latex-cleaned-string ()
|
||||
(defun org-export-latex-cleaned-string
|
||||
;; FIXME remove commentsp call in org.el and here
|
||||
(&optional commentsp)
|
||||
"Clean stuff in the LaTeX export."
|
||||
|
||||
;; align all tables
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "^\\([ \t]*\\)|" nil t)
|
||||
;; Re-align the table to update org-table-last-alignment
|
||||
(org-table-align))
|
||||
|
||||
;; Preserve line breaks
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "\\\\\\\\" nil t)
|
||||
(add-text-properties (match-beginning 0) (match-end 0)
|
||||
'(org-protected t)))
|
||||
|
||||
;; Convert LaTeX to @LaTeX{}
|
||||
;; Convert LaTeX to \LaTeX{}
|
||||
(goto-char (point-min))
|
||||
(let ((case-fold-search nil) rpl)
|
||||
(while (re-search-forward "\\([^+_]\\)LaTeX" nil t)
|
||||
|
@ -1102,91 +1006,28 @@ Regexps are those from `org-latex-special-string-regexps'."
|
|||
(while (re-search-forward "^----+.$" nil t)
|
||||
(replace-match (org-latex-protect "\\hrule") t t))
|
||||
|
||||
;; Remove COMMENT subtrees
|
||||
;; What about QUOTE subtrees?
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward
|
||||
(concat "^\\*+ \\(" org-comment-string "\\)")
|
||||
nil t)
|
||||
(beginning-of-line)
|
||||
(org-cut-subtree))
|
||||
|
||||
;; Protect LaTeX \commands{...}
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "\\\\[a-zA-Z]+\\(?:\\[.*\\]\\)?{.*}" nil t)
|
||||
(add-text-properties (match-beginning 0) (match-end 0)
|
||||
'(org-protected t)))
|
||||
|
||||
|
||||
;; Replace radio links
|
||||
(goto-char (point-min))
|
||||
(let ((search (concat "<<<?" org-latex-all-targets-regexp ">?>>")))
|
||||
(while (re-search-forward search nil t)
|
||||
(replace-match
|
||||
(org-latex-protect (format "\\label{%s}" (match-string 1))) t t)))
|
||||
|
||||
(while (re-search-forward
|
||||
(concat "<<<?" org-latex-all-targets-regexp
|
||||
">>>?\\((INVISIBLE)\\)?") nil t)
|
||||
(replace-match
|
||||
(org-latex-protect
|
||||
(format "\\label{%s}%s"(match-string 1)
|
||||
(if (match-string 2) "" (match-string 1)))) t t))
|
||||
|
||||
;; Delete @<...> constructs
|
||||
(goto-char (point-min))
|
||||
;; Thanks to Daniel Clemente for this regexp
|
||||
(while (re-search-forward "@<\\(?:[^\"\n]\\|\".*\"\\)*?>" nil t)
|
||||
(replace-match ""))
|
||||
|
||||
;; Add #+BEGIN_LaTeX before any \begin{...}
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "^ *\\\\begin{" nil t)
|
||||
(replace-match "#+BEGIN_LaTeX:\n\\&" t))
|
||||
|
||||
;; Add #+END_LaTeX after any \end{...}
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "^ *\\\\end{.+}.*$" nil t)
|
||||
(replace-match "\\&\n#+END_LaTeX" t))
|
||||
|
||||
;; Protect stuff from LaTeX processing.
|
||||
;; We will get rid on this once org.el integrate org-export-latex.el
|
||||
(goto-char (point-min))
|
||||
(let ((formatters `((,latexp "LaTeX" "BEGIN_LaTeX" "END_LaTeX"))) fmt)
|
||||
(while (re-search-forward "^[ \t]*:.*\\(\n[ \t]*:.*\\)*" nil t)
|
||||
(add-text-properties (match-beginning 0) (match-end 0)
|
||||
'(org-protected t)))
|
||||
(while formatters
|
||||
(setq fmt (pop formatters))
|
||||
(when (car fmt)
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward (concat "^#\\+" (cadr fmt)
|
||||
;; ":[ \t]*\\(.*\\)") nil t)
|
||||
;; FIXME: authorize spaces after #+LaTeX:
|
||||
;; to get list correctly exported
|
||||
":\\(.*\\)") nil t)
|
||||
(replace-match "\\1" t)
|
||||
(add-text-properties
|
||||
(point-at-bol) (min (1+ (point-at-eol)) (point-max))
|
||||
'(org-protected t))))
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward
|
||||
(concat "^#\\+"
|
||||
(caddr fmt) "\\>.*\\(\\(\n.*\\)*?\n\\)#\\+"
|
||||
(cadddr fmt) "\\>.*\n?") nil t)
|
||||
(if (car fmt)
|
||||
(add-text-properties (match-beginning 1) (1+ (match-end 1))
|
||||
'(org-protected t))
|
||||
(delete-region (match-beginning 0) (match-end 0))))
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward re-quote nil t)
|
||||
(goto-char (match-beginning 0))
|
||||
(end-of-line 1)
|
||||
(add-text-properties (point) (org-end-of-subtree t)
|
||||
'(org-protected t)))))
|
||||
|
||||
;; Remove or replace comments
|
||||
;; If :comments is set, use this char for commenting out comments and
|
||||
;; protect them. otherwise delete them
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "^#\\(.*\n?\\)" nil t)
|
||||
(if commentsp
|
||||
(progn (add-text-properties
|
||||
(match-beginning 0) (match-end 0) '(org-protected t))
|
||||
(replace-match (format commentsp (match-string 1)) t t))
|
||||
(replace-match "")))
|
||||
|
||||
;; When converting to LaTeX, replace footnotes
|
||||
;; FIXME: don't protect footnotes from conversion
|
||||
(when (plist-get org-latex-options-plist :footnotes)
|
||||
|
|
|
@ -6,19 +6,19 @@
|
|||
;; Keywords: hypermedia, outlines
|
||||
;; Version: 1.80
|
||||
|
||||
;; GNU Emacs is free software; you can redistribute it and/or modify
|
||||
;; This file is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation; either version 3, or (at your option)
|
||||
;; any later version.
|
||||
|
||||
;; GNU Emacs is distributed in the hope that it will be useful,
|
||||
;; This file is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with GNU Emacs; see the file COPYING. If not, write to the
|
||||
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
;; along with GNU Emacs; see the file COPYING. If not, write to
|
||||
;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
;; Boston, MA 02110-1301, USA.
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
@ -438,6 +438,20 @@ nil if not found."
|
|||
|
||||
;;;; Pluggable publishing back-end functions
|
||||
|
||||
|
||||
(defun org-publish-org-to-html (plist filename)
|
||||
"Publish an org file to HTML.
|
||||
PLIST is the property list for the given project.
|
||||
FILENAME is the filename of the org file to be published."
|
||||
(require 'org)
|
||||
(let* ((arg (plist-get plist :headline-levels)))
|
||||
(progn
|
||||
(find-file filename)
|
||||
(org-export-as-html arg nil plist)
|
||||
;; get rid of HTML buffer
|
||||
(kill-buffer (current-buffer)))))
|
||||
|
||||
|
||||
(defun org-publish-org-to-latex (plist filename)
|
||||
"Publish an org file to LaTeX."
|
||||
(org-publish-org-to "latex" plist filename))
|
||||
|
@ -600,8 +614,9 @@ With prefix argument, force publish all files."
|
|||
(plists (org-publish-get-plists)))
|
||||
(mapcar 'org-publish-plist plists))))
|
||||
|
||||
|
||||
|
||||
(provide 'org-publish)
|
||||
|
||||
;; arch-tag: 72807f3c-8af0-4a6b-8dca-c3376eb25adb
|
||||
;;; org-publish.el ends here
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
Loading…
Add table
Reference in a new issue