Hello, While working on generating SVG images from text, I discovered that the "svg-print" function adds extra space in front of the XML representation of each child node. This is usually not a problem because, by default, extra spaces are ignored. But this becomes a problem, especially for text nodes, when the `xml:space' attribute is set to "preserve" to indicate that spaces in texts are not ignored. Because, in this case, the XML representation of the text node no longer corresponds to the original definition, including unwanted additional spaces. Here are two examples which illustrate the problem to be evaluated in the *scratch* buffer (emacs -Q): (require 'svg) ;; Simple text with extra spaces between words. (let* ((text "This buffer is for text that is not saved.") (w (* (length text) (default-font-width))) (h (* 1.5 (default-font-height))) (xmlspace "preserve") ;; Rendering preserves spaces. (svg (svg-create w h :xml:space xmlspace :stroke-width 0))) (svg-rectangle svg 0 0 w h :fill "blue") (svg-text svg text :y "1em" :fill "white") (insert-image (svg-image svg :scale 1))) ;; Aggregate texts separated by 1 space. (let* ((texts '("This buffer is " "for text that " "is not saved.")) (w (* (apply #'+ (mapcar #'length texts)) (default-font-width))) (h (* 1.5 (default-font-height))) (xmlspace "preserve") ;; Rendering preserves spaces. (svg (svg-create w h :xml:space xmlspace :stroke-width 0))) (svg-rectangle svg 0 0 w h :fill "blue") (dom-append-child svg (apply #'dom-node 'text '((y . "1em") (fill . "white")) texts)) (insert-image (svg-image svg :scale 1))) Since the extra space in front of the XML representation of each child node is unnecessary according to the SVG 1.1 specification, the attached V0 patch resolves this issue by removing the offending statement. The attached V1 patch is a proposal to go a step further by improving the documentation and using the DOM API to access parts of dom node. Thanks. In GNU Emacs 31.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.42, cairo version 1.18.0) of 2024-07-17 Repository revision: 3a790abd869ddadc343710deb0c4368227ba6611 Repository branch: master Windowing system distributor 'The X.Org Foundation', version 11.0.12014000 System Description: Fedora Linux 40 (KDE Plasma) Configured using: 'configure --with-x-toolkit=gtk3 --with-cairo-xcb --with-native-compilation=no PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig' Configured features: ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER WEBP X11 XDBE XIM XINPUT2 XPM GTK3 ZLIB Important settings: value of $LC_TIME: fr_FR.utf8 value of $LANG: fr_FR.UTF-8 locale-coding-system: utf-8-unix