lorniu / ox-spectacle Goto Github PK
View Code? Open in Web Editor NEWSlideshow tool on Emacs, that build HTML presentation with Spectacle.js from Org Mode.
License: GNU General Public License v3.0
Slideshow tool on Emacs, that build HTML presentation with Spectacle.js from Org Mode.
License: GNU General Public License v3.0
If I have in a file with org-mode on and export using ox-spectacle:
<img src="./2023-03-02_screen.png"/>
It converts into HTML file:
2023-03-02</sub>screen.png
But what is expected:
2023-03-02_screen.png
Hi,
This is really neat, and your demo is awesome. However, I noticed that it requires loading JS from unpkg.com. It would be very helpful if ox-spectacle
could include the JS either inline or as files in an export
subdirectory (like how Org export themes work), that way presentations would be self-contained and would work even without Internet access.
When run 'C-c C-e s o', i got an error void-function cl-with-gensyms
, which package need to install for this missing function?
Debugger entered--Lisp error: (void-function cl-with-gensyms) (cl-with-gensyms (ps rs pps) (list 'let (list ps rs (list pps (list 'quote properties))) (list 'while plist (list 'if (list 'memq (list 'car plist) pps) (list 'setq rs (list 'plist-put rs (list 'car plist) (list 'cadr plist))) (list 'setq ps (list 'plist-put ps (list 'car plist) (list 'cadr plist)))) (list 'setq plist (list 'cddr plist))) (list 'setq plist ps) rs)) (closure (t) (plist &rest properties) "Pop the values with key of PROPERTIES in PLIST." (cl-with-gensyms (ps rs pps) (list 'let (list ps rs (list pps (list 'quote properties))) (list 'while plist (list 'if (list 'memq (list ... plist) pps) (list 'setq rs (list ... rs ... ...)) (list 'setq ps (list ... ps ... ...))) (list 'setq plist (list 'cddr plist))) (list 'setq plist ps) rs)))(props :type) (ox-spectacle--pop-from-plist props :type) (cadr (ox-spectacle--pop-from-plist props :type)) (let* ((case-fold-search nil) (headline (org-element-lineage paragraph '(headline))) (props (org-export-read-attribute :attr_html paragraph)) (type (cadr (ox-spectacle--pop-from-plist props :type))) (props (ox-spectacle--wa (org-html--make-attribute-string props))) (regexp-html (format "\\(%s\\)" (mapconcat #'identity ox-spectacle--html-tags "\\|"))) (regexp-comp (format "\\(\\(%s\\)\\(\\.[A-Z][a-zA-Z0-9]+\\)*\\)" (mapconcat #'identity (ox-spectacle--available-components info) "\\|"))) (parentype (org-element-type (org-export-get-parent paragraph))) (hd-raw (or (org-element-property :raw-value headline) "")) (notep (string-match-p "<notes.*>" hd-raw)) (stepperp (string-match-p "<Stepper.*>" hd-raw)) tag) (if (or stepperp (or (string-equal type "no") (string-equal type "raw")) (eq parentype 'item) (eq parentype 'quote-block) (org-html-standalone-image-p paragraph info)) contents (let ((firstline (car (split-string contents "\n" t))) (reg (format "^[ \11]*</?\\(\\${%s}\\|%s\\)\\([ \11]\\|/?>\\)" regexp-comp regexp-html))) (when (string-match-p reg firstline) (setq contents (with-temp-buffer (insert contents) (goto-char (point-min)) (search-forward ">") (backward-char) (insert (ox-spectacle--wa props)) (concat (ox-spectacle--filter-image ... info) (buffer-substring ... ...))) tag t))) (let* ((text-opts (ox-spectacle--extract-options :text-opts info t)) (text-tag (car text-opts)) (text-props (ox-spectacle--wa (cdr text-opts)))) (setq tag (if (eq tag t) nil (or type (if notep "p" (or text-tag "Text"))))) (if (= (length props) 0) (setq props text-props))) (if (string-match-p regexp-comp (or tag "")) (setq tag (format "${%s}" tag))) (if tag (format "<%s%s>%s</%s>" tag props (string-trim contents) tag) (ox-spectacle--wa contents "\n")))) ox-spectacle--paragraph((paragraph (:begin 42 :end 71 :contents-begin 42 :contents-end 70 :post-blank 1 :post-affiliated 42 :parent (section (:begin 42 :end 494 :contents-begin 42 :contents-end 493 :post-blank 1 :post-affiliated 42 :parent (headline ... #17)) #1 (paragraph (:begin 71 :end 208 :contents-begin 125 :contents-end 207 :post-blank 1 :post-affiliated 125 :attr_html ... :parent #17) #(" " 0 3 ...) (link ...) #("\n" 0 1 ...)) (src-block (:language "html" :switches nil :parameters nil :begin 208 :end 493 :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value " <Slide>\n <Text>This is the firs..." :post-blank 0 :post-affiliated 273 :attr_html ... :parent #17)))) #("This is the first slide.\n" 0 25 (:parent #1))) #("This is the first slide.\n" 0 25 (:parent (paragraph (:begin 42 :end 71 :contents-begin 42 :contents-end 70 :post-blank 1 :post-affiliated 42 :parent (section ... #5 ... ...)) #("This is the first slide.\n" 0 25 (:parent #5))))) (:export-options nil :back-end #s(org-export-backend :name spectacle :parent html :transcoders ((template . ox-spectacle--template) (inner-template . ox-spectacle--inner-template) (headline . ox-spectacle--headline) (section . ox-spectacle--section) (src-block . ox-spectacle--src-block) (quote-block . ox-spectacle--quote-block) (center-block . ox-spectacle--center-block) (code . ox-spectacle--code) (verbatim . ox-spectacle--verbatim) (plain-list . ox-spectacle--plain-list) (item . ox-spectacle--item) (table . ox-spectacle--table) (table-row . ox-spectacle--table-row) (table-cell . ox-spectacle--table-cell) (link . ox-spectacle--link) (paragraph . ox-spectacle--paragraph) (plain-text . ox-spectacle--plain-text) (latex-fragment . ox-spectacle--latex-fragment)) :options ((:theme "THEME" nil ox-spectacle-theme) (:template "TEMPLATE" nil ox-spectacle-template) (:transition "TRANSITION" nil ox-spectacle-transition) (:deck-opts "DECK_OPTS" nil ox-spectacle-deck-opts space) (:slide-opts "SLIDE_OPTS" nil ox-spectacle-slide-opts space) (:text-opts "TEXT_OPTS" nil ox-spectacle-text-opts space) (:export-level "EXPORT_LEVEL" 0 ox-spectacle-export-level) (:extern-components "EXTERN_COMPONENTS" nil ox-spectacle-extern-components split) (:extra-scripts "EXTRA_SCRIPTS" nil ox-spectacle-extra-scripts split) (:html-doctype nil nil ox-spectacle--doctype) (:with-special-strings nil nil)) :filters ((:filter-options . ox-spectacle--init-filter) (:filter-parse-tree . ox-spectacle--parse-tree-filter) (:filter-final-output . org-html-final-function)) :blocks nil :menu (115 "Export to Spectacle.js Presentation" ((83 "As buffer" ox-spectacle-export-to-buffer) (115 "As html file" ox-spectacle-export-to-file) (111 "As html file and open" ox-spectacle-export-to-file-and-browser)))) :translate-alist ((template . ox-spectacle--template) (inner-template . ox-spectacle--inner-template) (headline . ox-spectacle--headline) (section . ox-spectacle--section) (src-block . ox-spectacle--src-block) (quote-block . ox-spectacle--quote-block) (center-block . ox-spectacle--center-block) (code . ox-spectacle--code) (verbatim . ox-spectacle--verbatim) (plain-list . ox-spectacle--plain-list) (item . ox-spectacle--item) (table . ox-spectacle--table) (table-row . ox-spectacle--table-row) (table-cell . ox-spectacle--table-cell) (link . ox-spectacle--link) (paragraph . ox-spectacle--paragraph) (plain-text . ox-spectacle--plain-text) (latex-fragment . ox-spectacle--latex-fragment) (bold . org-html-bold) (center-block . org-html-center-block) (clock . org-html-clock) (code . org-html-code) (drawer . org-html-drawer) (dynamic-block . org-html-dynamic-block) (entity . org-html-entity) (example-block . org-html-example-block) (export-block . org-html-export-block) (export-snippet . org-html-export-snippet) (fixed-width . org-html-fixed-width) (footnote-reference . org-html-footnote-reference) (headline . org-html-headline) (horizontal-rule . org-html-horizontal-rule) (inline-src-block . org-html-inline-src-block) (inlinetask . org-html-inlinetask) (inner-template . org-html-inner-template) (italic . org-html-italic) (item . org-html-item) (keyword . org-html-keyword) ...) :exported-data #<hash-table eq 3/4001 0x1fe470306565> :input-buffer "test-spectacle.org" :input-file "/Users/tomyli/Downloads/test-spectacle..." :theme nil :template "template" :transition nil :deck-opts nil :slide-opts nil :text-opts nil :export-level 0 :extern-components nil :extra-scripts nil :html-doctype "xhtml" :with-special-strings nil :html-container "div" :html-content-class "content" ...)) org-export-data((paragraph (:begin 42 :end 71 :contents-begin 42 :contents-end 70 :post-blank 1 :post-affiliated 42 :parent (section (:begin 42 :end 494 :contents-begin 42 :contents-end 493 :post-blank 1 :post-affiliated 42 :parent (headline ... #17)) #1 (paragraph (:begin 71 :end 208 :contents-begin 125 :contents-end 207 :post-blank 1 :post-affiliated 125 :attr_html ... :parent #17) #(" " 0 3 ...) (link ...) #("\n" 0 1 ...)) (src-block (:language "html" :switches nil :parameters nil :begin 208 :end 493 :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value " <Slide>\n <Text>This is the firs..." :post-blank 0 :post-affiliated 273 :attr_html ... :parent #17)))) #("This is the first slide.\n" 0 25 (:parent #1))) (:export-options nil :back-end #s(org-export-backend :name spectacle :parent html :transcoders ((template . ox-spectacle--template) (inner-template . ox-spectacle--inner-template) (headline . ox-spectacle--headline) (section . ox-spectacle--section) (src-block . ox-spectacle--src-block) (quote-block . ox-spectacle--quote-block) (center-block . ox-spectacle--center-block) (code . ox-spectacle--code) (verbatim . ox-spectacle--verbatim) (plain-list . ox-spectacle--plain-list) (item . ox-spectacle--item) (table . ox-spectacle--table) (table-row . ox-spectacle--table-row) (table-cell . ox-spectacle--table-cell) (link . ox-spectacle--link) (paragraph . ox-spectacle--paragraph) (plain-text . ox-spectacle--plain-text) (latex-fragment . ox-spectacle--latex-fragment)) :options ((:theme "THEME" nil ox-spectacle-theme) (:template "TEMPLATE" nil ox-spectacle-template) (:transition "TRANSITION" nil ox-spectacle-transition) (:deck-opts "DECK_OPTS" nil ox-spectacle-deck-opts space) (:slide-opts "SLIDE_OPTS" nil ox-spectacle-slide-opts space) (:text-opts "TEXT_OPTS" nil ox-spectacle-text-opts space) (:export-level "EXPORT_LEVEL" 0 ox-spectacle-export-level) (:extern-components "EXTERN_COMPONENTS" nil ox-spectacle-extern-components split) (:extra-scripts "EXTRA_SCRIPTS" nil ox-spectacle-extra-scripts split) (:html-doctype nil nil ox-spectacle--doctype) (:with-special-strings nil nil)) :filters ((:filter-options . ox-spectacle--init-filter) (:filter-parse-tree . ox-spectacle--parse-tree-filter) (:filter-final-output . org-html-final-function)) :blocks nil :menu (115 "Export to Spectacle.js Presentation" ((83 "As buffer" ox-spectacle-export-to-buffer) (115 "As html file" ox-spectacle-export-to-file) (111 "As html file and open" ox-spectacle-export-to-file-and-browser)))) :translate-alist ((template . ox-spectacle--template) (inner-template . ox-spectacle--inner-template) (headline . ox-spectacle--headline) (section . ox-spectacle--section) (src-block . ox-spectacle--src-block) (quote-block . ox-spectacle--quote-block) (center-block . ox-spectacle--center-block) (code . ox-spectacle--code) (verbatim . ox-spectacle--verbatim) (plain-list . ox-spectacle--plain-list) (item . ox-spectacle--item) (table . ox-spectacle--table) (table-row . ox-spectacle--table-row) (table-cell . ox-spectacle--table-cell) (link . ox-spectacle--link) (paragraph . ox-spectacle--paragraph) (plain-text . ox-spectacle--plain-text) (latex-fragment . ox-spectacle--latex-fragment) (bold . org-html-bold) (center-block . org-html-center-block) (clock . org-html-clock) (code . org-html-code) (drawer . org-html-drawer) (dynamic-block . org-html-dynamic-block) (entity . org-html-entity) (example-block . org-html-example-block) (export-block . org-html-export-block) (export-snippet . org-html-export-snippet) (fixed-width . org-html-fixed-width) (footnote-reference . org-html-footnote-reference) (headline . org-html-headline) (horizontal-rule . org-html-horizontal-rule) (inline-src-block . org-html-inline-src-block) (inlinetask . org-html-inlinetask) (inner-template . org-html-inner-template) (italic . org-html-italic) (item . org-html-item) (keyword . org-html-keyword) ...) :exported-data #<hash-table eq 3/4001 0x1fe470306565> :input-buffer "test-spectacle.org" :input-file "/Users/tomyli/Downloads/test-spectacle..." :theme nil :template "template" :transition nil :deck-opts nil :slide-opts nil :text-opts nil :export-level 0 :extern-components nil :extra-scripts nil :html-doctype "xhtml" :with-special-strings nil :html-container "div" :html-content-class "content" ...)) #f(compiled-function (element) #<bytecode -0xcfb5abd9b2cc608>)((paragraph (:begin 42 :end 71 :contents-begin 42 :contents-end 70 :post-blank 1 :post-affiliated 42 :parent (section (:begin 42 :end 494 :contents-begin 42 :contents-end 493 :post-blank 1 :post-affiliated 42 :parent (headline (:raw-value "The First Slide" :begin 23 :end 494 :pre-blank 1 :contents-begin 42 :contents-end 493 :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :post-blank 1 :footnote-section-p nil :archivedp nil :commentedp nil :post-affiliated 23 :title (...) :parent (org-data nil ... #33 ...)) #17)) #1 (paragraph (:begin 71 :end 208 :contents-begin 125 :contents-end 207 :post-blank 1 :post-affiliated 125 :attr_html (":width 200 :style {{ margin: \"2em\" }}") :parent #17) #(" " 0 3 (:parent #21)) (link (:type "https" :path "//formidable.com/open-source/spectacle/svg/formida..." :format bracket :raw-link "https://formidable.com/open-source/spectacle/svg/f..." :application nil :search-option nil :begin 128 :end 206 :contents-begin nil :contents-end nil :post-blank 0 :parent #21)) #("\n" 0 1 (:parent #21))) (src-block (:language "html" :switches nil :parameters nil :begin 208 :end 493 :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value " <Slide>\n <Text>This is the first slide.</Te..." :post-blank 0 :post-affiliated 273 :attr_html (":margin {2} :width {900} :showLineNumbers {true}") :parent #17)))) #("This is the first slide.\n" 0 25 (:parent #1)))) mapconcat(#f(compiled-function (element) #<bytecode -0xcfb5abd9b2cc608>) ((paragraph (:begin 42 :end 71 :contents-begin 42 :contents-end 70 :post-blank 1 :post-affiliated 42 :parent (section (:begin 42 :end 494 :contents-begin 42 :contents-end 493 :post-blank 1 :post-affiliated 42 :parent (headline (:raw-value "The First Slide" :begin 23 :end 494 :pre-blank 1 :contents-begin 42 :contents-end 493 :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :post-blank 1 :footnote-section-p nil :archivedp nil :commentedp nil :post-affiliated 23 :title ... :parent ...) #19)) . #2)) #("This is the first slide.\n" 0 25 (:parent #3))) (paragraph (:begin 71 :end 208 :contents-begin 125 :contents-end 207 :post-blank 1 :post-affiliated 125 :attr_html (":width 200 :style {{ margin: \"2em\" }}") :parent (section (:begin 42 :end 494 :contents-begin 42 :contents-end 493 :post-blank 1 :post-affiliated 42 :parent (headline (:raw-value "The First Slide" :begin 23 :end 494 :pre-blank 1 :contents-begin 42 :contents-end 493 :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :post-blank 1 :footnote-section-p nil :archivedp nil :commentedp nil :post-affiliated 23 :title ... :parent ...) #22)) . #2)) #(" " 0 3 (:parent #4)) (link (:type "https" :path "//formidable.com/open-source/spectacle/svg/formida..." :format bracket :raw-link "https://formidable.com/open-source/spectacle/svg/f..." :application nil :search-option nil :begin 128 :end 206 :contents-begin nil :contents-end nil :post-blank 0 :parent #4)) #("\n" 0 1 (:parent #4))) (src-block (:language "html" :switches nil :parameters nil :begin 208 :end 493 :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value " <Slide>\n <Text>This is the first slide.</Te..." :post-blank 0 :post-affiliated 273 :attr_html (":margin {2} :width {900} :showLineNumbers {true}") :parent (section (:begin 42 :end 494 :contents-begin 42 :contents-end 493 :post-blank 1 :post-affiliated 42 :parent (headline (:raw-value "The First Slide" :begin 23 :end 494 :pre-blank 1 :contents-begin 42 :contents-end 493 :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :post-blank 1 :footnote-section-p nil :archivedp nil :commentedp nil :post-affiliated 23 :title ... :parent ...) #37)) . #2)))) "") org-export-data((section (:begin 42 :end 494 :contents-begin 42 :contents-end 493 :post-blank 1 :post-affiliated 42 :parent (headline (:raw-value "The First Slide" :begin 23 :end 494 :pre-blank 1 :contents-begin 42 :contents-end 493 :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :post-blank 1 :footnote-section-p nil :archivedp nil :commentedp nil :post-affiliated 23 :title (...) :parent (org-data nil ... #17 ...)) #1)) (paragraph (:begin 42 :end 71 :contents-begin 42 :contents-end 70 :post-blank 1 :post-affiliated 42 :parent #1) #("This is the first slide.\n" 0 25 (:parent #4))) (paragraph (:begin 71 :end 208 :contents-begin 125 :contents-end 207 :post-blank 1 :post-affiliated 125 :attr_html (":width 200 :style {{ margin: \"2em\" }}") :parent #1) #(" " 0 3 (:parent #5)) (link (:type "https" :path "//formidable.com/open-source/spectacle..." :format bracket :raw-link "https://formidable.com/open-source/spe..." :application nil :search-option nil :begin 128 :end 206 :contents-begin nil :contents-end nil :post-blank 0 :parent #5)) #("\n" 0 1 (:parent #5))) (src-block (:language "html" :switches nil :parameters nil :begin 208 :end 493 :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value " <Slide>\n <Text>This is the firs..." :post-blank 0 :post-affiliated 273 :attr_html (":margin {2} :width {900} :showLineNumb...") :parent #1))) (:export-options nil :back-end #s(org-export-backend :name spectacle :parent html :transcoders ((template . ox-spectacle--template) (inner-template . ox-spectacle--inner-template) (headline . ox-spectacle--headline) (section . ox-spectacle--section) (src-block . ox-spectacle--src-block) (quote-block . ox-spectacle--quote-block) (center-block . ox-spectacle--center-block) (code . ox-spectacle--code) (verbatim . ox-spectacle--verbatim) (plain-list . ox-spectacle--plain-list) (item . ox-spectacle--item) (table . ox-spectacle--table) (table-row . ox-spectacle--table-row) (table-cell . ox-spectacle--table-cell) (link . ox-spectacle--link) (paragraph . ox-spectacle--paragraph) (plain-text . ox-spectacle--plain-text) (latex-fragment . ox-spectacle--latex-fragment)) :options ((:theme "THEME" nil ox-spectacle-theme) (:template "TEMPLATE" nil ox-spectacle-template) (:transition "TRANSITION" nil ox-spectacle-transition) (:deck-opts "DECK_OPTS" nil ox-spectacle-deck-opts space) (:slide-opts "SLIDE_OPTS" nil ox-spectacle-slide-opts space) (:text-opts "TEXT_OPTS" nil ox-spectacle-text-opts space) (:export-level "EXPORT_LEVEL" 0 ox-spectacle-export-level) (:extern-components "EXTERN_COMPONENTS" nil ox-spectacle-extern-components split) (:extra-scripts "EXTRA_SCRIPTS" nil ox-spectacle-extra-scripts split) (:html-doctype nil nil ox-spectacle--doctype) (:with-special-strings nil nil)) :filters ((:filter-options . ox-spectacle--init-filter) (:filter-parse-tree . ox-spectacle--parse-tree-filter) (:filter-final-output . org-html-final-function)) :blocks nil :menu (115 "Export to Spectacle.js Presentation" ((83 "As buffer" ox-spectacle-export-to-buffer) (115 "As html file" ox-spectacle-export-to-file) (111 "As html file and open" ox-spectacle-export-to-file-and-browser)))) :translate-alist ((template . ox-spectacle--template) (inner-template . ox-spectacle--inner-template) (headline . ox-spectacle--headline) (section . ox-spectacle--section) (src-block . ox-spectacle--src-block) (quote-block . ox-spectacle--quote-block) (center-block . ox-spectacle--center-block) (code . ox-spectacle--code) (verbatim . ox-spectacle--verbatim) (plain-list . ox-spectacle--plain-list) (item . ox-spectacle--item) (table . ox-spectacle--table) (table-row . ox-spectacle--table-row) (table-cell . ox-spectacle--table-cell) (link . ox-spectacle--link) (paragraph . ox-spectacle--paragraph) (plain-text . ox-spectacle--plain-text) (latex-fragment . ox-spectacle--latex-fragment) (bold . org-html-bold) (center-block . org-html-center-block) (clock . org-html-clock) (code . org-html-code) (drawer . org-html-drawer) (dynamic-block . org-html-dynamic-block) (entity . org-html-entity) (example-block . org-html-example-block) (export-block . org-html-export-block) (export-snippet . org-html-export-snippet) (fixed-width . org-html-fixed-width) (footnote-reference . org-html-footnote-reference) (headline . org-html-headline) (horizontal-rule . org-html-horizontal-rule) (inline-src-block . org-html-inline-src-block) (inlinetask . org-html-inlinetask) (inner-template . org-html-inner-template) (italic . org-html-italic) (item . org-html-item) (keyword . org-html-keyword) ...) :exported-data #<hash-table eq 3/4001 0x1fe470306565> :input-buffer "test-spectacle.org" :input-file "/Users/tomyli/Downloads/test-spectacle..." :theme nil :template "template" :transition nil :deck-opts nil :slide-opts nil :text-opts nil :export-level 0 :extern-components nil :extra-scripts nil :html-doctype "xhtml" :with-special-strings nil :html-container "div" :html-content-class "content" ...)) #f(compiled-function (element) #<bytecode -0xcfb5abd9b2cc608>)((section (:begin 42 :end 494 :contents-begin 42 :contents-end 493 :post-blank 1 :post-affiliated 42 :parent (headline (:raw-value "The First Slide" :begin 23 :end 494 :pre-blank 1 :contents-begin 42 :contents-end 493 :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :post-blank 1 :footnote-section-p nil :archivedp nil :commentedp nil :post-affiliated 23 :title (#("The First Slide" 0 15 (:parent #17))) :parent (org-data nil (section (:begin 1 :end 23 :contents-begin 1 :contents-end 22 :post-blank 1 :post-affiliated 1 :parent #55) (keyword ...)) #17 (headline (:raw-value "The Second Slide" :begin 494 :end 781 :pre-blank 1 :contents-begin 514 :contents-end 781 :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :post-blank 0 :footnote-section-p nil :archivedp nil :commentedp nil :post-affiliated 494 :title ... :parent #55) (section ... ... ...)))) #1)) (paragraph (:begin 42 :end 71 :contents-begin 42 :contents-end 70 :post-blank 1 :post-affiliated 42 :parent #1) #("This is the first slide.\n" 0 25 (:parent #4))) (paragraph (:begin 71 :end 208 :contents-begin 125 :contents-end 207 :post-blank 1 :post-affiliated 125 :attr_html (":width 200 :style {{ margin: \"2em\" }}") :parent #1) #(" " 0 3 (:parent #5)) (link (:type "https" :path "//formidable.com/open-source/spectacle/svg/formida..." :format bracket :raw-link "https://formidable.com/open-source/spectacle/svg/f..." :application nil :search-option nil :begin 128 :end 206 :contents-begin nil :contents-end nil :post-blank 0 :parent #5)) #("\n" 0 1 (:parent #5))) (src-block (:language "html" :switches nil :parameters nil :begin 208 :end 493 :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value " <Slide>\n <Text>This is the first slide.</Te..." :post-blank 0 :post-affiliated 273 :attr_html (":margin {2} :width {900} :showLineNumbers {true}") :parent #1)))) mapconcat(#f(compiled-function (element) #<bytecode -0xcfb5abd9b2cc608>) ((section (:begin 42 :end 494 :contents-begin 42 :contents-end 493 :post-blank 1 :post-affiliated 42 :parent (headline (:raw-value "The First Slide" :begin 23 :end 494 :pre-blank 1 :contents-begin 42 :contents-end 493 :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :post-blank 1 :footnote-section-p nil :archivedp nil :commentedp nil :post-affiliated 23 :title (#("The First Slide" 0 15 ...)) :parent (org-data nil (section ... ...) #19 (headline ... ...))) . #2)) (paragraph (:begin 42 :end 71 :contents-begin 42 :contents-end 70 :post-blank 1 :post-affiliated 42 :parent #3) #("This is the first slide.\n" 0 25 (:parent #6))) (paragraph (:begin 71 :end 208 :contents-begin 125 :contents-end 207 :post-blank 1 :post-affiliated 125 :attr_html (":width 200 :style {{ margin: \"2em\" }}") :parent #3) #(" " 0 3 (:parent #7)) (link (:type "https" :path "//formidable.com/open-source/spectacle/svg/formida..." :format bracket :raw-link "https://formidable.com/open-source/spectacle/svg/f..." :application nil :search-option nil :begin 128 :end 206 :contents-begin nil :contents-end nil :post-blank 0 :parent #7)) #("\n" 0 1 (:parent #7))) (src-block (:language "html" :switches nil :parameters nil :begin 208 :end 493 :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value " <Slide>\n <Text>This is the first slide.</Te..." :post-blank 0 :post-affiliated 273 :attr_html (":margin {2} :width {900} :showLineNumbers {true}") :parent #3)))) "") org-export-data((headline (:raw-value "The First Slide" :begin 23 :end 494 :pre-blank 1 :contents-begin 42 :contents-end 493 :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :post-blank 1 :footnote-section-p nil :archivedp nil :commentedp nil :post-affiliated 23 ...) (section (:begin 42 :end 494 :contents-begin 42 :contents-end 493 :post-blank 1 :post-affiliated 42 :parent #1) (paragraph (:begin 42 :end 71 :contents-begin 42 :contents-end 70 :post-blank 1 :post-affiliated 42 :parent #4) #("This is the first slide.\n" 0 25 ...)) (paragraph (:begin 71 :end 208 :contents-begin 125 :contents-end 207 :post-blank 1 :post-affiliated 125 :attr_html ... :parent #4) #(" " 0 3 ...) (link ...) #("\n" 0 1 ...)) (src-block (:language "html" :switches nil :parameters nil :begin 208 :end 493 :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value " <Slide>\n <Text>This is th..." :post-blank 0 :post-affiliated 273 :attr_html ... :parent #4)))) (:export-options nil :back-end #s(org-export-backend :name spectacle :parent html :transcoders ((template . ox-spectacle--template) (inner-template . ox-spectacle--inner-template) (headline . ox-spectacle--headline) (section . ox-spectacle--section) (src-block . ox-spectacle--src-block) (quote-block . ox-spectacle--quote-block) (center-block . ox-spectacle--center-block) (code . ox-spectacle--code) (verbatim . ox-spectacle--verbatim) (plain-list . ox-spectacle--plain-list) (item . ox-spectacle--item) (table . ox-spectacle--table) (table-row . ox-spectacle--table-row) (table-cell . ox-spectacle--table-cell) (link . ox-spectacle--link) (paragraph . ox-spectacle--paragraph) (plain-text . ox-spectacle--plain-text) (latex-fragment . ox-spectacle--latex-fragment)) :options ((:theme "THEME" nil ox-spectacle-theme) (:template "TEMPLATE" nil ox-spectacle-template) (:transition "TRANSITION" nil ox-spectacle-transition) (:deck-opts "DECK_OPTS" nil ox-spectacle-deck-opts space) (:slide-opts "SLIDE_OPTS" nil ox-spectacle-slide-opts space) (:text-opts "TEXT_OPTS" nil ox-spectacle-text-opts space) (:export-level "EXPORT_LEVEL" 0 ox-spectacle-export-level) (:extern-components "EXTERN_COMPONENTS" nil ox-spectacle-extern-components split) (:extra-scripts "EXTRA_SCRIPTS" nil ox-spectacle-extra-scripts split) (:html-doctype nil nil ox-spectacle--doctype) (:with-special-strings nil nil)) :filters ((:filter-options . ox-spectacle--init-filter) (:filter-parse-tree . ox-spectacle--parse-tree-filter) (:filter-final-output . org-html-final-function)) :blocks nil :menu (115 "Export to Spectacle.js Presentat..." (... ... ...))) :translate-alist ((template . ox-spectacle--template) (inner-template . ox-spectacle--inner-template) (headline . ox-spectacle--headline) (section . ox-spectacle--section) (src-block . ox-spectacle--src-block) (quote-block . ox-spectacle--quote-block) (center-block . ox-spectacle--center-block) (code . ox-spectacle--code) (verbatim . ox-spectacle--verbatim) (plain-list . ox-spectacle--plain-list) (item . ox-spectacle--item) (table . ox-spectacle--table) (table-row . ox-spectacle--table-row) (table-cell . ox-spectacle--table-cell) (link . ox-spectacle--link) (paragraph . ox-spectacle--paragraph) (plain-text . ox-spectacle--plain-text) (latex-fragment . ox-spectacle--latex-fragment) (bold . org-html-bold) (center-block . org-html-center-block) (clock . org-html-clock) (code . org-html-code) (drawer . org-html-drawer) (dynamic-block . org-html-dynamic-block) (entity . org-html-entity) (example-block . org-html-example-block) (export-block . org-html-export-block) (export-snippet . org-html-export-snippet) (fixed-width . org-html-fixed-width) (footnote-reference . org-html-footnote-reference) (headline . org-html-headline) (horizontal-rule . org-html-horizontal-rule) ...) :exported-data #<hash-table eq 3/4001 0x1fe470306565> :input-buffer "test-spectacle.org" :input-file "/Users/tomyli/Downloads/test-spe..." :theme nil :template "template" :transition nil :deck-opts nil :slide-opts nil :text-opts nil :export-level 0 :extern-components nil :extra-scripts nil :html-doctype "xhtml" ...)) #f(compiled-function (element) #<bytecode -0xcfb5abd9b2cc608>)((headline (:raw-value "The First Slide" :begin 23 :end 494 :pre-blank 1 :contents-begin 42 :contents-end 493 :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :post-blank 1 :footnote-section-p nil :archivedp nil :commentedp nil :post-affiliated 23 :title (#("The First Slide" 0 15 (:parent #1))) :parent (org-data nil (section (:begin 1 :end 23 :contents-begin 1 :contents-end 22 :post-blank 1 :post-affiliated 1 :parent #39) (keyword (:key "TITLE" :value "Demo Slides" :begin 1 :end 22 :post-blank 0 :post-affiliated 1 :parent #42))) #1 (headline (:raw-value "The Second Slide" :begin 494 :end 781 :pre-blank 1 :contents-begin 514 :contents-end 781 :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :post-blank 0 :footnote-section-p nil :archivedp nil :commentedp nil :post-affiliated 494 :title (#("The Second Slide" 0 16 ...)) :parent #39) (section (:begin 514 :end 781 :contents-begin 514 :contents-end 781 :post-blank 0 :post-affiliated 514 :parent #44) (paragraph (:begin 514 :end 582 :contents-begin 562 :contents-end 581 :post-blank 1 :post-affiliated 562 :attr_html ... :parent #47) #(" List And Appear\n" 0 19 ...)) (plain-list (:type unordered :begin 582 :end 781 :contents-begin 582 :contents-end 781 :structure ... :post-blank 0 :post-affiliated 582 :parent #47) (item ... ...) (item ... ... ...) (item ... ...)))))) (section (:begin 42 :end 494 :contents-begin 42 :contents-end 493 :post-blank 1 :post-affiliated 42 :parent #1) (paragraph (:begin 42 :end 71 :contents-begin 42 :contents-end 70 :post-blank 1 :post-affiliated 42 :parent #4) #("This is the first slide.\n" 0 25 (:parent #7))) (paragraph (:begin 71 :end 208 :contents-begin 125 :contents-end 207 :post-blank 1 :post-affiliated 125 :attr_html (":width 200 :style {{ margin: \"2em\" }}") :parent #4) #(" " 0 3 (:parent #8)) (link (:type "https" :path "//formidable.com/open-source/spectacle/svg/formida..." :format bracket :raw-link "https://formidable.com/open-source/spectacle/svg/f..." :application nil :search-option nil :begin 128 :end 206 :contents-begin nil :contents-end nil :post-blank 0 :parent #8)) #("\n" 0 1 (:parent #8))) (src-block (:language "html" :switches nil :parameters nil :begin 208 :end 493 :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value " <Slide>\n <Text>This is the first slide.</Te..." :post-blank 0 :post-affiliated 273 :attr_html (":margin {2} :width {900} :showLineNumbers {true}") :parent #4))))) mapconcat(#f(compiled-function (element) #<bytecode -0xcfb5abd9b2cc608>) ((section (:begin 1 :end 23 :contents-begin 1 :contents-end 22 :post-blank 1 :post-affiliated 1 :parent (org-data nil . #2)) (keyword (:key "TITLE" :value "Demo Slides" :begin 1 :end 22 :post-blank 0 :post-affiliated 1 :parent #3))) (headline (:raw-value "The First Slide" :begin 23 :end 494 :pre-blank 1 :contents-begin 42 :contents-end 493 :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :post-blank 1 :footnote-section-p nil :archivedp nil :commentedp nil :post-affiliated 23 :title (#("The First Slide" 0 15 (:parent #4))) :parent (org-data nil . #2)) (section (:begin 42 :end 494 :contents-begin 42 :contents-end 493 :post-blank 1 :post-affiliated 42 :parent #4) (paragraph (:begin 42 :end 71 :contents-begin 42 :contents-end 70 :post-blank 1 :post-affiliated 42 :parent #7) #("This is the first slide.\n" 0 25 (:parent #10))) (paragraph (:begin 71 :end 208 :contents-begin 125 :contents-end 207 :post-blank 1 :post-affiliated 125 :attr_html (":width 200 :style {{ margin: \"2em\" }}") :parent #7) #(" " 0 3 (:parent #11)) (link (:type "https" :path "//formidable.com/open-source/spectacle/svg/formida..." :format bracket :raw-link "https://formidable.com/open-source/spectacle/svg/f..." :application nil :search-option nil :begin 128 :end 206 :contents-begin nil :contents-end nil :post-blank 0 :parent #11)) #("\n" 0 1 (:parent #11))) (src-block (:language "html" :switches nil :parameters nil :begin 208 :end 493 :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value " <Slide>\n <Text>This is the first slide.</Te..." :post-blank 0 :post-affiliated 273 :attr_html (":margin {2} :width {900} :showLineNumbers {true}") :parent #7)))) (headline (:raw-value "The Second Slide" :begin 494 :end 781 :pre-blank 1 :contents-begin 514 :contents-end 781 :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :post-blank 0 :footnote-section-p nil :archivedp nil :commentedp nil :post-affiliated 494 :title (#("The Second Slide" 0 16 (:parent #5))) :parent (org-data nil . #2)) (section (:begin 514 :end 781 :contents-begin 514 :contents-end 781 :post-blank 0 :post-affiliated 514 :parent #5) (paragraph (:begin 514 :end 582 :contents-begin 562 :contents-end 581 :post-blank 1 :post-affiliated 562 :attr_html (":type Heading :fontFamily serif") :parent #8) #(" List And Appear\n" 0 19 (:parent #11))) (plain-list (:type unordered :begin 582 :end 781 :contents-begin 582 :contents-end 781 :structure ((582 3 "- " nil nil nil 611) (611 3 "- " nil nil nil 759) (630 5 "1. " nil nil nil 664) (664 5 "2. " nil nil nil 759) (733 8 "+ " nil nil nil 759) (759 3 "- " nil nil nil 781)) :post-blank 0 :post-affiliated 582 :parent #8) (item (:bullet "- " :begin 582 :end 611 :contents-begin 587 :contents-end 611 :checkbox nil :counter nil :structure (... ... ... ... ... ...) :pre-blank 0 :post-blank 0 :post-affiliated 582 :tag nil :parent #12) (paragraph (:begin 587 :end 611 :contents-begin 587 :contents-end 611 :post-blank 0 :post-affiliated 587 :parent #15) #("Once, there was a river\n" 0 24 ...))) (item (:bullet "- " :begin 611 :end 759 :contents-begin 616 :contents-end 759 :checkbox nil :counter nil :structure (... ... ... ... ... ...) :pre-blank 0 :post-blank 0 :post-affiliated 611 :tag nil :parent #12) (paragraph (:begin 616 :end 630 :contents-begin 616 :contents-end 630 :post-blank 0 :post-affiliated 616 :parent #16) #("Full of water\n" 0 14 ...)) (plain-list (:type ordered :begin 630 :end 759 :contents-begin 630 :contents-end 759 :structure ... :post-blank 0 :post-affiliated 630 :parent #16) (item ... ...) (item ... ... ...))) (item (:bullet "- " :begin 759 :end 781 :contents-begin 764 :contents-end 781 :checkbox nil :counter nil :structure (... ... ... ... ... ...) :pre-blank 0 :post-blank 0 :post-affiliated 759 :tag nil :parent #12) (paragraph (:begin 764 :end 781 :contents-begin 764 :contents-end 781 :post-blank 0 :post-affiliated 764 :parent #17) #("This is the story" 0 17 ...))))))) "") org-export-data((org-data nil (section (:begin 1 :end 23 :contents-begin 1 :contents-end 22 :post-blank 1 :post-affiliated 1 :parent #1) (keyword (:key "TITLE" :value "Demo Slides" :begin 1 :end 22 :post-blank 0 :post-affiliated 1 :parent #4))) (headline (:raw-value "The First Slide" :begin 23 :end 494 :pre-blank 1 :contents-begin 42 :contents-end 493 :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :post-blank 1 :footnote-section-p nil :archivedp nil :commentedp nil :post-affiliated 23 ...) (section (:begin 42 :end 494 :contents-begin 42 :contents-end 493 :post-blank 1 :post-affiliated 42 :parent #5) (paragraph ... ...) (paragraph ... ... ... ...) (src-block ...))) (headline (:raw-value "The Second Slide" :begin 494 :end 781 :pre-blank 1 :contents-begin 514 :contents-end 781 :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :post-blank 0 :footnote-section-p nil :archivedp nil :commentedp nil :post-affiliated 494 ...) (section (:begin 514 :end 781 :contents-begin 514 :contents-end 781 :post-blank 0 :post-affiliated 514 :parent #6) (paragraph ... ...) (plain-list ... ... ... ...)))) (:export-options nil :back-end #s(org-export-backend :name spectacle :parent html :transcoders ((template . ox-spectacle--template) (inner-template . ox-spectacle--inner-template) (headline . ox-spectacle--headline) (section . ox-spectacle--section) (src-block . ox-spectacle--src-block) (quote-block . ox-spectacle--quote-block) (center-block . ox-spectacle--center-block) (code . ox-spectacle--code) (verbatim . ox-spectacle--verbatim) (plain-list . ox-spectacle--plain-list) (item . ox-spectacle--item) (table . ox-spectacle--table) (table-row . ox-spectacle--table-row) (table-cell . ox-spectacle--table-cell) (link . ox-spectacle--link) (paragraph . ox-spectacle--paragraph) (plain-text . ox-spectacle--plain-text) (latex-fragment . ox-spectacle--latex-fragment)) :options ((:theme "THEME" nil ox-spectacle-theme) (:template "TEMPLATE" nil ox-spectacle-template) (:transition "TRANSITION" nil ox-spectacle-transition) (:deck-opts "DECK_OPTS" nil ox-spectacle-deck-opts space) (:slide-opts "SLIDE_OPTS" nil ox-spectacle-slide-opts space) (:text-opts "TEXT_OPTS" nil ox-spectacle-text-opts space) (:export-level "EXPORT_LEVEL" 0 ox-spectacle-export-level) (:extern-components "EXTERN_COMPONENTS" nil ox-spectacle-extern-components split) (:extra-scripts "EXTRA_SCRIPTS" nil ox-spectacle-extra-scripts split) (:html-doctype nil nil ox-spectacle--doctype) (:with-special-strings nil nil)) :filters ((:filter-options . ox-spectacle--init-filter) (:filter-parse-tree . ox-spectacle--parse-tree-filter) (:filter-final-output . org-html-final-function)) :blocks nil :menu (115 "Export to Spectacle.js Presentat..." (... ... ...))) :translate-alist ((template . ox-spectacle--template) (inner-template . ox-spectacle--inner-template) (headline . ox-spectacle--headline) (section . ox-spectacle--section) (src-block . ox-spectacle--src-block) (quote-block . ox-spectacle--quote-block) (center-block . ox-spectacle--center-block) (code . ox-spectacle--code) (verbatim . ox-spectacle--verbatim) (plain-list . ox-spectacle--plain-list) (item . ox-spectacle--item) (table . ox-spectacle--table) (table-row . ox-spectacle--table-row) (table-cell . ox-spectacle--table-cell) (link . ox-spectacle--link) (paragraph . ox-spectacle--paragraph) (plain-text . ox-spectacle--plain-text) (latex-fragment . ox-spectacle--latex-fragment) (bold . org-html-bold) (center-block . org-html-center-block) (clock . org-html-clock) (code . org-html-code) (drawer . org-html-drawer) (dynamic-block . org-html-dynamic-block) (entity . org-html-entity) (example-block . org-html-example-block) (export-block . org-html-export-block) (export-snippet . org-html-export-snippet) (fixed-width . org-html-fixed-width) (footnote-reference . org-html-footnote-reference) (headline . org-html-headline) (horizontal-rule . org-html-horizontal-rule) ...) :exported-data #<hash-table eq 3/4001 0x1fe470306565> :input-buffer "test-spectacle.org" :input-file "/Users/tomyli/Downloads/test-spe..." :theme nil :template "template" :transition nil :deck-opts nil :slide-opts nil :text-opts nil :export-level 0 :extern-components nil :extra-scripts nil :html-doctype "xhtml" ...)) org-export-as(spectacle nil nil nil (:output-file "test-spectacle.html")) org-export-to-file(spectacle "test-spectacle.html" nil nil nil nil nil) (progn (fset 'org-html--make-attribute-string 'ox-spectacle--make-attribute-string) (fset 'string-trim 'org-trim) (org-export-to-file 'spectacle file async subtreep visible-only body-only ext-plist)) (unwind-protect (progn (fset 'org-html--make-attribute-string 'ox-spectacle--make-attribute-string) (fset 'string-trim 'org-trim) (org-export-to-file 'spectacle file async subtreep visible-only body-only ext-plist)) (fset 'org-html--make-attribute-string old) (fset 'string-trim old)) (let* ((old (symbol-function 'org-html--make-attribute-string)) (old (symbol-function 'string-trim))) (unwind-protect (progn (fset 'org-html--make-attribute-string 'ox-spectacle--make-attribute-string) (fset 'string-trim 'org-trim) (org-export-to-file 'spectacle file async subtreep visible-only body-only ext-plist)) (fset 'org-html--make-attribute-string old) (fset 'string-trim old))) (let* ((extension (concat "." (or (plist-get ext-plist :html-extension) org-html-extension "html"))) (file (org-export-output-file-name extension subtreep)) (org-export-coding-system 'utf-8)) (let* ((old (symbol-function 'org-html--make-attribute-string)) (old (symbol-function 'string-trim))) (unwind-protect (progn (fset 'org-html--make-attribute-string 'ox-spectacle--make-attribute-string) (fset 'string-trim 'org-trim) (org-export-to-file 'spectacle file async subtreep visible-only body-only ext-plist)) (fset 'org-html--make-attribute-string old) (fset 'string-trim old)))) ox-spectacle-export-to-file(nil nil nil nil nil) (expand-file-name (ox-spectacle-export-to-file async subtreep visible-only body-only ext-plist)) (browse-url-of-file (expand-file-name (ox-spectacle-export-to-file async subtreep visible-only body-only ext-plist))) ox-spectacle-export-to-file-and-browser(nil nil nil nil) org-export-dispatch(nil) funcall-interactively(org-export-dispatch nil) command-execute(org-export-dispatch)
Hi, thanks for such a nice contribution for Emacs! I was playing around with your library and I can't get the LaTeX equations working. Could you please give me an example on how to write a slide with a LaTeX equation and a table?
Thanks!
控制台报错:DevTools 无法加载来源映射:无法加载 https://unpkg.com/spectacle@%5E4/dist/spectacle.js.map 的内容:HTTP 错误:状态代码 404,
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.