<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Z Space Blog - Inkscape</title><link href="https://zlg.space/blog/" rel="alternate"/><link href="https://zlg.space/blog/feeds/t/inkscape.atom.xml" rel="self"/><id>https://zlg.space/blog/</id><updated>2019-04-07T18:29:00-07:00</updated><entry><title>Handcrafting an SVG Logo</title><link href="https://zlg.space/blog/handcrafted-svg.html" rel="alternate"/><published>2018-08-18T00:00:00-07:00</published><updated>2019-04-07T18:29:00-07:00</updated><author><name>zlg</name></author><id>tag:zlg.space,2018-08-18:/blog/handcrafted-svg.html</id><summary type="html">&lt;p&gt;If you've spent any time viewing diagrams on Wikipedia, you'll see notices on
some images that mention that the image was (re)written by hand to reduce its
size. Curious, I wanted to build something in &lt;a href="https://inkscape.org/"&gt;Inkscape&lt;/a&gt;, then rebuild
it by hand to see the difference. The old logo wasn't really working out any 
more, so it was a great opportunity to revisit the design and learn (yet) 
another markup language.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;If you've spent any time viewing diagrams on Wikipedia, you'll see notices on
some images that mention that the image was (re)written by hand to reduce its
size. Curious, I wanted to build something in &lt;a href="https://inkscape.org/"&gt;Inkscape&lt;/a&gt;, then rebuild
it by hand to see the difference. The old logo wasn't really working out any 
more, so it was a great opportunity to revisit the design and learn (yet) 
another markup language.&lt;/p&gt;


&lt;h1&gt;Step 0: Analyze your past work&lt;/h1&gt;
&lt;p&gt;This step may not be relevant if you're building an idea from scratch. For me,
the goal was to create a better logo than my previous one:&lt;/p&gt;
&lt;p&gt;&lt;img alt="the old ZLG logo" src="https://zlg.space/blog/images/logo-dev/old-logo.png"&gt;&lt;/p&gt;
&lt;p&gt;I asked, "What is this logo doing wrong?" Answering that was easy:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It's using a serifed font, while the website uses sans-serif. This can be
  ignored if you're aiming for a particular style, but it clashed with the soft,
  friendly lettering on what I call the "rounded squares on blue" theme. The
  font wasn't chosen with any particular purpose, and it shows.&lt;/li&gt;
&lt;li&gt;Why is it underlined? To separate it from the icons? Not a very intuitive
  choice.&lt;/li&gt;
&lt;li&gt;The icons don't appear to add much to the image. They represent &lt;em&gt;what I do&lt;/em&gt;,
  not &lt;em&gt;who I am&lt;/em&gt;. What's stopping me from adding a second row of unnecessary
  icons? A logo &lt;em&gt;is&lt;/em&gt; an icon.&lt;ul&gt;
&lt;li&gt;On that note, why did I write Hello World in C when nobody's going to read
  that text? It's showing line numbers for lines that don't have content,
  too.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The spacing between the Z and L is wider than between L and G.&lt;/li&gt;
&lt;li&gt;The spacing between the top of the icons, the line, and the bottom of the text
  isn't the same.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We'll let the last two slide for now. Overall, the logo is put together well:
it's evenly spaced around its edges and the three icons are equidistant to each
other. However, it's just a hodge podge of activities and a pseudonym with an
ill-suited font.&lt;/p&gt;
&lt;p&gt;We can do better than that.&lt;/p&gt;
&lt;h1&gt;Step 1: Sketch it out&lt;/h1&gt;
&lt;p&gt;Some people like to skip this step, but I consider it an important part of the
process. Whatever tool you use, try to use one with the least amount of
"resistance" between you and the idea. For me, it was a pencil and graph paper.
You could use a tablet, a Boogie Board, or your standard image editor. Whatever
you use, get the idea onto something, and tack on a few alternative ideas if you
have the room.&lt;/p&gt;
&lt;p&gt;&lt;img alt="sketch of new ZLG logo" src="https://zlg.space/blog/images/logo-dev/zlg-logo-sketch.jpg"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;There were a lot of ways to draw my logo. I sketched them all out and
brainstormed on possible alterations to improve the look.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Each glance at it got me a little psyched up about what it could be, until I
gave in and started &lt;a href="https://developer.mozilla.org/en-US/docs/Web/SVG"&gt;learning &lt;abbr title="Scalable Vector Graphics"&gt;SVG&lt;/abbr&gt;&lt;/a&gt;. Before that, I needed to move onto
the next step.&lt;/p&gt;
&lt;h1&gt;Step 2: Build it in a vector editor&lt;/h1&gt;
&lt;p&gt;I use &lt;a href="https://inkscape.org/"&gt;Inkscape&lt;/a&gt; for visual editing of &lt;abbr title="Scalable Vector Graphics"&gt;SVG&lt;/abbr&gt; files. Despite it
pushing out larger files than what you'd normally write by hand, it's useful
to transfer the sketch to the computer and, again, just &lt;em&gt;get it out there&lt;/em&gt;.
This process is iterative, so it's easier to have an image you can visually
manipulate. At this stage, I tried some variations and threw on a few guide
lines to see how I felt about the composition.&lt;/p&gt;
&lt;p&gt;Each glyph is a maximum of 8 × 8 blocks. I used 8px × 8px blocks, but you can
(and should) use larger ones -- a power of two, if possible -- to make your
image scaling-friendly. Letters have a line width of two blocks, and there must
be one block between glyphs. Seems easy enough, right? These opinions come from
working on pixel art and toying around with the grid when I made the
rounded-squares-on-blue site layout. Some designs work better in multiples of
three. Whatever you choose, make it consistent!&lt;/p&gt;
&lt;h1&gt;Step 3: Analyze your options&lt;/h1&gt;
&lt;p&gt;If you came up with enough ideas for your logo, there were probably a few ideas
that sucked. That's okay; use this step to determine which ones suck, &lt;em&gt;and why&lt;/em&gt;.
I'll go over a few of the ideas I had:&lt;/p&gt;
&lt;h2&gt;Draft 1&lt;/h2&gt;
&lt;p&gt;&lt;img alt="Draft 1 of the ZLG logo" src="https://zlg.space/blog/images/logo-dev/inkscape-1.png"&gt;&lt;/p&gt;
&lt;!-- naive double-right Z, frame L, double-right G --&gt;

&lt;p&gt;This was one of the first drafts. A neat property of the Z is it's a rotated
mirror of itself along its spine (see the diagonal blue line striking through
it). I like that, but the top and bottom arms look like I just sawed off the
ends without caring about how it looks. It almost looks like the Z has a drop
shadow, which isn't what I'm looking for.&lt;/p&gt;
&lt;p&gt;The L looks like someone cut a box in half diagonally. The bottom leg is too
long. Shortening it by one block will give it a more natural shape, since we
don't normally write L's with such a long leg.&lt;/p&gt;
&lt;p&gt;The G actually looks kinda slick since the edges line up and have the
"razor cut" feel. Still, there's a little &lt;em&gt;too&lt;/em&gt; much parallelism happening for
me.&lt;/p&gt;
&lt;h2&gt;Draft 2&lt;/h2&gt;
&lt;p&gt;&lt;img alt="Draft 2 of the ZLG logo" src="https://zlg.space/blog/images/logo-dev/inkscape-2.png"&gt;&lt;/p&gt;
&lt;!-- Z has X-like guide lines, L's leg was shortened, bottom edge of G reversed
--&gt;

&lt;p&gt;This one addresses the issues I had with each of the letters: the Z's edges
create an X with the guide lines, right in the center. To me, that's a hint that
you're doing things correctly. There's a symmetry to it. The L's leg was
shortened, and the G's bottom line edge just flipped. So far so good... except
the line width of the G's curve. See how it's just shy of two blocks wide?
That's a bit of an issue.&lt;/p&gt;
&lt;h2&gt;Draft 3&lt;/h2&gt;
&lt;p&gt;It's an easy fix: just move the handles of the cubic Bezier curve out a little.
Doing this breaks the grid a little bit in terms of curve handle placement, but
it achieves the end goal of matching line width:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Draft 3 of the ZLG logo" src="https://zlg.space/blog/images/logo-dev/inkscape-3.png"&gt;&lt;/p&gt;
&lt;!-- width of G's curve is fixed --&gt;

&lt;p&gt;See? Now the G's curve's width is roughly 2 blocks wide. It's actually slightly
wider, but tweaking this too much is a waste of time for now. We have things
essentially where they need to be. There are two blocks of spacing around the
logo, one block between each letter, and each letter matches the requirements
for style.&lt;/p&gt;
&lt;h1&gt;Step 4: Write the &lt;abbr title="Scalable Vector Graphics"&gt;SVG&lt;/abbr&gt;&lt;/h1&gt;
&lt;p&gt;If you're lazy or don't care about file sizes, you can edit the Document
Properties in Inkscape, fill it in, save it, and forget about it, but I've
read about ways for SVGs to be smaller and more powerful, so it was a great
opportunity to learn &lt;abbr title="Scalable Vector Graphics"&gt;SVG&lt;/abbr&gt; syntax. That way, all I need is a browser and a text
editor to build a vector image. Before we crack open our favorite text editor,
let's get a look at where our vertices will be:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Image of ZLG logo with
vertices" src="https://zlg.space/blog/images/logo-dev/inkscape-vertices.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(Hint: You can do this in Inkscape by clicking on the Node tool (F2 by default)
and hitting Ctrl+A to select all paths)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Great, we have our vertices, along a configured grid. This is all we need to
copy it in text form!&lt;/p&gt;
&lt;p&gt;Mozilla has good &lt;a href="https://developer.mozilla.org/en-US/docs/Web/SVG"&gt;documentation on &lt;abbr title="Scalable Vector Graphics"&gt;SVG&lt;/abbr&gt; structure&lt;/a&gt;, which was
instrumental to my learning. Here's the markup and final result:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&lt;/span&gt;
&lt;span class="cm"&gt;&amp;lt;!-- ZLG Logo, Copyright © 2018 zlg. All rights reserved. Source provided for&lt;/span&gt;
&lt;span class="cm"&gt;educational use. --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;svg&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="na"&gt;xmlns=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://www.w3.org/2000/svg&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="na"&gt;xmlns:xlink=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;216&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;96&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="na"&gt;viewBox=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;0 0 216 96&amp;quot;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;symbol&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;zlg_logo&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;path&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="na"&gt;d=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="s"&gt;            M  16  16&lt;/span&gt;
&lt;span class="s"&gt;            l  64   0&lt;/span&gt;
&lt;span class="s"&gt;            l -32  48&lt;/span&gt;
&lt;span class="s"&gt;            l  16   0&lt;/span&gt;
&lt;span class="s"&gt;            l  16  16&lt;/span&gt;
&lt;span class="s"&gt;            l -64   0&lt;/span&gt;
&lt;span class="s"&gt;            l  32 -48&lt;/span&gt;
&lt;span class="s"&gt;            l -16   0&lt;/span&gt;
&lt;span class="s"&gt;            Z&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;path&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="na"&gt;d=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="s"&gt;            M  88 16&lt;/span&gt;
&lt;span class="s"&gt;            l  16 16&lt;/span&gt;
&lt;span class="s"&gt;            l   0 32&lt;/span&gt;
&lt;span class="s"&gt;            l  24  0&lt;/span&gt;
&lt;span class="s"&gt;            l  16 16&lt;/span&gt;
&lt;span class="s"&gt;            l -56  0&lt;/span&gt;
&lt;span class="s"&gt;            Z&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;path&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="na"&gt;d=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="s"&gt;            M 200  16&lt;/span&gt;
&lt;span class="s"&gt;            l -16  16&lt;/span&gt;
&lt;span class="s"&gt;            l -16   0&lt;/span&gt;
&lt;span class="s"&gt;            c -22   0, -22  32, 0 32&lt;/span&gt;
&lt;span class="s"&gt;            l  16   0&lt;/span&gt;
&lt;span class="s"&gt;            l   0  -8&lt;/span&gt;
&lt;span class="s"&gt;            l  -8   0&lt;/span&gt;
&lt;span class="s"&gt;            l -16 -16&lt;/span&gt;
&lt;span class="s"&gt;            l  40   0&lt;/span&gt;
&lt;span class="s"&gt;            l   0  40&lt;/span&gt;
&lt;span class="s"&gt;            l -32   0&lt;/span&gt;
&lt;span class="s"&gt;            c -42   0, -42 -64, 0 -64&lt;/span&gt;
&lt;span class="s"&gt;            Z&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/symbol&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;xlink:href=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;#zlg_logo&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;#zlg_logo&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;fill=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;#000&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;stroke=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;none&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;stroke-width=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;x=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;y=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/svg&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;When you save that and open it in your browser, you should see this &lt;abbr title="Scalable Vector Graphics"&gt;SVG&lt;/abbr&gt;
output:&lt;/p&gt;
&lt;object type="image/svg+xml"
data="https://zlg.space/blog/images/logo-dev/end-logo.svg" width="216px"
height="96px"&gt;&lt;/object&gt;

&lt;p&gt;Pretty slick, huh? &lt;sup id="fnref:xlink"&gt;&lt;a class="footnote-ref" href="#fn:xlink"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2&gt;Anatomy of an &lt;abbr title="Scalable Vector Graphics"&gt;SVG&lt;/abbr&gt; file&lt;/h2&gt;
&lt;p&gt;&lt;abbr title="Scalable Vector Graphics"&gt;SVG&lt;/abbr&gt; files have a root container element (&lt;code&gt;&amp;lt;svg&amp;gt;&lt;/code&gt;) that needs to tell the &lt;abbr title="eXtensible Markup Language"&gt;XML&lt;/abbr&gt;
parser what its namespace is, its dimensions, and the viewBox. For the sake of
simplicity, we'll say it's boilerplate. Inside this element is where all the fun
happens. This is nothing new if you've written any &lt;abbr title="eXtensible Markup Language"&gt;XML&lt;/abbr&gt;-based files before.&lt;/p&gt;
&lt;p&gt;Next, I created a &lt;code&gt;&amp;lt;symbol&amp;gt;&lt;/code&gt; called "zlg_logo", which I'll refer to later.
Symbols are places where you can group shapes and paths, but &lt;em&gt;won't&lt;/em&gt; draw them
to the canvas automatically. The group element (&lt;code&gt;&amp;lt;g&amp;gt;&lt;/code&gt;) groups while drawing, and
&lt;code&gt;&amp;lt;defs&amp;gt;&lt;/code&gt; acts similar but is less semantic.&lt;/p&gt;
&lt;p&gt;A brief caveat: &lt;code&gt;&amp;lt;symbol&amp;gt;&lt;/code&gt;s need to be larger than the &lt;code&gt;&amp;lt;path&amp;gt;&lt;/code&gt;s they're 
wrapping if you want to include effects like outlines or blurred shadows. 
Otherwise, the bounding box of the symbol will clip the drawing effect.&lt;/p&gt;
&lt;p&gt;Inside the symbol are three &lt;code&gt;&amp;lt;path&amp;gt;&lt;/code&gt;s; they are the letters of the logo. I
could've added &lt;code&gt;id="Z"&lt;/code&gt; and so on to them, but it's unnecessary since they make
up one logical structure.&lt;/p&gt;
&lt;p&gt;At the end, I &lt;code&gt;&amp;lt;use&amp;gt;&lt;/code&gt; the symbols and style them, much like I can in &lt;abbr title="HyperText Markup Language"&gt;HTML&lt;/abbr&gt;. The
division between &lt;code&gt;symbol&lt;/code&gt; and &lt;code&gt;use&lt;/code&gt; is similar to the division between &lt;abbr title="HyperText Markup Language"&gt;HTML&lt;/abbr&gt; and
&lt;abbr title="Cascading StyleSheets"&gt;CSS&lt;/abbr&gt;. You want the data (your paths, symbols, shapes, text) to be separate from
how you &lt;em&gt;present it&lt;/em&gt; (&lt;abbr title="Cascading StyleSheets"&gt;CSS&lt;/abbr&gt;, inline styling, &lt;code&gt;&amp;lt;use&amp;gt;&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;The fun part is the &lt;code&gt;&amp;lt;path&amp;gt;&lt;/code&gt; element. The &lt;code&gt;d&lt;/code&gt; attribute is short for "data". I
prefer to think of it as "directions" or "definition".&lt;/p&gt;
&lt;h3&gt;Path syntax&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;path&amp;gt;&lt;/code&gt; is possibly the most powerful element in &lt;abbr title="Scalable Vector Graphics"&gt;SVG&lt;/abbr&gt;. The &lt;code&gt;d&lt;/code&gt; attribute has a
sort of syntax. I separated each "command" by a new-line above to make it
clearer. &lt;abbr title="Scalable Vector Graphics"&gt;SVG&lt;/abbr&gt; places little restriction on how you construct your paths. Each
"command" expects a certain number of arguments. To understand the commands, you
need to first understand the difference in case: &lt;code&gt;M&lt;/code&gt; and &lt;code&gt;m&lt;/code&gt; are two different
commands: uppercases work on &lt;em&gt;absolute&lt;/em&gt; coordinates, while lowercases work on
&lt;em&gt;relative&lt;/em&gt; coordinates. I prefer using relative coordinates inside a &lt;code&gt;&amp;lt;symbol&amp;gt;&lt;/code&gt;
element so I can move things around, resize, or transform them without having to
translate or edit the absolute coordinates inside the path. Your needs may
differ.&lt;/p&gt;
&lt;p&gt;So, in the first path (the "Z" glyph), the first command is to &lt;strong&gt;M&lt;/strong&gt;ove the
cursor to &lt;strong&gt;16,16&lt;/strong&gt;, from the top-left corner of the image. Then, draw a
&lt;strong&gt;l&lt;/strong&gt;ine going &lt;strong&gt;64&lt;/strong&gt; units to the right, and &lt;strong&gt;0&lt;/strong&gt; units vertically. The "Z"
glyph is a fairly simple shape, so the &lt;code&gt;l&lt;/code&gt; commands continue until I reach the
end, where the &lt;strong&gt;Z&lt;/strong&gt; command closes the shape with a straight line, skipping me
from writing out &lt;code&gt;l -16 -16&lt;/code&gt;. Lowercase &lt;strong&gt;z&lt;/strong&gt; does the same thing.&lt;/p&gt;
&lt;p&gt;Later in the file, I do &lt;strong&gt;c&lt;/strong&gt;ubic Bezier curves, which take three arguments:
the coordinates of the two curve handles, and the coordinates of the curve's end
point. If you're doing a relative &lt;code&gt;c&lt;/code&gt;, all coordinates are in relation to the
origin point of the curve!&lt;/p&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;
&lt;p&gt;With four "path verbs" inside three paths inside a single symbol, I've built
a logo that can be transformed, (re)colored, stretched, zoomed, embossed, and
more, without ever touching the commands that built it. Here are a few versions
that I came up with using only a few &lt;code&gt;&amp;lt;use&amp;gt;&lt;/code&gt; elements:&lt;/p&gt;
&lt;object type="image/svg+xml" 
data="https://zlg.space/blog/images/logo-dev/assortment.svg" width="432" 
height="182"&gt;&lt;/object&gt;

&lt;p&gt;(Okay, I cheated and learned how gradients work for the last one.)&lt;/p&gt;
&lt;p&gt;There's a lot more to &lt;abbr title="Scalable Vector Graphics"&gt;SVG&lt;/abbr&gt; than the brief bit that I've explored in this
post. Some people have made &lt;a href="http://tzdata-javascript.org/demos/analog_clock_2/analog_clock_2.html"&gt;real-time clocks&lt;/a&gt; (shout-out to
&lt;a href="https://mastodon.social/@stderr"&gt;stderr@mastodon.social&lt;/a&gt;), &lt;a href="https://web.archive.org/web/20131019072450/http://www.treebuilder.de/svg/connect4.svg"&gt;Connect Four
clones&lt;/a&gt;, and much more. I hope that what I've covered here has
helped demystify &lt;abbr title="Scalable Vector Graphics"&gt;SVG&lt;/abbr&gt; a little bit and encouraged you to explore what text-based
vector formats can do for you.&lt;/p&gt;
&lt;p&gt;P.S. For comparison, my hand-written &lt;abbr title="Scalable Vector Graphics"&gt;SVG&lt;/abbr&gt; file is under a &lt;abbr title="1,024 bytes (contrast to SI kilobyte of 1,000 bytes)"&gt;kibibyte&lt;/abbr&gt;, even with all
the extra whitespace. The Inkscape version was almost 5 &lt;abbr title="kibibytes"&gt;KiB&lt;/abbr&gt;.&lt;/p&gt;
&lt;div class="footnote"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:xlink"&gt;
&lt;p&gt;2018-09-07 - In a prior draft, the &lt;code&gt;xlink&lt;/code&gt; namespace wasn't included.
This breaks symbol linking in &lt;abbr title="Scalable Vector Graphics"&gt;SVG&lt;/abbr&gt; 1.1 and below. In &lt;abbr title="Scalable Vector Graphics"&gt;SVG&lt;/abbr&gt; 2, the xlink namespace
isn't needed. Both forms of linking are included for compatibility. I didn't
discover this until I tried to use an &lt;abbr title="Scalable Vector Graphics"&gt;SVG&lt;/abbr&gt; image as my avatar on the Fediverse.
It also didn't show up correctly in file previews. Be sure to include the
&lt;code&gt;xlink&lt;/code&gt; namespace if you plan to use the linking facilities!&amp;#160;&lt;a class="footnote-backref" href="#fnref:xlink" title="Jump back to footnote 1 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content><category term="Software"/><category term="SVG"/><category term="Inkscape"/><category term="XML"/><category term="Graphic Design"/></entry></feed>