<> ---- **Name** ''tsvg'' - Thingy SVG writer - package to create svg image files with a syntax close to Tcl and to SVG. Using *cairosvg* writing PDF and PNG files is as well possible. **Description** [DDG] The package provides one command ''tsvg'' which can hold currently just a single svg code collection. All commands will be evaluated within the tsvg namespace, all unknown methods will be forwarded to the standard tsvg::tag method and produce svg code out of them. So `tsvg dummy x="20" hello` will produce: `hello` as output. If the tool https://cairosvg.org/%|%cairosvg%|% is installed as well PNG and PDF files can be written since version 0.3.0. **Links** * Homepage: https://github.com/mittelmark/DGTcl * Download: (Gitdown) https://downgit.github.io/#/home?url=https://github.com/mittelmark/DGTcl/tree/master/pandoc-tcl-filter/lib/tsvg * Manual: https://htmlpreview.github.io/?https://github.com/mittelmark/DGTcl/blob/master/pandoc-tcl-filter/lib/tsvg/tsvg.html * Version: 0.3.0 - 2021-12-01 * License: MIT **Example** Below a simple example to create a "Hello World!" figure: ====== package require tsvg tsvg circle cx 50 cy 50 r 45 stroke black stroke-width 2 fill salmon tsvg text x 29 y 45 Hello tsvg text x 27 y 65 World! tsvg write hello-world.svg ====== [tsvg-image] For more examples see the https://htmlpreview.github.io/?https://github.com/mittelmark/DGTcl/blob/master/pandoc-tcl-filter/lib/tsvg/tsvg.html%|%manual page%|%. Here an example for a procedure based on the tsvg package which can write Guitar and Ukulele Chord diagrams : ====== package require tsvg ## input like; tchords Am 2000 uke-am-chord.svg proc tchords {name cstring outfile} { tsvg set code "" tsvg set width 100 tsvg set height 255 set ystart 50 # draw title and top line tsvg text x 50 y 30 style "font: bold 24px sans-serif;" text-anchor middle $name tsvg line x1 10 y1 $ystart x2 92 y2 $ystart stroke-width 5 stroke black set inc [expr {80/([string length $cstring]-1)}] # draw vertical lines for { set x 0 } { $x < [string length $cstring] } { incr x } { tsvg line x1 [expr {11+($x*$inc)}] y1 $ystart x2 [expr {10+($x*$inc)}] y2 251 stroke-width 2 stroke black } # draw horizontal lines for { set x 0 } { $x < 5 } { incr x } { tsvg line x1 10 y1 [expr {$ystart+40+($x*40)}] x2 90 y2 [expr {$ystart+40+($x*40)}] stroke-width 2 stroke black for {set y 0} { $y < [string length $cstring] } { incr y } { if {[string range $cstring $y $y] == $x} { ## there is a string press here ... if {$x > 0} { tsvg circle cx [expr {10+1+($y*$inc)}] cy [expr {$ystart-20+($x*40)}] r 9 stroke maroon fill maroon } } ## muted strings? if {$x == 0 && [string range $cstring $y $y] == "x"} { tsvg text x [expr {10+1+($y*$inc)}] y 42 style "font: 20px sans-serif;" text-anchor middle x } } } tsvg write $outfile } ## examples: ## tchords G 320003 g-chord.svg ## tchords D xx0232 d-chord.svg ## tchords C 0003 uke-c-chord.svg ## tchords Csus4 0013 uke-c-sus4-chord.svg ====== And here how the output of these four commands at the bottom would look like: [tsvg-tchords] ---- **See also** * [Thingy: a one-liner OO system] - the toy OO behind *tsvg* * [tclcairo] - an other graphics library * [tdot] a thingy object to write [GraphViz] dot files ---- **Discussion** [DDG] - 2021-12-01 - Version 0.3.0 adds support for writing PNG and PDF files using an installation of ''cairosvg'' [DDG] - 2023-07-15 - added example to display chord diagram for string instruments like Guitar, Ukulele, etc. <> Package | Graphics | SVG | PDF | PNG | Music