
Sé que puedo acceder al final de una ruta en TikZ nombrando la coordenada como con:
\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{svg.path}
\begin{document}
\begin{tikzpicture}
\draw [green] svg {M201.1,673.2c1.4-39.8,2-52.2,18.2-70.8c11.7-13.5,18.3-24.3-7.7-49.4
c-39.3-38-43.2-59.2,1-90.2c18.1-12.7,67.1-20.2,25.4-36.6c-18.2-7.2-23.5-9.7-26.9-39.2c-3-26.7-17.7-28.2-37.7-35
c-20-6.9-87.7-28.8-50.2-78.2c23.5-31,58.6-73.9,83.1-118.2c13.3-24,22.4-56.5,38.6-85.9} coordinate (End);
\fill [red] (End) circle (4pt);
\end{tikzpicture}
\end{document}
¿Cómo puedo acceder al inicio del camino de la misma forma?
Respuesta1
¡Eso es complicado! La svg
sintaxis ataja gran parte del mecanismo de construcción de rutas de TikZ, por lo que la solución obvia coordinate[pos=0] (Start)
no parece funcionar.
Entonces, este método obtiene la ruta una vez que se ha construido y elimina la coordenada inicial. Luego crea una coordenada TikZ en ese punto.
\documentclass{standalone}
%\url{http://tex.stackexchange.com/q/364315/86}
\usepackage{tikz}
\usetikzlibrary{svg.path}
\makeatletter
\def\tikz@startcoord#1#2#3#4\pgf@stop#5{%
\begingroup
\pgftransformreset
\pgftransformshift{\pgfpoint{#2}{#3}}%
\pgfnode{coordinate}{center}{}{#5}{}%
\endgroup
}
\tikzset{
coordinate at start/.code={
\tikz@addmode{%
\pgfsyssoftpath@getcurrentpath\@temp
\expandafter\tikz@startcoord\@temp\pgf@stop{#1}
}%
}
}
\makeatother
\begin{document}
\begin{tikzpicture}
\begin{scope}[xshift=1cm]
\draw [coordinate at start=Start,green,yshift=2cm] svg {M201.1,673.2c1.4-39.8,2-52.2,18.2-70.8c11.7-13.5,18.3-24.3-7.7-49.4
c-39.3-38-43.2-59.2,1-90.2c18.1-12.7,67.1-20.2,25.4-36.6c-18.2-7.2-23.5-9.7-26.9-39.2c-3-26.7-17.7-28.2-37.7-35
c-20-6.9-87.7-28.8-50.2-78.2c23.5-31,58.6-73.9,83.1-118.2c13.3-24,22.4-56.5,38.6-85.9} coordinate (End);
\end{scope}
\fill [red] (End) circle (4pt);
\fill [blue] (Start) circle (4pt);
\end{tikzpicture}
\end{document
}
Puede que haya una forma más sencilla de hacer esto...
Actualizado para ignorar la transformación de coordenadas actual (de lo contrario, se aplicarán dos veces).
Respuesta2
Probablemente un poco más crudo que los requisitos de OP, pero si dividir la ruta svg es tolerable, entonces poner una coordenada después del primer movimiento puede funcionar:
\documentclass[tikz,border=5]{standalone}
\usetikzlibrary{svg.path}
\begin{document}
\begin{tikzpicture}
\draw [green, xshift=25]
svg {M201.1,673.2}
coordinate (Start)
svg {c1.4-39.8,2-52.2,18.2-70.8c11.7-13.5,18.3-24.3-7.7-49.4
c-39.3-38-43.2-59.2,1-90.2c18.1-12.7,67.1-20.2,25.4-36.6
c-18.2-7.2-23.5-9.7-26.9-39.2c-3-26.7-17.7-28.2-37.7-35
c-20-6.9-87.7-28.8-50.2-78.2c23.5-31,58.6-73.9,83.1-118.2
c13.3-24,22.4-56.5,38.6-85.9}
coordinate (End);
\fill [blue] (Start) circle [radius=.1];
\fill [red] (End) circle [radius=.1];
\end{tikzpicture}
\end{document}