Wenn man sich `\unitshift` einmal ausgeben lässt (beispielsweise statt `$a$`), dann sieht man schnell, dass da gar nicht `5 mm` gespeichert wird, sondern nur ein Zahlwert. Tatsächlich ist er der zu 5 mm gehörende Wert in pt. Das ist ohne `positioning` *zufällig* die Basiseinheit, die `below` quasi automatisch ergänzt. Mit `positioning` ist es das aber nicht mehr. Um das Einheitenproblem zu lösen, kann man die gewünschte Einheit bei Verwendung von `\unitshift` einfach mit angeben.
\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[scale=1]
\pgfmathsetmacro{\unitshift}{5 mm}
\draw (0,0) node[below=\unitshift pt,anchor=base] {$a$} -- (0,1);
\end{tikzpicture}
\end{document}
Wenn die Einheit `pt` Bestandteil von `\unitshift` sein soll, dann geht das einfach mit `\pgfmathsetlengthmacro`:
\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[scale=1]
\pgfmathsetlengthmacro{\unitshift}{5 mm}
\draw (0,0) node[below=\unitshift,anchor=base] {$a$} -- (0,1);
\end{tikzpicture}
\end{document}
Natürlich könnte man `\unitshift` auch einfach direkt per `\newcommand` definieren:
\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[scale=1]
\newcommand*{\unitshift}{5 mm}
\draw (0,0) node[below=\unitshift,anchor=base] {$a$} -- (0,1);
\end{tikzpicture}
\end{document}
In diesem Fall wird `5 mm` nicht in `pt` umgerechnet, sondern `\unitlength` ist direkt `5 mm`.
Natürlich kann man seit statt eines Makros `\unitshift` auch eine echte Länge `\unitshift` verwenden. Diese muss dann allerdings zuvor mit `\newlength` angelegt werden. Das sollte man in der Dokumentpräambel machen:
\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{positioning}
\newlength{\unitshift}
\begin{document}
\begin{tikzpicture}[scale=1]
\pgfmathsetlength{\unitshift}{5 mm}
\draw (0,0) node[below=\unitshift,anchor=base] {$a$} -- (0,1);
\end{tikzpicture}
\end{document}
Alle Lösungen funktionieren unabhängig von der Verwendung von `positioning`. In allen Fällen kann man auch die Einheit problemlos bei der Definition von `\unitshift` ändern, ohne bei der späteren Verwendung etwas ändern zu müssen.