
Dieser Code:
\pic[rotate=40, local bounding box=microfono] at (4.5,-5) {microph};
\draw[black, line width=2pt] (microfono.-45) -- ++(-.2,+.2) ++(.2,-.2) -- ++(0,-2);
funktioniert außerhalb, scope
aber nicht innerhalb (die Linie wird nicht angezeigt). Warum?
\documentclass[border=0pt]{standalone}
\usepackage{tikz}
\tikzset{
pics/microph/.style={code={
\draw[black, line width=.2em, rounded corners=1.7ex]
(-.85em,4.5ex) -- (-.85em,2ex) -- (.85em,2ex) -- (.85em,4.5ex);
\fill[black]
(-.6em,5ex) to[rounded corners=1.2ex]
(-.6em,2.5ex) to[rounded corners=1.2ex] (.6em,2.5ex)
-- (.6em,5ex) to[rounded corners=.2ex] ++(-.85em,0) to[rounded corners=.2ex] ++(0,.35ex) -- ++(.85em,0)
-- (.6em,5.5ex) to[rounded corners=.2ex] ++(-.85em,0) to[rounded corners=.2ex] ++(0,.35ex) -- ++(.85em,0)
-- (.6em,6ex) to[rounded corners=.2ex] ++(-.85em,0) to[rounded corners=.2ex] ++(0,.35ex) -- ++(.85em,0)
-- (.6em,6.5ex) to[rounded corners=.2ex] ++(-.85em,0) to[rounded corners=.2ex] ++(0,.35ex) -- ++(.85em,0)
to[rounded corners=1.2ex]
(.6em,8ex) to[rounded corners=1.2ex]
(-.6em,8ex) to cycle;
}},
}
\begin{document}
\begin{tikzpicture}
\begin{scope}
\clip (-8.5,-6.5) rectangle (8.5,6.5);
\node[fill=cyan, draw=cyan, minimum width=17cm, minimum height=13cm](sky){};
\pic[rotate=40, local bounding box=microfono] at (4.5,-5) {microph};
\draw[black, line width=2pt] (microfono.-45) -- ++(-.2,+.2) ++(.2,-.2) -- ++(0,-2);
\end{scope}
\end{tikzpicture}
\end{document}
Antwort1
Ich hatte diese Verwendung von ursprünglich local bounding box
in PGF 3.1.5 behoben, indem ich bedingungslos \pgf@path@size@hook
in ausgeführt habe \pgf@protocolsizes
. Dies hat jedoch alle anderen Verwendungen von unterbrochen . Leider ist mir keine andere Lösung eingefallen, um diese zugegebenermaßen sehr spezielle Situation zum Laufen zu bringen. Trotzdem kann ich einen Workaround für die Verwendung in einem Kontext local bounding box
vorschlagen . Fügen Sie einfach zum Pfad oder Bereich hinzu, von dem Sie den lokalen Begrenzungsrahmen erhalten möchten.local bounding box
\clip
overlay=false
\documentclass[border=0pt]{standalone}
\usepackage{tikz}
\tikzset{
pics/microph/.style={code={
\draw[black, line width=.2em, rounded corners=1.7ex]
(-.85em,4.5ex) -- (-.85em,2ex) -- (.85em,2ex) -- (.85em,4.5ex);
\fill[black]
(-.6em,5ex) to[rounded corners=1.2ex]
(-.6em,2.5ex) to[rounded corners=1.2ex] (.6em,2.5ex)
-- (.6em,5ex) to[rounded corners=.2ex] ++(-.85em,0) to[rounded corners=.2ex] ++(0,.35ex) -- ++(.85em,0)
-- (.6em,5.5ex) to[rounded corners=.2ex] ++(-.85em,0) to[rounded corners=.2ex] ++(0,.35ex) -- ++(.85em,0)
-- (.6em,6ex) to[rounded corners=.2ex] ++(-.85em,0) to[rounded corners=.2ex] ++(0,.35ex) -- ++(.85em,0)
-- (.6em,6.5ex) to[rounded corners=.2ex] ++(-.85em,0) to[rounded corners=.2ex] ++(0,.35ex) -- ++(.85em,0)
to[rounded corners=1.2ex]
(.6em,8ex) to[rounded corners=1.2ex]
(-.6em,8ex) to cycle;
}},
}
\begin{document}
\begin{tikzpicture}
\begin{scope}
\clip (-8.5,-6.5) rectangle (8.5,6.5);
\node[fill=cyan, draw=cyan, minimum width=17cm, minimum height=13cm](sky){};
\pic[rotate=40, overlay=false, local bounding box=microfono] at (4.5,-5) {microph};
\draw[black, line width=2pt] (microfono.-45) -- ++(-.2,+.2) ++(.2,-.2) -- ++(0,-2);
\end{scope}
\end{tikzpicture}
\end{document}
Antwort2
in der Beschreibung \clip
steht der Satz „die Größe nachfolgender Pfade ist für die Bildgröße nicht von Belang.“ Ich gehe also davon aus, dass local bounding box
die richtige Größe nicht ermittelt werden kann.
Eine einfache Lösung besteht darin, das Mikro zweimal zu zeichnen:
\documentclass[border=0pt]{standalone}
\usepackage{tikz}
\tikzset{
pics/microph/.style={code={
\draw[black, line width=.2em, rounded corners=1.7ex]
(-.85em,4.5ex) -- (-.85em,2ex) -- (.85em,2ex) -- (.85em,4.5ex);
\fill[black]
(-.6em,5ex) to[rounded corners=1.2ex]
(-.6em,2.5ex) to[rounded corners=1.2ex] (.6em,2.5ex)
-- (.6em,5ex) to[rounded corners=.2ex] ++(-.85em,0) to[rounded corners=.2ex] ++(0,.35ex) -- ++(.85em,0)
-- (.6em,5.5ex) to[rounded corners=.2ex] ++(-.85em,0) to[rounded corners=.2ex] ++(0,.35ex) -- ++(.85em,0)
-- (.6em,6ex) to[rounded corners=.2ex] ++(-.85em,0) to[rounded corners=.2ex] ++(0,.35ex) -- ++(.85em,0)
-- (.6em,6.5ex) to[rounded corners=.2ex] ++(-.85em,0) to[rounded corners=.2ex] ++(0,.35ex) -- ++(.85em,0)
to[rounded corners=1.2ex]
(.6em,8ex) to[rounded corners=1.2ex]
(-.6em,8ex) to cycle;
}},
}
\begin{document}
\begin{tikzpicture}
%
\begin{scope}
\pic[rotate=40, local bounding box=microfono] at (4.5,-5) {microph};
\clip (-8.5,-6.5) rectangle (8.5,6.5);
\node[fill=cyan, draw=cyan, minimum width=17cm, minimum height=13cm](sky){};
\pic[rotate=40] at (4.5,-5) {microph};
\draw[line width=2pt] (microfono.-45) -- ++(-.2,+.2) ++(.2,-.2) -- ++(0,-2);
\end{scope}
\end{tikzpicture}
\end{document}
Antwort3
Sie benötigen hier keinen lokalen Begrenzungsrahmen. Sie können einfach eine Koordinate im Mikrofon verwenden. Es ist jedoch bekannt, dass pic
s die Namenspräfixe durcheinander bringen. Dieser Fehler wurde nur teilweise behoben und wird laut Henri Menke in der nächsten Version von pgf vollständig behoben sein. Lassen Sie uns vorerst verwenden@cfr's Lösungum den Namen mit dem Präfix zurückzusetzen name prefix ..
. Diese Lösung wird im pgf-Handbuch v3.1.4 auf S. 263 empfohlen.
Dann können Sie die Tricks aus dem pgfmanual verwenden, um dem Bild einen Namen zu geben und von außen auf eine seiner Koordinaten zu verweisen. Dies hat den zusätzlichen Vorteil, dass Sie keinen Winkel wie -45 schätzen müssen, der sich ändert, wenn Sie das Mikrofon drehen.
\documentclass[border=0pt]{standalone}
\usepackage{tikz}
\tikzset{
pics/microph/.style={code={
\draw[black, line width=.2em, rounded corners=1.7ex]
(-.85em,4.5ex) -- (-.85em,2ex) -- (.85em,2ex) -- (.85em,4.5ex);
\path (0,2ex) coordinate (-plug);
\fill[black,name prefix ..] % https://tex.stackexchange.com/a/194370
(-.6em,5ex) to[rounded corners=1.2ex]
(-.6em,2.5ex) to[rounded corners=1.2ex] (.6em,2.5ex)
-- (.6em,5ex) to[rounded corners=.2ex] ++(-.85em,0) to[rounded corners=.2ex] ++(0,.35ex) -- ++(.85em,0)
-- (.6em,5.5ex) to[rounded corners=.2ex] ++(-.85em,0) to[rounded corners=.2ex] ++(0,.35ex) -- ++(.85em,0)
-- (.6em,6ex) to[rounded corners=.2ex] ++(-.85em,0) to[rounded corners=.2ex] ++(0,.35ex) -- ++(.85em,0)
-- (.6em,6.5ex) to[rounded corners=.2ex] ++(-.85em,0) to[rounded corners=.2ex] ++(0,.35ex) -- ++(.85em,0)
to[rounded corners=1.2ex]
(.6em,8ex) to[rounded corners=1.2ex]
(-.6em,8ex) to cycle;
}},
}
\begin{document}
\begin{tikzpicture}
\begin{scope}
\clip (-8.5,-6.5) rectangle (8.5,6.5);
\node[fill=cyan, draw=cyan, minimum width=17cm, minimum height=13cm](sky){};
\pic[rotate=40] (microfono) at (4.5,-5) {microph};
\draw[black, line width=2pt] (microfono-plug) -- ++(.2,-.2) -- ++(0,-2);
\end{scope}
\end{tikzpicture}
\end{document}
Antwort4
Wie ich in meinen Kommentaren erwähnt habe, tritt das Problem bei Ihrem pic {microph}
und nicht beim ersten pic {seagull}
definierten Abschnitt 18 Pics: Small Pictures on Paths
des TikZ-Handbuchs auf. Dies zeigt deutlich, dass es eineInsektim Quellcode der pic operation
. Dieser Fehler macht die to
Operationen im Code inkompatibel pic
.
Das Problem entsteht durch einen Fehler in der pic
Operation, der keine to
Operationen toleriert. Durch Ersetzen dieser Operationen durch --
funktioniert es.
Sie benötigen keine lokale Box, da Sie sie von außen zugänglich pic
platzieren können , wie im Abschnitt des Handbuchs gezeigt. Daher habe ich rechts, wo das Kabel angeschlossen wird, eine Koordinate namens „in der Mitte der Unterseite des Mikrofons“ hinzugefügt.node
prefix name
18.2 The Pic Syntax
(-milieu)
\draw[black, line width=.2em, rounded corners=1.7ex,pic actions]
(-.85em,4.5ex) -- (-.85em,2ex) -- (.85em,2ex)coordinate[midway](-milieu) -- (.85em,4.5ex);
\documentclass[border=0pt]{standalone}
\usepackage{tikz}
\tikzset{
pics/microph/.style={code={
\draw[black, line width=.2em, rounded corners=1.7ex,pic actions]
(-.85em,4.5ex) -- (-.85em,2ex) -- (.85em,2ex)coordinate[midway](-milieu) -- (.85em,4.5ex);
\fill[black,pic actions]
(-.6em,5ex)[rounded corners=1.2ex] --%
(-.6em,2.5ex)[rounded corners=1.2ex] --%to
(.6em,2.5ex)
-- (.6em,5ex)[rounded corners=.2ex] --%to
++(-.85em,0)[rounded corners=.2ex] --%to
++(0,.35ex) -- ++(.85em,0)
-- (.6em,5.5ex)[rounded corners=.2ex] --%to
++(-.85em,0)[rounded corners=.2ex] --%to
++(0,.35ex) -- ++(.85em,0)
-- (.6em,6ex)[rounded corners=.2ex] --%to
++(-.85em,0)[rounded corners=.2ex] --%to
++(0,.35ex) -- ++(.85em,0)
-- (.6em,6.5ex)[rounded corners=.2ex] --%to
++(-.85em,0)[rounded corners=.2ex] --%to
++(0,.35ex) -- ++(.85em,0)
[rounded corners=1.2ex]--%to
(.6em,8ex) [rounded corners=1.2ex]--%to
(-.6em,8ex) --%to
cycle;
}},
}
\begin{document}
\begin{tikzpicture}
\begin{scope}
\clip (-8.5,-6.5) rectangle (8.5,6.5);
\node[fill=cyan, draw=cyan, minimum width=17cm, minimum height=13cm](sky){};
\pic[rotate=40] (microfono) at (4.5,-5) {microph};
\draw[black, line width=2pt] (microfono-milieu) -- ++(.2,-.2) -- ++(0,-2);
\end{scope}
\end{tikzpicture}
\end{document}