Überarbeitungsverlauf[Zurück]
Klicke auf Einblenden/Ausblenden von Überarbeitungen 6

28 Sep '16, 18:22

saputello's gravatar image

saputello
11.1k174365

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.
Klicke auf Einblenden/Ausblenden von Überarbeitungen 5
Die Kommentare von @sudo und @Henri mit verarbeitet

28 Sep '16, 18:21

saputello's gravatar image

saputello
11.1k174365

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} Beide In diesem Fall wird `5 mm` nicht in `pt` umgerechnet, sondern `\unitlength` ist direkt `5 mm`. Natürlich kann man seit 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 beiden 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.müssen.
Klicke auf Einblenden/Ausblenden von Überarbeitungen 4

25 Sep '16, 14:26

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 3

25 Sep '16, 12:50

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 2

25 Sep '16, 12:46

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 1

25 Sep '16, 12:44

saputello's gravatar image

saputello
11.1k174365