Как расположить элемент относительно якоря?

Как расположить элемент относительно якоря?

Мой код:

\begin{center}
    \vspace{-20pt}
    \begin{tikzpicture}[mybox/.style={rectangle, draw, minimum width=10mm, minimum height=10mm}]
    \foreach \addr/\val [count=\x] in {$0$,$1$/$28$,$6$/$\infty$,$6$/$\infty$,$6$/$25$,$0$,$6$/$\infty$} {
        \node (node\x) [mybox] at (\x,0) {\addr};
        \node[above=5mm] at (\x,0) {\footnotesize \x};
        \node[below=5mm] at (\x,0) {\val};
    }
    \node at (node1.south west-100mm,0) [below=5mm] {Edge Weight:};
    \draw[ultra thick] (node1.south west) rectangle (node7.north east);
    \end{tikzpicture}
\end{center}

Я получаю сообщение об ошибке в строке, \node (lab) at (node1.south west-100mm,0) [below=5mm] {Edge Weight:};относящейся к разделу (node1.south west-100mm,0)об использовании якоря в качестве координаты.

Ошибка:

Пакет PGF Математическая ошибка: Неизвестная функция 'node1' (в 'node1.south west-100mm'). \node at (node1.south west-100mm,0)

Ошибка в пакете PGF: неизвестная функция «node1» (в «node1.south west-100mm»). ...est-100mm,0) [below=5mm] {Вес ребра:};

Я хочу, чтобы положение узла labбыло на расстоянии (-100pt,0) от юго-западного якоря узла node0. Как это сделать?

Я даже пробовал писать:

(node1.south west)+(-1,0)

Но и это не работает. Как решить эту проблему?

PS Я знаю, что написание \path (node1.south west) node at +(-35pt,-8pt) {Edge Weight:};решило бы проблему, но есть ли способ сделать это напрямую, не используя команду path, а просто используя команду node?

решение1

Вы можете использовать xshift:

\documentclass{article}
\usepackage{tikz}
\begin{document}

    \begin{tikzpicture}[mybox/.style={rectangle, draw, minimum width=10mm, minimum height=10mm}]
    \foreach \addr/\val [count=\x] in {$0$,$1$/$28$,$6$/$\infty$,$6$/$\infty$,$6$/$25$,$0$,$6$/$\infty$} {
        \node (node\x) [mybox] at (\x,0) {\addr};
        \node[above=5mm] at (\x,0) {\footnotesize \x};
        \node[below=5mm] at (\x,0) {\val};
    }
    \node at ([xshift=-10]node1.south west) [below=5mm] {Edge Weight:};
    \draw[ultra thick] (node1.south west) rectangle (node7.north east);
    \end{tikzpicture}

\end{document}

С этой небольшой настройкой ваш код выдаст:

введите описание изображения здесь

Если это имеет значение, чтобы сделать код более читабельным, я бы заменил цикл for на

    \foreach \addr/\val [count=\x] in {0,1/28,6/\infty,6/\infty,6/25,0,6/\infty} {
        \node (node\x) [mybox] at (\x,0) {$\addr$};
        \node[above=5mm] at (\x,0) {\footnotesize \x};
        \node[below=5mm] at (\x,0) {$\val$};
    }

решение2

Если вы хотите использовать библиотеку calc, вам необходимо записать операцию узла следующим образом:

 \node at ($(node1.south west)+(-1,0)$) 

и у вас будет:

результат

Полный код:

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[mybox/.style={rectangle, draw, minimum width=10mm, minimum height=10mm}]
    \foreach \addr/\val [count=\x] in {$0$,$1$/$28$,$6$/$\infty$,$6$/$\infty$,$6$/$25$,$0$,$6$/$\infty$} {
        \node (node\x) [mybox] at (\x,0) {\addr};
        \node[above=5mm] at (\x,0) {\footnotesize \x};
        \node[below=5mm] at (\x,0) {\val};
    }
    \node at ($(node1.south west)+(-1,0)$) [below=5mm] {Edge Weight:};
    \draw[ultra thick] (node1.south west) rectangle (node7.north east);
\end{tikzpicture}
\end{document}

Связанный контент