В TikZ для некоторого узла (x) можно использовать, например, (x.west) для ссылки на якоря узла x. Если я попытаюсь вручную определить координату с "." в имени, это не сработает:
\coordinate (x.test) at (4,0);
Есть ли способ определить координату таким образом, чтобы (x.text) ссылался на эту координату?
решение1
Да, вы можете назвать координату (или вообще узел) с a .
в имени. Но вы не получите удовольствия.
Из следующих решений я считаю только последнее (явное использование узла cs) допустимым и стабильным решением.
- раздражает.
- может создать беспорядок, так как
.
теперь является буквой и может использоваться внутри имен макросов (есть альтернатива, сделав его.
активным, что на самом деле может быть безопаснее). - просто больше писать, но и быть недвусмысленным для других.
\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}
Если вы хотите добавить дополнительный якорь ксуществующийузел, который вы можете использоватьappend after command
или фотографии какЯ сделал это в другом своем ответе(хотя, если вы можете с x-test
этим жить, то это гораздо проще).
Мы также можем добавлять новые якоря к простым узлам, как я это сделал вдругой ответ с той же тактикой.
Если вы также хотите использовать эти якоря для размещения узла, то придется проделать больше работы, но, я думаю, это можно решить довольно просто.
Но для этого мне нужно увидеть ваш реальный вариант использования.
решение2
Вы спрашиваете
Есть ли способ определить координату таким образом, чтобы (x.text) ссылался на эту координату?
Технически, есть. Вы можете переопределить (локально, я надеюсь) форму, coordinate
чтобы иметь test
якорь.
\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}
Однако я вообще не рекомендую использовать эту или подобные конструкции. Вместо этого я хотел бы утверждать, что гораздо лучше принять тот факт, что вы не можете иметь точки, запятые, круглые скобки, квадратные скобки, фигурные скобки (которые интерпретируются как таковые), ~
простые знаки доллара, простые #
s, простые вертикальные черты, простые %
, амперсанды и, возможно, еще несколько не работают. (В зависимости от загружаемых вами пакетов этот список может быть длиннее.) Лично я действительно поражен тем фактом, что, например, пробелы и подчеркивания работают. Наличие этих специальных символов делает очень удобным работу с TiкZ. Если бы вы хотели разрешить, .
то либо возникнут двусмысленности, либо вам пришлось бы запретить пользователям использовать (node.north)
для ссылки на северный якорь.