org-slideboard shows an Org file as slides inside Emacs. It is made for files written for beamer export: beamer columns, equations, tables, macros and code blocks are shown much as they would be in the PDF, while the text stays live Org that can be edited, and code that can be run, during the presentation.
For a tour, open demo.org and run M-x org-slideboard-start-slideshow
to see a presentation about org-slideboard, in which each slide uses
the feature it describes. It also serves as a template for your own
presentations.
org-slideboard is not yet on MELPA, so install it from this repository.
With Emacs 30 or later, use-package can fetch it directly:
(use-package org-slideboard
:vc (:url "https://github.com/vikasrawal/org-slideboard")
:commands org-slideboard-start-slideshow)With Emacs 29, install it once with M-x package-vc-install RET
https://github.com/vikasrawal/org-slideboard RET, then use
(use-package org-slideboard :commands org-slideboard-start-slideshow).
M-x package-vc-upgrade updates it.
With straight.el:
(use-package org-slideboard
:straight (:host github :repo "vikasrawal/org-slideboard")
:commands org-slideboard-start-slideshow)Or clone the repository and add it to the load path:
(add-to-list 'load-path "/path/to/org-slideboard")
(require 'org-slideboard)Once it is on MELPA, (use-package org-slideboard :ensure t) will be
enough.
It needs Emacs 28.1 and Org 9.6 or later. org-modern, ESS and python-mode are used when installed, but are not required.
org-slideboard does not bind function keys, which Emacs reserves for users; see Changing the keys to add your own.
org-slideboard offers:
- Beamer columns side by side: frames with
:BMCOL:/:BEAMER_col:children are shown as a title strip above one window per column. - Images fitted to the column: plots are drawn by org-slideboard itself and scaled to the width and height of their window.
- Text size under your control: all frames of all slides share one text
size, which
C-=andC--change;C-c }andC-c {(or Emacs’s zoom keys) change a single frame. Titles keep their size. - Information strip: a line at the bottom (or top) of every slide with author, title, slide number, or whatever you choose.
- Aligned tables: tables are aligned to what is displayed, including expanded macros, equation images and proportional fonts.
- Reflowed paragraphs: hard-wrapped source lines are joined on screen, as LaTeX would do.
- Clutter hidden: property drawers,
#+NAME:,#+RESULTS:,#+ATTR_*:lines, non-exported source blocks and raw LaTeX lines are not shown. - Equations sized to the text: LaTeX math is previewed at the size of
the text and follows it when the size changes, and beamer-only
#+LATEX_HEADER:lines no longer leak into the equation images. - Macros expanded:
{{{macro(...)}}}is shown as its expansion, and a macro can be given its own definition for the show. - Code and results: a slide can show only the results of a source block,
or the results above its code (or beside it);
C-c C-cupdates the results, and editing the block shows it next to a running R or Python REPL. - Title page and section pages: generated (and animated) from
#+TITLE,#+AUTHOR,#+DATEand from the headings above the slides. - Beautification during the presentation only: org-modern, variable-pitch text and hidden emphasis and macro markers are switched on for the presentation and turned off afterwards.
- COMMENT headings skipped, as in beamer export.
A slide is a heading with the :slide: tag. For a beamer file with
#+OPTIONS: H:2, tag every level-2 heading:
* Section title ** Frame title :slide:
Add tags:nil to #+OPTIONS so the tag is not printed in the beamer output:
#+OPTIONS: toc:nil H:2 tags:nil
To tag all level-2 headings of a file at once, evaluate this in the file’s buffer:
(org-map-entries (lambda () (org-toggle-tag "slide" 'on)) "LEVEL=2")Slides under a COMMENT heading (or with COMMENT in their own
heading) are skipped, so the presentation has the same frames as the
PDF. Un-commenting a heading brings its slide back, since it keeps
its tag.
Columns are written exactly as for beamer: children of the slide heading with
a BEAMER_col property (or the BMCOL tag).
** Title :slide: *** Left :BMCOL: :PROPERTIES: :BEAMER_col: 0.5 :END: [[file:image-8.png]] *** Right :BMCOL: :PROPERTIES: :BEAMER_col: 0.45 :END: + First point + Second point
The column widths on screen are proportional to the BEAMER_col values. A
column without a width gets an equal share. Text between the slide heading
and the first column is shown in a full-width frame above the columns.
The title page is made from these keywords:
| Keyword | Shown as |
|---|---|
#+TITLE: | title (bold) |
#+SUBTITLE: | subtitle |
#+AUTHOR: | author (italic) |
#+DATE: | date (italic) |
LaTeX in these values is tidied up: \\ starts a new line, \today becomes
today’s date, \and becomes a comma, and other commands are dropped while
their text is kept. Empty keywords are left out. Without #+TITLE, the
file name is used, as beamer does.
A section page is shown before the first slide under each heading that sits above the slides, e.g. each level-1 heading when the slides are level-2 headings. A section whose slides are all commented out gets no page.
| Command | Does |
|---|---|
M-x org-slideboard-start-slideshow | start at the beginning (the title page) |
M-x org-slideboard-open-slide | start at the slide containing point |
M-x org-slideboard-stop-slideshow | stop and restore the buffer |
During the show, an org-slideboard menu in the menu bar has these commands and the others of the show.
Stopping removes the column windows and their buffers, un-hides everything, turns off the beautification modes that the presentation turned on, and widens the buffer.
Starting and stopping do not change the buffer: the tags of slide headings are hidden with overlays.
During a show, these keys work in the windows of the slides: the title strip, the frames, and the title and section pages.
| Key | Command |
|---|---|
PgDn | next step, or the next slide |
PgUp | previous step, or the previous slide |
C-c C-f | next section |
C-c C-b | start of this section, or the previous |
C-c ; | show the current slide again |
C-= | larger text in all frames of all slides |
C-- | smaller text in all frames of all slides |
C-c } | larger text in the selected frame only |
C-c { | smaller text in the selected frame only |
C-c > | everything larger: text, titles, header |
C-c < | everything smaller |
M-ESC g | go to slide number |
M-ESC t | table of contents |
M-ESC q | stop the presentation |
M-ESC p | save the slides as a PDF |
M-ESC 0 | text and frame sizes back to the start |
M-ESC e | all slides editable, or all read-only |
They are not active in other buffers, such as a REPL, another file or the
buffer where a code block is edited, so your own keys keep working there
during the show. They avoid C-c plus a letter, which are yours. C-c ;,
C-c { / C-c } and C-c < / C-c > are keys Org itself uses
(commenting a heading, table formula tools, and the calendar); in slide
windows the show’s keys take precedence, and everywhere else they keep
their Org meaning. If you need those Org commands during a show, or any
of these keys clash with your own, change them as described below.
On a slide with code and results (see Code and results), these work in the code window:
| Key | Command |
|---|---|
C-c C-c | run the code and show the new results |
C-c ' | edit the code next to a running REPL (or your own key for org-edit-special) |
The keys of the show are in org-slideboard-keys-mode-map, and those of the
code window in org-slideboard-code-mode-map. To change, add or remove a
key, set it in the map after org-slideboard is loaded:
(with-eval-after-load 'org-slideboard
;; your own keys for the text size, instead of C-= and C--
(define-key org-slideboard-keys-mode-map (kbd "C-=") nil)
(define-key org-slideboard-keys-mode-map (kbd "C--") nil)
(define-key org-slideboard-keys-mode-map (kbd "<f9>") #'org-slideboard-increase-text-size)
(define-key org-slideboard-keys-mode-map (kbd "S-<f9>") #'org-slideboard-decrease-text-size)
;; function keys
(define-key org-slideboard-keys-mode-map [f6] #'org-slideboard-execute-slide)
(define-key org-slideboard-keys-mode-map [f7] #'org-slideboard-next-slide)
(define-key org-slideboard-keys-mode-map [f8] #'org-slideboard-previous-slide))A key set to nil falls back to your own binding. With Emacs 29 or later,
keymap-set does the same, e.g.
(keymap-set org-slideboard-keys-mode-map "<f6>" #'org-slideboard-execute-slide).
With use-package, use :bind with :map:
(use-package org-slideboard
:bind (:map org-slideboard-keys-mode-map
("<f6>" . org-slideboard-execute-slide)
("C-c ;" . nil)))Keys bound globally, e.g. (global-set-key (kbd "<f5>")
#'org-slideboard-start-slideshow), also work in slide windows unless the
show uses the same key.
Emacs’s own zoom keys (C-x C-=, C-x C--, C-x C-0, Ctrl+mouse wheel)
change the size of the selected frame during a show, see Text size. To
keep them as plain Emacs zoom, set org-slideboard-zoom-resizes-frame to
nil.
M-ESC t lists all slides, including “Title page: …” and “Section: …”
entries, as links. Clicking a link goes to that slide; q closes the list.
M-x org-slideboard-export-pdf (M-ESC p during the show) saves the
presentation as a PDF, one page per slide, drawn exactly as it is shown:
the columns, fonts, equations, and faded and highlighted steps. Title and
section pages are included, without the animation, and a slide built up
in steps gets a page for each step, as in a beamer PDF; with
org-slideboard-export-steps set to last (or #+SLIDEBOARD:
export-steps:last), it gets only its last step.
The pages are vector PDF, so the text stays sharp, and they have the size of the Emacs frame: make the frame the shape you want (e.g. full screen) first. The show is started if it is not running, and stopped again at the end; otherwise it comes back to the slide it was on.
This needs Emacs built with Cairo (CAIRO in
system-configuration-features), and pdfunite (poppler), qpdf or
Ghostscript to join the pages.
The column windows show indirect buffers of the presentation file, narrowed to the column. Their text is the file’s text, so edits made during the show go straight into the file.
- Each slide has a title strip at the top, with its heading, and below
it one or more frames (windows, with mode lines hidden):
- the body of a slide without columns;
- text between the heading and the first beamer column or code block, in a full-width frame;
- one frame per beamer column, and for code and results (see Code and results).
- Title and section pages use a separate buffer,
*org-slideboard-page*, with the text centred. Iforg-slideboard-animate-pagesis on, the lines are animated in; any key press skips the animation.
Every slide has a one-line strip at the bottom, like beamer’s footline, with
the author on the left, the title in the middle and the slide number on the
right. Title and section pages have none. What it shows is set by
org-slideboard-footline, a list of up to three parts, shown left, centre
and right:
(setq org-slideboard-footline '("%a" "%t" "%n / %N")) ; the defaultIn each part these are replaced; any other text is shown as it is:
| Escape | Replaced by |
|---|---|
%t | title (#+TITLE:) |
%s | subtitle (#+SUBTITLE:) |
%a | author (#+AUTHOR:) |
%d | date (#+DATE:) |
%S | the section heading above the slide |
%h | the heading of the slide |
%n | number of the slide |
%N | number of slides |
%% | a % |
Some examples:
;; section on the left, date on the right, nothing in the middle
(setq org-slideboard-footline '("%S" "" "%d"))
;; any text
(setq org-slideboard-footline '("Workshop on food balance sheets, Rome" "" "%n / %N"))
;; a part can be a function, called at the slide heading
(setq org-slideboard-footline
(list "%a" "%t" (lambda () (format-time-string "%H:%M"))))
;; at the top instead
(setq org-slideboard-footline-position 'top)
;; no strip
(setq org-slideboard-footline nil)For one presentation:
#+SLIDEBOARD: footline:("%a" "%S" "%n / %N") footline-position:top
#+SLIDEBOARD: footline:nil
(In a file, the parts must be strings; functions can only be set in your
configuration.) The title, author and date are tidied as on the title
page: LaTeX line breaks and commands are removed and macros expanded. The
strip uses the face org-slideboard-footline (grey, a little smaller than
the text) and is not changed by the size keys.
A heading tagged :header: is shown above the title of every slide. It
is written like a slide: its beamer columns are the left, centre and
right parts of the header, and they can have formatted text, macros and
images. Tag it :noexport: as well, so the beamer export leaves it out.
* Header :header:noexport:
** Left :BMCOL:
:PROPERTIES:
:BEAMER_col: 0.3
:END:
[[file:logo.png]]
** Centre :BMCOL:
:PROPERTIES:
:BEAMER_col: 0.4
:END:
#+begin_center
*Food Balance Sheets*, {{{date}}}
#+end_center
** Right :BMCOL:
:PROPERTIES:
:BEAMER_col: 0.3
:END:
#+begin_flushright
/Rome, 2026/
#+end_flushright
- The parts are laid out like beamer columns: each starts at the left of
its share of the width (its
BEAMER_colvalue), and its lines can be centred in it with#+begin_centeror put flush right with#+begin_flushright, which beamer understands too. A part wider than its share pushes the next one to the right. A header without columns is one part, the whole width. - A percentage width on an image (
#+ATTR_ORG: :width 20%) is a share of its part, and images are kept within their part. - A
\vspace{0.5cm}line in a part adds blank space there, e.g. below the text to leave room above the slide title (see Vertical space); blank lines at the end of a part are dropped. Other raw LaTeX lines are left out of the header. - The header is as high as its content, up to
org-slideboard-header-height(0.15) of the frame; images are scaled to fit. An#+ATTR_ORG: :height 40line above an image in the header sets its size. Its text size isorg-slideboard-header-text-scale(0). - Its look is the face
org-slideboard-header, which is the default face of the header: a:backgroundgives a band of colour across the slide. The beautify modes of the slides (e.g.variable-pitch-mode) apply to it too. - The header is shown on the slides and on the section pages. A slide, or
a section with all its slides, with the property
SLIDEBOARD_HEADERset tonilhas no header. The title page has none. - The tag is
org-slideboard-header-tag.
Image links ([[file:plot.png]]) are drawn by org-slideboard with their own
overlays. Each image is scaled down to at most
org-slideboard-image-width-fraction of the window width and
org-slideboard-image-height-fraction of its height.
An #+ATTR_ORG: line above an image sets its own size, with :width or
:height in pixels or as a percentage of the window; the limits above
still apply. It can come before or after other attribute lines such as
#+ATTR_LATEX: or #+RESULTS:, so the beamer export keeps its own size:
#+ATTR_ORG: :width 60% #+ATTR_LATEX: :width 0.5\textwidth [[file:plot.png]]
Drawings made with el-easydraw ([[edraw:file=drawing.edraw.svg]] and
[[edraw:data…]]= links) are shown the same way when el-easydraw is
loaded: scaled to their window or column, and sized by #+ATTR_ORG: like
other images. Clicking a drawing during the show still opens el-easydraw’s
editor. Without el-easydraw, the links are shown as links.
This does not depend on org-image-actual-width or other inline image
settings. An image
file that has changed since it was last shown, e.g. a plot rewritten by a
code block, is read again, so C-c ; (or C-c C-c in a code window) shows
the new version rather than the one Emacs cached. When the presentation stops,
the image previews are put back as they were: Org’s inline images (and
el-easydraw’s drawings) are shown again if they were shown before the
show, and not otherwise.
Each part of the show has its own text size: the frames of a slide
(org-slideboard-text-scale, 2), the slide titles
(org-slideboard-title-text-scale, 2), the header
(org-slideboard-header-text-scale, 0) and the title and section pages
(org-slideboard-page-text-scale, 5). Text is never shrunk to fit.
C-c > and C-c < change all of them together, one step at a time, so
everything on the slides grows or shrinks and the titles keep their size
relative to the text. The keys below change the frames only.
All frames of all slides start at org-slideboard-text-scale (2, in steps
of text-scale-mode). There are two ways to change it during the show:
| Keys | Changes |
|---|---|
C-= / C-- | all frames of all slides |
C-c } / C-c { | the selected frame of this slide only |
Emacs zoom: C-x C-=, C-x C--, Ctrl+wheel | the selected frame of this slide only |
C-x C-0 | the selected frame back to the common size |
C-c > / C-c < | everything: text, titles, header and pages |
M-ESC 0 | everything back to how the show started (text and frame sizes) |
A frame changed on its own keeps its size when you come back to the slide,
and moves with C-= / C--: a frame one step larger stays one step larger
than the others. Use it for a slide with more text than fits in one of its
frames. M-ESC 0 undoes all of it at once: every frame of every slide goes
back to the size the show started with. Stopping the show does the same,
so the next show starts at the usual size again. To keep Emacs’s zoom
keys as plain zoom, which is lost when the slide is shown again, set
org-slideboard-zoom-resizes-frame to nil. All these keys can be changed,
see Changing the keys.
To start every show at another size, set org-slideboard-text-scale, or
#+SLIDEBOARD: text-scale:3 for one presentation (title-scale: for
titles).
One slide (or all the slides of a section) can have its own sizes, e.g. smaller text for a slide with a wide table:
** Processed products :slide: :PROPERTIES: :SLIDEBOARD_TEXT_SCALE: -1 :SLIDEBOARD_TITLE_SCALE: 1 :END:
SLIDEBOARD_TEXT_SCALE can also be set on a beamer column, for the text of
that column only; the other columns keep the slide’s size.
The values are like those of text-scale: and title-scale:: steps of
text-scale-mode (×1.2 each by default) from the size of Emacs’s
default face, 0. Negative values make text smaller than that, e.g. -1
is about 0.83 and -2 about 0.69 times it; the usual slide text, 2, is
about 1.44 times it. The keys above still work on such a slide: C-= /
C-- and C-c > / C-c < move it by as many steps as the other slides,
and C-c { / C-c } change its frames on top of that.
The size of equations relative to the text can be set the same way, for
a slide, a section or a beamer column, with SLIDEBOARD_LATEX_SIZE. It
replaces org-slideboard-latex-size (latex-size:, 0.8 by default)
there, e.g. for a formula made of \text{...} that looks too large:
** Supply :slide: :PROPERTIES: :SLIDEBOARD_LATEX_SIZE: 0.6 :END:
Code and results start with org-slideboard-src-code-width (0.5) of the
space for the code, and beamer columns with their BEAMER_col widths. When
that does not suit the content, change it during the show:
- Drag with the mouse the line between two frames: the grey bar between
code and results one above the other, or the divider between frames side
by side (
org-slideboard-divider-width, 6 pixels, only during the show). - Or use Emacs’s keys in a frame:
C-x ^makes it taller,C-x }andC-x {wider and narrower.
The slide is then shown again with the new sizes, so plots are scaled to
their new window, and the slide keeps these sizes when you come back to it.
This works for code and results, for code and results inside a column, and
between beamer columns. M-ESC 0 puts all frames back to their usual
sizes, as does stopping the show.
LaTeX math ($...$, \(...\), \[...\], $$...$$ and environments
such as equation or align*) is previewed as images, as with C-c C-x
C-l, and laid out for the slides:
- Sized to the text: equations are shown at
org-slideboard-latex-size(0.8) times the size of the text font. The 10pt LaTeX font is matched to the text font by measuring a preview image, so this works with any font, withvariable-pitch-mode, and whatever:scaleis set inorg-format-latex-options. Use 1.0 for math as large as the text. - Follows the text: equations grow and shrink with the text when its size
is changed with
C-=/C--. - Sharp: the images are rendered at
org-slideboard-latex-scale(4.0) and displayed smaller. Withdvisvgm(SVG) they are sharp at any size; withdvipnga higher render scale gives sharper but slower images. - New latex preview: with the
org-latex-previewlibrary of Org’s development branch (Org 10), Org itself sizes the images to the text and makes them in the background. org-slideboard then uses it: equations are still shown atorg-slideboard-latex-size, centred if asked and kept free of beamer settings, butorg-slideboard-latex-scaleis not used. Each equation is set up as soon as its image is ready. - Faster equations: with Org 10, only pdflatex can reuse a
precompiled preamble, so it is much faster than xelatex. If your
files need xelatex for export (e.g. fontspec), set
org-slideboard-latex-compilerto"pdflatex"and leave the fontspec lines out of the slide previews withorg-slideboard-latex-preview-drop-regexp. - Left aligned: display equations start at the left margin, like the
text. Set
org-slideboard-center-display-mathtotto centre them in the window or column, as LaTeX does. Inline math always stays in the text. - Own lines: display equations inside a paragraph keep their own lines when the paragraph is rewrapped.
- Never wider than the window: numbered environments such as
equationare as wide as a LaTeX page, since the number is at the right margin, so they may be shrunk to fit. For big equations, useequation*or\[...\]. - Named equations: an environment with a
#+NAME:line is shown; the name line is hidden with the other clutter. - No beamer settings in the images: Org previews equations with the
article class, but adds the file’s
#+LATEX_HEADER:lines. Beamer commands there, such as\setbeamersize{description width=0.1cm}, are unknown to article, and LaTeX prints their arguments in every equation. During the show, lines matchingorg-slideboard-latex-preview-drop-regexp(\setbeamer...,\use...theme,\AtBegin...,\logo,\titlegraphic,\institute) are left out of the preview preamble. Other headers, such as\usepackage{amsmath}or\newcommand, are kept. Outside the show,C-c C-x C-lstill uses the full preamble.
When the presentation stops, the equation images are removed, since
they were made for the slides; press C-c C-x C-l to preview again. The
images are cached (in ltximg/, see org-preview-latex-image-directory),
so a slide is slow only the first time it is shown.
For example, for slightly larger, centred equations in one presentation:
#+SLIDEBOARD: latex-size:1.0 center-math:t
For one slide, section or beamer column, use the SLIDEBOARD_LATEX_SIZE
property (see Text size).
The text of a slide is drawn by Emacs, in its own font (sans-serif with
variable-pitch-mode, for instance), but an equation is an image made by
LaTeX. Words in an equation, such as \text{Production} or
\mathrm{d}x, are therefore in LaTeX’s document font: Computer Modern
Roman, a serif font, unless the preamble sets another. The fontspec
lines that set the font of a beamer export with xelatex are not read by
pdflatex, and are usually left out of the previews (see
org-slideboard-latex-preview-drop-regexp), so they do not help here.
For sans-serif words in equations, as in beamer, set the font in a
#+LATEX_HEADER: line, which the previews use too and beamer export
accepts:
#+LATEX_HEADER: \renewcommand{\familydefault}{\sfdefault}
This gives Computer Modern Sans. For a closer match to the slide font,
load a pdflatex package for that font instead, e.g.
\usepackage[sfdefault]{FiraSans} for Fira Sans, and make sure
org-slideboard-latex-preview-drop-regexp does not leave the line out.
Math letters such as x stay italic either way.
Org macros ({{{name(arguments)}}}) are shown on the slides as their
expansion, with overlays, so the file is not changed. Many macros expand
to LaTeX that means nothing on screen, so a macro can be given a separate
definition for the show. The expansion is chosen in this order:
- A
#+SLIDEBOARD_MACRO:line in the file, written like a#+MACRO:line. Beamer and other exporters ignore it. For example, to show only the text of a cell-colour macro:#+MACRO: cc @@latex:\cellcolor{$1}$2@@ #+SLIDEBOARD_MACRO: cc $2 - An entry in
org-slideboard-macro-templates, in the configuration. The template is a string like the above, or a function that gets the arguments and returns the text to show, which may have faces. For example, to show the text on a coloured background:(setq org-slideboard-macro-templates '(("cc" . (lambda (color text) (propertize text 'face `(:background ,color))))))
- Org’s own expansion, as in export: the
#+MACRO:definitions and the built-in macros ({{{title}}},{{{author}}},{{{date}}},{{{time(%Y)}}},{{{n}}},{{{keyword(...)}}},{{{property(...)}}}and so on). Export snippets for other back-ends, such as@@latex:...@@, are left out. The contents of@@slideboard:...@@snippets are kept, so one#+MACRO:line can also carry its show version:#+MACRO: cc @@latex:\cellcolor{$1}$2@@@@slideboard:$2@@
A macro whose expansion is empty is left out of the slide, with the
blanks after it. That is a macro for other back-ends only, e.g.
#+MACRO: SC @@latex:\SetCell[r=$1,c=$2]{c}@@, so a table cell
{{{SC(2,1)}}} Crops shows Crops; or one with an empty show definition,
#+SLIDEBOARD_MACRO: SC. A macro that is not defined at all is left as
it is, with its braces hidden (org-slideboard-hide-macro-markers).
Expansions are shown as Org text: *bold* and /italic/ in an
expansion look as they do on the slide, and macros inside an expansion
are expanded too. Macros in #+TITLE, #+AUTHOR etc. are expanded on
the title page. #+MACRO: definitions that evaluate Lisp ((eval
...)) are not expanded, so starting a show never runs code from the
file; use org-slideboard-macro-templates for those. Tables with macros stay
aligned, see Tables.
To turn expansion off, set org-slideboard-expand-macros to nil (or
#+SLIDEBOARD: macros:nil).
Org aligns a table by the characters in the file, but on a slide a cell
can show something of another width: an expanded macro, an equation image
($\times$), or text in a proportional font. During the show, every Org
table is aligned to what is actually displayed: the width of each cell is
measured in the window, and the blanks around it are shown as space of the
right width, so the | separators line up. Numbers, which Org aligns to
the right, stay right-aligned, and horizontal rules are drawn to the column
widths. This is redone whenever the text size changes.
Only the display changes; the file is not. To keep Org’s own layout, set
org-slideboard-align-tables to nil (or #+SLIDEBOARD: align-tables:nil).
A row of column width and alignment cookies, such as | <l> | <r10> |
(see Column Width and Alignment in the Org manual), is hidden on the
slides, as export leaves it out, and does not count for the column
widths. Org still aligns the cells as the cookies say. Like other
clutter, it stays visible if org-slideboard-hide-clutter is nil.
Org tables cannot merge cells, so org-slideboard has its own markers: a
cell that holds just << is part of the cell on its left, and one that
holds just ^^ is part of the cell above. The text stays in the first
cell.
| Production | << | Trade | |------------+-------+---------| | Area | Yield | Exports | | Crops | Wheat | 10 | | ^^ | Rice | 20 |
On the slide, Production is centred across two columns, the cell below
Crops is blank, and a rule inside a merged cell is not drawn across it.
To Org it is an ordinary table, so editing, TAB and formulas work as
usual.
In LaTeX and beamer export, a cell merged across columns becomes
\multicolumn{2}{c}{Production} (and the << cells are left out), and
one merged across rows \multirow{2}{*}{Crops}, which needs
\usepackage{multirow} (e.g. in a #+LATEX_HEADER: line). No other
package is needed. Other back-ends leave the merged cells empty. The
export changes only the copy that is exported, never the file; set
org-slideboard-export-table-spans to nil to leave tables alone. The
markers are set by org-slideboard-table-span-markers.
The text of a merged cell is centred; a cell merged across rows has its text in its top row.
A slide with a source block can show only the block’s results, only its
code, or both. This is set by org-slideboard-src-display:
| Value | Shows |
|---|---|
exports | what each block’s :exports says (the default): code, results, both or none |
results | only the results of every block |
both | the code and the results of every block |
It can be set for the whole presentation, for one file or for one slide (or all slides of a section, since the property is inherited):
#+SLIDEBOARD: src:both ** Growth of the herd :slide: :PROPERTIES: :SLIDEBOARD_SRC: results :END:
The drawer is hidden on the slide, and beamer export ignores both. Blocks
with :exports none are always hidden. Code that is shown is no longer
folded to its #+begin_src line.
With both, the first such block of a slide is shown like beamer columns:
text before the block at the top, then the code and the results, with any
text after them, in two windows. They are arranged by
org-slideboard-src-split:
| Value | Code | Results |
|---|---|---|
lr | left | right |
rl | right | left |
tb | top | bottom |
bt | bottom | top |
The value names where the code goes and then where the results go, like
rankdir in Graphviz (LR, TB). bt, the results above the code,
is the default.
A number from 1 to 99 after the value is the results’ share, in percent,
of the height (tb, bt) or of the width (lr, rl): tb60 puts the
code at the top and gives the results at the bottom 60% of the height, and
lr30 gives the results on the right 30% of the width. Without a number,
the code gets org-slideboard-src-code-width (0.5).
It can be set for the whole presentation, for one file, and for one slide
or section with the property SLIDEBOARD_SRC_SPLIT:
#+SLIDEBOARD: src-split:tb ** A long plot :slide: :PROPERTIES: :SLIDEBOARD_SRC_SPLIT: tb60 :END:
Without a share in the value, org-slideboard-src-code-width (0.5) is the
code’s share of the width (side by side) or of the height (top to bottom). Plots in the results are
scaled to their window. The code window shows
the whole block, including its #+begin_src and #+end_src lines. When
code and results are one above the other (tb, bt), a grey bar in the
face org-slideboard-divider separates them; its :background sets the
colour and its :height the thickness. Drag it to change their heights,
see Resizing frames.
When a beamer column holds a block to be shown with its results, that
column is divided in two: its text before the block and the code in one
window, and the results with any text after them in the other. The column
heading can have its own SLIDEBOARD_SRC and SLIDEBOARD_SRC_SPLIT, e.g. to
show the code of a block exported as results only, with the results below
the code:
*** Model :BMCOL: :PROPERTIES: :BEAMER_col: 0.6 :SLIDEBOARD_SRC: both :SLIDEBOARD_SRC_SPLIT: tb :END:
SLIDEBOARD_SRC_SPLIT (and src-split:) only arrange code and results that
are both shown; whether the code is shown at all is set by SLIDEBOARD_SRC
(src:) or, by default, the block’s :exports.
Each column is divided on its own, so several columns can each show code and results. All windows of the slide get the same text size.
In the code window, C-c C-c runs the block, as it would in Org, and shows
the slide again with the new results, keeping point in the code. In a
column’s code window, which also holds the text before the block, it runs
the block even when point is in that text. The
results are written to the file as usual. Running a block of the
presentation any other way during the show also updates the slide.
Opening the block for editing in the code window (C-c ', or whatever key
runs org-edit-special) shows the editing buffer, e.g. ESS R mode, on the
left and a running REPL on the right, where the code can be evaluated with
the usual keys (C-RET, C-c C-c in ESS; C-c C-c in Python mode).
- A block with a
:sessionuses that session, in any language. - A block without one gets the REPL from
org-slideboard-src-repl-functions: ESS R forRandrun-pythonforpython, started if not running. For ESS, the editing buffer is connected to that R process.
Closing the editor (C-c ' or C-c C-k) shows the slide again, with the
edited code. The REPLs keep running after the show. To add a language,
give a function that returns the REPL buffer, e.g. for Julia with the
julia-repl package:
(add-to-list 'org-slideboard-src-repl-functions
'("julia" . (lambda ()
(save-window-excursion (julia-repl))
(get-buffer "*julia*"))))Line breaks inside a paragraph are displayed as spaces, so hard-wrapped source text is rewrapped to the column width. The file is not changed.
A \vspace{1cm} line (on its own, or as #+BEAMER: \vspace{1cm} or
#+LATEX: \vspace{1cm}) is shown as blank space of that height, so the
same line adds space on the slide and in the beamer PDF:
First paragraph.
\vspace{1cm}
Second paragraph, 1cm lower.
The space takes the place of the blank lines around it, which in beamer
only end the paragraphs. Lengths in cm, mm, in, pt, em, ex and
\baselineskip are converted as on a beamer slide with 11pt text (a line
is about 0.48cm), in lines of the slide’s text, so the space grows with
the text size. A negative \vspace, often used to pull content up in
beamer, is hidden. Plain blank lines also show as blank lines on a
slide, but beamer ignores more than one.
By default the text runs from one edge of the frame to the other.
org-slideboard-margins leaves blank space at the left and right of the
slides: a fraction of the frame width for both sides, or a list
(LEFT RIGHT) of two fractions. Only the outer edges get a margin, not
the space between frames side by side. The title and the frames are
indented, and images are scaled to fit inside the margins; the
information strip and the title and section pages are not changed.
(setq org-slideboard-margins 0.08) ; 8% on each side
(setq org-slideboard-margins '(0.1 0.05)) ; 10% left, 5% rightFor one presentation, use #+SLIDEBOARD: margins:0.08. For one slide,
or all the slides of a section, use the property SLIDEBOARD_MARGINS:
** A quote :slide: :PROPERTIES: :SLIDEBOARD_MARGINS: (0.2 0.2) :END:
A slide can be built up in steps, as with beamer overlays. The key for the next slide shows the next step of the slide first, and the key for the previous slide goes back a step; going back to a slide shows it at its last step, as a beamer PDF does. The same Org syntax is used, so the beamer export builds the slide up in the same way:
- A list with an overlay:
#+ATTR_BEAMER: :overlay <+->before a list shows its items one at a time. - An item with its own step: an export snippet at the start of the
item, e.g.
- @@beamer:<3->@@ Comes at step 3(or@@b:<3->@@). It overrides the list’s overlay. - A heading with a step: a heading inside the slide, such as a block
or a column, with the property
BEAMER_ACT, e.g.<2->. - A pause:
#+BEAMER: \pause(or a\pauseline) shows the rest of the slide at the next step.
** A slide in steps :slide: #+ATTR_BEAMER: :overlay <+-> + First + Second + @@beamer:<4->@@ Last #+BEAMER: \pause Comes after the second item.
Specifications such as <2>, <2->, <-3>, <2-3>, <1,3->, <+->,
<invisible@2> and <alert@2> are understood; a \pause applies to
the rest of the slide.
By default, what is not shown yet takes no space: later text moves down
as it appears. With beamer’s \setbeamercovered{transparent} it is
drawn faded instead (face org-slideboard-covered), and alert@
highlights a part at the given steps (face org-slideboard-alert).
Together they give a list in which every item is on the slide, the
current one is highlighted, and the highlight moves with each step:
#+BEAMER: \setbeamercovered{transparent}
#+ATTR_BEAMER: :overlay <+| alert@+>
+ First
+ Second
+ Third
With <+| alert@+> the other items are all faded; with <+-| alert@+>
the items already passed stay in full colour; with <alert@+> every
item is in full colour and only the highlight moves. List bullets are
faded and highlighted with their items.
Faded and hidden parts can be mixed on one slide, as in beamer: with
only@ in the specification (or a heading with BEAMER_ENV onlyenv), a
part is left out until its step even when the others are faded. The
same goes for visible@ and invisible@.
#+BEAMER: \setbeamercovered{transparent}
+ @@beamer:<2->@@ Faded until step 2
+ @@beamer:<only@3->@@ Left out until step 3
The faded style is set by org-slideboard-covered (hidden or
transparent). It is taken from the file: a #+BEAMER_HEADER: or
#+LATEX_HEADER: line with \setbeamercovered{transparent} makes it
transparent for the whole presentation. It can also be set with
#+SLIDEBOARD: covered:transparent, and for one slide (or a section)
with a #+BEAMER: \setbeamercovered{transparent} line in the slide or
the property SLIDEBOARD_COVERED. Equations and images are pictures,
so they are not faded.
Lists are laid out with overlays, so the file is not changed:
- Bullets by depth: unordered items get the bullets in
org-slideboard-list-bulletsby nesting depth, whatever bullet character (+,-,*) is used in the file. The default'("●" "○" "■" "□")gives●for items,○for sub-items, and so on, starting again from the first for deeper lists. Numbered items keep their numbers. - Indentation: sub-items are indented by
org-slideboard-list-indent(4) spaces per level, in the text font, so the indentation scales with the text and is clear even in proportional text. - Wrapped lines: when an item wraps, the following lines start under
the item’s text, not at the left margin (
org-slideboard-hanging-indent).
- Description lists (=- Term
- text=) look as in beamer: no bullet, the
term in bold (face
org-slideboard-description-term) without the::, and wrapped lines indented byorg-slideboard-list-indentspaces.
- Numbered items keep their numbers, also when they follow bulleted items in the same list.
The bullets use the face org-slideboard-bullet (the level-1 heading colour,
bold, 1.3 times the text height). For example:
;; arrows and dashes
(setq org-slideboard-list-bullets '("➤" "–" "•"))
;; more indentation per level
(setq org-slideboard-list-indent 6)
;; bigger bullets (in use-package, :custom-face works in any load order)
(use-package org-slideboard
:custom-face
(org-slideboard-bullet ((t :inherit org-level-1 :weight bold :height 1.5))))Hidden clutter
When org-slideboard-hide-clutter is non-nil, the following are hidden:
- drawers: properties, logbook and any others (without Org’s “…” in their place)
#+NAME:,#+RESULTS:,#+CAPTION:and#+ATTR_*:lines- source blocks shown only as results (see Code and results), and
blocks with
:exports none; results, such as plots, stay visible slideboard-elispblocks- standalone raw LaTeX lines such as
\vspace{-0.5cm}(but not the lines of equations, such as\begin{equation}), and#+BEAMER:and#+LATEX:lines; a positive\vspaceis shown as space (see Vertical space) - blank lines left at the top of a column
- the
:slide:tag
LaTeX inside the text is hidden too, when it is marked as such:
- export snippets for other back-ends, such as
@@latex:\hfill@@, are hidden (whateverorg-slideboard-hide-cluttersays), and of a@@slideboard:...@@snippet only the contents are shown. This is the Org way to write text for the PDF only, or for the slides only. - for LaTeX written directly in the text,
#+SLIDEBOARD_HIDE:lines name strings to hide on the slides, and#+SLIDEBOARD_HIDE_REGEXP:lines Emacs regexps. If a regexp has a group, the group stays visible:#+SLIDEBOARD_HIDE: \mbox{} #+SLIDEBOARD_HIDE_REGEXP: \\mbox{\([^}]+\)}hides
\mbox{}, and shows\mbox{some text}assome text. Code, verbatim text, example and source blocks, and equations are left alone.
During the presentation, org-slideboard turns on the minor modes in
org-slideboard-beautify-modes in the slide buffers, and hides emphasis and
macro markers.
They are turned off when the presentation stops, unless they were already on
before. Normal editing is not affected.
The default, '(org-modern-mode variable-pitch-mode), gives:
- styled headings, from org-modern
- larger, coloured list bullets that change with depth:
●for items,○for sub-items, then■and□(org-slideboard-list-bullets, faceorg-slideboard-bullet); see Lists - proportional text, from the built-in
variable-pitch-mode *bold*shown as bold without the asterisks (org-slideboard-hide-emphasis-markers)- macros that are not expanded (see Macros) shown without their
braces, e.g.
cc(red,text)(org-slideboard-hide-macro-markers, which turns onorg-hide-macro-markers)
The bullets replace org-modern’s own (small) ones only during the show; org-modern is unchanged elsewhere.
Some modes are turned off during the presentation and back on when it stops:
those in org-slideboard-disable-modes, by default org-indent-mode (from
org-startup-indented), whose heading-level indentation and wrap prefixes
spoil the list layout, and display-line-numbers-mode, since line
numbers do not belong on slides.
org-modern’s tag labels are turned off during the show, since they would
show part of the hidden :slide: tag.
Modes that are not installed are skipped silently. org-superstar and org-bullets are not needed with org-modern, which does the same and more. org-appear only helps while editing.
Put any of these in the configuration (or evaluate with M-:), then start
the presentation again:
;; plain org, no beautification at all
(setq org-slideboard-beautify-modes nil)
;; org-modern only, fixed-width text
(setq org-slideboard-beautify-modes '(org-modern-mode))
;; variable-width text only, no org-modern
(setq org-slideboard-beautify-modes '(variable-pitch-mode))
;; keep the bullets as they are (org-modern's own, if it is on)
(setq org-slideboard-list-bullets nil)
;; keep line numbers during the presentation (only turn off org-indent)
(setq org-slideboard-disable-modes '(org-indent-mode))
;; keep the *, /, = emphasis markers visible
(setq org-slideboard-hide-emphasis-markers nil)
;; keep the {{{ }}} around macros visible
(setq org-slideboard-hide-macro-markers nil)Note: in variable-pitch text, code blocks can lose their alignment. Tables are re-aligned during the show (see Tables).
The slides use your Emacs faces: bold text, tables, links and so on look
as they do when you edit. To show some of them differently during the
show only, list them in org-slideboard-face-remaps, as a face and its
new attributes (or another face to use instead):
;; bold text in orange and tables in pink, on the slides only
(setq org-slideboard-face-remaps
'((bold :foreground "orange")
(org-table :foreground "pink")))or, with use-package:
(use-package org-slideboard
:custom
(org-slideboard-face-remaps '((bold :foreground "orange"))))The faces are changed in the slides, title and section pages, and back
when the show stops; other buffers are never changed. Faces that
inherit from a remapped one change too: description terms
(org-slideboard-description-term) inherit from bold, for example.
org-slideboard’s own faces, such as org-slideboard-bullet,
org-slideboard-header, org-slideboard-footline and
org-slideboard-page-title, are only used in the show, so customise them
directly (M-x customize-group RET org-slideboard).
Use this rather than a minor mode of your own in
org-slideboard-beautify-modes that remaps faces: each slide is shown
in a fresh copy of the buffer, where such a mode would be skipped.
While a slide is shown, the cursor is hidden, so it does not blink at
the audience. It comes back, as you have it, as soon as you move it,
click or type, and is hidden again when you go to another slide. The
text-size keys leave it as it is. #+SLIDEBOARD: hide-cursor:nil (or
org-slideboard-hide-cursor) leaves the cursor alone during the show.
During the show the presentation is read-only, so a stray key cannot
change a slide; typing into a slide says so and reminds you of the key
to edit it. To fix something on a slide, press C-x C-q in it and
edit: the edits go into the file (save with C-x C-s as usual). The
slide stays editable until you go to another slide, which is read-only
again. Running code (C-c C-c) still writes its results, and a block
edited with C-c ' can still be saved back. When the show stops, the
buffer is read-only only if it was before the show.
To edit a lot during the show, turn this off with #+SLIDEBOARD:
read-only:nil (or org-slideboard-read-only). Or, during the show,
press M-ESC e: the slide on screen and all the slides after it are
editable, just as with read-only:nil. Press it again to make them
all read-only. This lasts until the show stops.
A presentation can have its own Emacs theme, e.g. a light one for a projector, while you keep your usual theme for everything else:
#+SLIDEBOARD: theme:modus-operandi
The themes in use are switched off when the show starts and back on when
it stops. org-slideboard-theme sets one for every presentation. A theme
is Lisp code, so Emacs asks before loading one that is not in
custom-safe-themes (themes that come with Emacs are trusted); if you say
no, the show goes on with your theme. A misspelt name is reported and
ignored. The PDF of the show (M-ESC p) is made with the theme too, so a
light theme gives light pages.
Every setting below can be set globally (e.g. in your init file) and overridden for one presentation from inside its Org file, in two ways.
Put one or more lines like this near the top of the file:
#+SLIDEBOARD: modern:nil variable-pitch:t bullets:("➤" "–") image-width:0.7
#+SLIDEBOARD: animate:nil text-scale:3
The syntax is that of #+OPTIONS: key:value pairs separated by spaces,
with the values written as Lisp (t, nil, numbers, strings in double
quotes, lists in parentheses). The keyword is read each time a show starts,
so changes take effect at the next start. When the show stops, the previous
values come back. Beamer and other exporters ignore the keyword.
| Key | Setting | Value |
|---|---|---|
modern | add or remove org-modern-mode in the beautify modes | t / nil |
variable-pitch | add or remove variable-pitch-mode | t / nil |
modes | org-slideboard-beautify-modes | list of ...-mode symbols |
disable | org-slideboard-disable-modes | list of ...-mode symbols |
emphasis | org-slideboard-hide-emphasis-markers | t / nil |
macro-markers | org-slideboard-hide-macro-markers | t / nil |
macros | org-slideboard-expand-macros | t / nil |
align-tables | org-slideboard-align-tables | t / nil |
src | org-slideboard-src-display | exports / results / both |
code-width | org-slideboard-src-code-width | number |
src-split | org-slideboard-src-split | lr / rl / tb / bt, e.g. tb60 |
margins | org-slideboard-margins | number, (LEFT RIGHT), or nil |
covered | org-slideboard-covered | hidden / transparent |
bullets | org-slideboard-list-bullets | list of strings, or nil |
list-indent | org-slideboard-list-indent | number |
hanging | org-slideboard-hanging-indent | t / nil |
title-page | org-slideboard-title-page | t / nil |
section-pages | org-slideboard-section-pages | t / nil |
animate | org-slideboard-animate-pages | t / nil |
theme | org-slideboard-theme | theme name, or nil |
hide-cursor | org-slideboard-hide-cursor | t / nil |
read-only | org-slideboard-read-only | t / nil |
header-height | org-slideboard-header-height | number |
header-scale | org-slideboard-header-text-scale | number |
export-steps | org-slideboard-export-steps | all / last |
page-scale | org-slideboard-page-text-scale | number |
text-scale | org-slideboard-text-scale | number |
title-scale | org-slideboard-title-text-scale | number |
title-space | org-slideboard-title-space | number (fraction of the title height) |
image-width | org-slideboard-image-width-fraction | number |
image-height | org-slideboard-image-height-fraction | number |
clutter | org-slideboard-hide-clutter | t / nil |
latex-size | org-slideboard-latex-size | number |
latex-scale | org-slideboard-latex-scale | number |
center-math | org-slideboard-center-display-math | t / nil |
footline | org-slideboard-footline | list of up to three strings, or nil |
footline-position | org-slideboard-footline-position | bottom / top |
Unknown keys and invalid values are skipped with a message in the echo
area, and the show starts anyway. For safety, modes and disable only
accept symbols whose names end in -mode.
The usual Emacs mechanism also works, with a block at the end of the file:
# Local Variables:
# org-slideboard-text-scale: 3
# org-slideboard-list-bullets: ("➤" "–")
# org-slideboard-section-pages: nil
# End:
These are read when the file is opened, so after changing the block, re-open
the file (M-x revert-buffer). The simple settings (on/off flags, numbers
and the bullet list) are marked safe, so Emacs does not ask about them.
org-slideboard-beautify-modes and org-slideboard-disable-modes are not, since a file
could use them to turn on any mode; Emacs asks before using them (answer !
to accept a value permanently).
#+SLIDEBOARD: overrides a file-local variable, which overrides the global
value. A size changed with C-= / C-- during the show changes the value
that is in effect (the local one if there is one).
| Variable | Default | Meaning |
|---|---|---|
org-slideboard-text-scale | 2 | text size of the frames of all slides |
org-slideboard-title-text-scale | 2 | text size of slide titles |
org-slideboard-title-space | 0.25 | extra space below slide titles, as a fraction of their height |
org-slideboard-zoom-resizes-frame | t | Emacs’s zoom keys resize the selected frame for the show |
org-slideboard-divider-width | 6 | width in pixels of the draggable line between frames side by side |
org-slideboard-image-width-fraction | 0.8 | maximum image width, as a fraction of the window width |
org-slideboard-image-height-fraction | 0.8 | maximum image height, as a fraction of the window height |
org-slideboard-hide-clutter | t | hide drawers, keywords, src blocks and raw LaTeX |
org-slideboard-latex-size | 0.8 | size of equations relative to the text |
org-slideboard-latex-scale | 4.0 | scale at which equation images are rendered |
org-slideboard-center-display-math | nil | centre display equations |
org-slideboard-latex-preview-drop-regexp | beamer commands | preamble lines left out of equation previews |
org-slideboard-latex-compiler | nil | compiler for equation previews (nil: Org’s choice) |
org-slideboard-beautify-modes | '(org-modern-mode variable-pitch-mode) | modes turned on during the presentation |
org-slideboard-face-remaps | nil | faces shown differently during the presentation |
org-slideboard-disable-modes | '(org-indent-mode display-line-numbers-mode) | modes turned off during the presentation |
org-slideboard-list-bullets | '("●" "○" "■" "□") | list bullets by nesting depth |
org-slideboard-list-indent | 4 | indentation per list level, in spaces |
org-slideboard-hanging-indent | t | indent sub-items and align wrapped lines of items |
org-slideboard-hide-emphasis-markers | t | hide emphasis markers during the presentation |
org-slideboard-hide-macro-markers | t | hide the {{{ }}} of macros during the presentation |
org-slideboard-expand-macros | t | show macros as their expansion |
org-slideboard-macro-templates | nil | macro definitions for the show |
org-slideboard-align-tables | t | align tables to what is displayed |
org-slideboard-src-display | exports | show code, results or both, see Code and results |
org-slideboard-src-code-width | 0.5 | share of the width (or height) for the code, with code and results |
org-slideboard-src-split | bt | where code and results go: lr, rl, tb or bt |
org-slideboard-src-repl-functions | R and python | REPLs for editing blocks during the show |
org-slideboard-title-page | t | show a title page |
org-slideboard-section-pages | t | show section pages |
org-slideboard-animate-pages | t | animate the title and section pages |
org-slideboard-theme | nil | Emacs theme during the show (nil: keep the current one) |
org-slideboard-hide-cursor | t | hide the cursor until it is moved or used |
org-slideboard-read-only | t | the presentation is read-only during the show |
org-slideboard-page-text-scale | 5 | text scale of the title and section pages |
org-slideboard-slide-tag | “slide” | tag that marks slides |
org-slideboard-footline | '("%a" "%t" "%n / %N") | information strip on every slide, see Information strip |
org-slideboard-footline-position | bottom | where the information strip goes: bottom or top |
The title and section pages use these faces, which can be customized with
M-x customize-face:
| Face | Used for |
|---|---|
org-slideboard-page-title | title on the title page |
org-slideboard-page-subtitle | subtitle |
org-slideboard-page-info | author and date |
org-slideboard-page-section | heading on a section page |
org-slideboard-bullet | list bullets during the presentation |
org-slideboard-divider | bar between code and results, one above the other (drag it to resize) |
org-slideboard-footline | the information strip |
- Settings: all options are in the
org-slideboardcustomization group (M-x customize-group RET org-slideboard). Re-loading the file does not reset an option that is already set; usecustomize-set-variable, Customize, or restart Emacs. - Changing slides during a show: after adding, removing or
reordering slides, restart the presentation (or run
org-slideboard-initialize) to rebuild the slide list. - Beamer export is unchanged: the
:slide:tag is hidden bytags:nil, andBMCOLis handled by ox-beamer as before.
org-slideboard is based on org-show by John Kitchin, part of scimax, which in turn was based on Sacha Chua’s presentation code. Beamer columns, the title and section pages, equation, macro and table layout, and the code-and-results views were added by Vikas Rawal.
GPL-3.0 or later; see LICENSE.