En TikZ, para algún nodo (x), se puede usar, por ejemplo, (x.west) para referirse a los anclajes del nodo x. Si intento definir manualmente una coordenada con un "." en el nombre, esto no funciona:
\coordinate (x.test) at (4,0);
¿Hay alguna forma de definir una coordenada tal que (x.text) se refiera a esta coordenada?
Respuesta1
Sí, puedes nombrar una coordenada (o generalmente un nodo) con a .
en su nombre. Pero no lo vas a pasar bien.
De las siguientes soluciones, solo considero que la última (usando el nodo cs explícitamente) es una solución válida y estable.
- es molesto.
- puede causar un desastre ya que
.
ahora es una letra y se puede usar dentro de los nombres de las macros (hay una alternativa al activarla.
que en realidad podría ser un ahorro). - Es más para escribir pero también inequívoco para los demás.
\documentclass{article}
\usepackage{tikz}
\tikzset{no anchors/.code={\catcode`\.=11\relax}}
\begin{document}
\begin{tikzpicture}
\coordinate (x.test) at (4,0);
% 1. Hide the dot from TikZ parser.
\node[shift=(up:2)] (no dot) at ({{{{x.test}}}}) {no dot};
% 2. “Disguise” the dot as a different character
\draw {[no anchors] (x.test) } -- (no dot.south);
% 3. Explicitly use the node cs.
\draw (0,4) -- (node cs: name = x.test);
\end{tikzpicture}
\end{document}
Si desea agregar un ancla adicional a unexistentenodo que puedes usarappend after command
o fotos comoLo hice en otra respuesta mía.(Sin embargo, si puedes vivir con x-test
ese uso, es mucho más fácil).
También podemos agregar nuevos anclajes a nodos simples como hice enotra respuesta con la misma tactica.
Si también desea utilizar estos anclajes para colocar un nodo, se necesita más trabajo, pero creo que eso se puede resolver de manera bastante sencilla.
Pero para eso, necesitaría ver su caso de uso real.
Respuesta2
Estás preguntando
¿Hay alguna forma de definir una coordenada tal que (x.text) se refiera a esta coordenada?
Técnicamente, lo hay. Podrías redefinir (localmente espero) la coordinate
forma para que tenga un test
ancla.
\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}
\makeatletter
\pgfdeclareshape{coordinate}
{
\savedanchor\centerpoint{%
\pgf@x=.5\wd\pgfnodeparttextbox%
\pgf@y=.5\ht\pgfnodeparttextbox%
\advance\pgf@y by -.5\dp\pgfnodeparttextbox%
}
\anchor{center}{\centerpoint}
\anchor{test}{\centerpoint}
\anchorborder{\centerpoint}
}
\makeatother
\coordinate (x) at (4,0);
\draw (x.test) -- ++ (1,1);
\end{tikzpicture}
\end{document}
Sin embargo, no recomiendo en absoluto utilizar esta u otras construcciones similares. Más bien, me gustaría argumentar que es mucho mejor aceptar el hecho de que no se pueden tener puntos, comas, paréntesis, corchetes, llaves (que se interpretan como tales), ~
signos de dólar simples, s simples #
, tuberías simples, simples %
, símbolos y quizás algunos más no funcionan. (Dependiendo de los paquetes que cargue, esta lista puede alargarse de todos modos). Personalmente, estoy realmente sorprendido por el hecho de que, por ejemplo, los espacios y los guiones bajos funcionan. Tener estos caracteres especiales hace que sea muy conveniente tratar con Ti.kZ. Si quisiera permitirlo, .
habría ambigüedades o tendría que prohibir a los usuarios el uso (node.north)
para referirse al ancla norte.