No TikZ, para algum nó (x), pode-se usar, por exemplo, (x.west) para se referir às âncoras do nó x. Se eu tentar definir manualmente uma coordenada com um "." no nome, isso não funciona:
\coordinate (x.test) at (4,0);
Existe alguma maneira de definir uma coordenada tal que (x.text) se refira a esta coordenada?
Responder1
Sim, você pode nomear uma coordenada (ou geralmente um nó) com a .
no nome. Mas você não vai se divertir.
Das soluções a seguir, considero apenas a última (usando explicitamente o nó cs) uma solução válida e estável.
- é irritante.
- pode fazer uma bagunça, já que
.
agora é uma letra e pode ser usada dentro de nomes de macros (há uma alternativa tornando-.
a ativa, o que pode ser uma proteção, na verdade). - é apenas mais para escrever, mas também inequívoco para os outros.
\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}
Se você quiser adicionar uma âncora extra a umexistirnó que você pode usar append after command
ou fotos comoeu fiz em outra resposta minha(embora, se você conseguir conviver com x-test
isso, será muito mais fácil).
Também podemos adicionar novas âncoras a nós simples, como fiz emoutra resposta com a mesma tática.
Se você também quiser usar essas âncoras para colocar um nó, mais trabalho será feito, mas isso pode ser resolvido de forma bastante simples, acredito.
Mas, para isso, preciso ver seu caso de uso real.
Responder2
Você está perguntando
Existe alguma maneira de definir uma coordenada tal que (x.text) se refira a esta coordenada?
Tecnicamente, existe. Você poderia redefinir (espero localmente) a coordinate
forma para ter uma test
âncora.
\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}
No entanto, eu não recomendo de forma alguma o uso desta ou de construções semelhantes. Em vez disso, gostaria de argumentar que é muito melhor aceitar o fato de que você não pode ter pontos, vírgulas, parênteses, colchetes, colchetes (que são interpretados como tal), ~
cifrões simples, #
s simples, tubos simples, simples %
, e comercial e talvez mais alguns não funcionam. (Dependendo dos pacotes que você carrega, esta lista pode ficar mais longa de qualquer maneira.) Pessoalmente, estou realmente impressionado com o fato de que, por exemplo, espaços e sublinhados funcionam. Ter esses caracteres especiais é muito conveniente para lidar com TikZ. Se você quiser permitir .
, haverá ambigüidades ou você terá que proibir os usuários de usar (node.north)
para se referir à âncora norte.