Since Emacs version ‑tbf‑, Emacs can display Scalable Vector Graphics (SVG) files out of the box. Using C-C C-C
, you can switch between showing the graphics and showing the underlying SVG file. For the latter ‑ as SVG is pure XML ‑ the nXML mode is used. nXML mode allows you to edit the SVG file as you normally would edit any XML file.
As I write this, I use Emacs version 25.1.1 under MS Windows 10 Pro 21H2. I have observed the following issues, when viewing SVG content in Emacs:
symbol
element and "called" by the use
element, the content did not show.svg.el
The ELISP package svg.el
is part of standard Emacs since version 26.1. svg.el
is due to Lars Magne Ingebrigtsen and Felix Klee.
The main purpose of svg.el
is to programmatically create and manipulate SVG files using Emacs LISP.
In year 2014, Lars published the video https://www.youtube.com/watch?v=FWQB_9QcGI0. It show Emacs LISP code and below SVG file content, that changes in real-time (or may be after a key stroke). See also https://emacs.stackexchange.com/questions/46305/svg-in-realtime
Regards the LISP functions, that svg.el
provides, see https://www.gnu.org/software/emacs/manual/html_node/elisp/SVG-Images.html
The following grey circle SVG graphics was created using ELISP:
‑ Text before image is in a separate paragraph ‑
‑ Text immediately after image is in the same paragraph that contains the SVG ‑
The ELISP source code had been embedded in an org-mode document like so:
‑ Text before image is in a separate paragraph ‑ #+BEGIN_SRC emacs-lisp :exports results :results link file :file testSVG.el.svg (let ((svg (svg-create 200 200 :stroke-width 5 :stroke "green"))) (svg-circle svg 100 100 50 :fill-color "gray" ) (with-temp-buffer (svg-print svg) (buffer-string))) #+END_SRC #+RESULTS: [[file:testSVG.el.svg]] ‑ Text immediately after image is in the same paragraph that contains the SVG ‑
Hence the SVG graphics can be changed by changing the ELISP source code. Note the :exports results
setting: it suppresses the export of the ELISP source code when exporting to HTML code. The default is to show the ELISP code in the export.
The purpose of the Easy Draw package is to create and edit SVG in Emacs by using the mouse and the keyboard and draw on a canvas directly in Emacs. Please see more detail here.
canvas-mode
Similarely to Easy Draw, there is canvas-mode
due to Anand Tamariya. He published under https://gitlab.com/atamariya/emacs/-/blob/dev/lisp/svg.el an extended version of svg.al
, that adds canvas-mode
. Anand proposed in https://lists.gnu.org/archive/html/emacs-devel/2021-09/msg00798.html to have canvas-mode
added to the built-in svg.el
.