summaryrefslogtreecommitdiff
path: root/graphics/pgf/base/doc/text-en/pgfmanual-en-library-svg-path.tex
blob: ec45ca44356216228db83bc66c3786ac15f02c0d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
% Copyright 2019 by Till Tantau
%
% This file may be distributed and/or modified
%
% 1. under the LaTeX Project Public License and/or
% 2. under the GNU Free Documentation License.
%
% See the file doc/generic/pgf/licenses/LICENSE for more details.


\section{SVG-Path Library}
\label{section-library-svg-path}

\begin{pgflibrary}{svg.path}
    This library defines a command that allows you to specify a path using the
    \textsc{svg}-syntax.
\end{pgflibrary}

\begin{command}{\pgfpathsvg\marg{path}}
    This command extends the current path by a \meta{path} given in the
    \textsc{svg}-path-data syntax. This syntax is described in detail in
    Section~8.3 of the \textsc{svg}-specification, Version~1.1.

    In principle, the complete syntax is supported and the library just
    provides a parser and a mapping to basic layer commands. For instance,
    |M 0 10| is mapped to |\pgfpathmoveto{\pgfpoint{0pt}{10pt}}|. There are,
    however, a few things to be aware of:
    %
    \begin{itemize}
        \item The computation underlying the arc commands |A| and |a| are not
            numerically stable, which may result in quite imprecise arcs.
            Bézier curves, both quadratic and cubic, are not affected, neither
            are arcs spanning degrees that are multiples of $90^{\circ}$.
        \item The dimensionless units of \textsc{svg} are always interpreted as
            points (|pt|). This is a problem with paths like |M 20000 0|, which
            will raise an error message since \TeX\ cannot handle dimensions
            larger than about 16\,000 points.
        \item All coordinate and canvas transformations apply to the path in
            the usual fashion.
        \item The |\pgfpathsvg| command can be freely intermixed with other
            path commands.
    \end{itemize}
    %
\begin{codeexample}[preamble={\usepgflibrary{svg.path}}]
\begin{pgfpicture}
  \pgfpathsvg{M 0 0 l 20 0 0 20 -20 0 q 10 0 10 10
              t 10 10 10 10 h -50 z}
  \pgfusepath{stroke}
\end{pgfpicture}
\end{codeexample}
    %
\end{command}


%%% Local Variables:
%%% mode: latex
%%% TeX-master: "pgfmanual-pdftex-version"
%%% End: