
Ich habe ein Bild in einem TikZ-Knoten. Um das Bild herum sollte ein Rahmen ohne Lücke sein. Der Rahmen sollte eine bestimmte Linienbreite haben.
Mein Problem ist, dass der Rahmen scheinbar unter dem Bild gezeichnet wird. Ich verwende , inner sep=0
um die Lücke zwischen Bild und Rahmen zu entfernen. Der Effekt ist ein Rahmen mit der halben beabsichtigten Linienbreite, wie im ersten Beispiel gezeigt:
\documentclass[tikz,margin=10pt]{standalone}
\begin{document}
% Red border to distinguish from example image, which also has a border
\begin{tikzpicture}
\node[draw=red, inner sep=0mm, line width=10mm] {\includegraphics{example-image-a}};
\end{tikzpicture}
% Shows that part of the border was hiding behind the image
\begin{tikzpicture}
\node[draw=red, inner sep=10mm, line width=10mm] {\includegraphics{example-image-a}};
\end{tikzpicture}
\end{document}
Mir fallen zwei Workarounds ein:
- Stellen Sie die
inner sep
auf die halbe Rahmenbreite ein. So hat der Rahmen genau den Platz, den er braucht. - Behalten Sie
inner sep=0
die Linienbreite bei und setzen Sie diese auf das Doppelte des vorgesehenen Wertes. Akzeptieren Sie, dass der Rahmen halbiert wird, verdoppeln Sie ihn daher vorher.
Gibt es eine elegantere Lösung? Können wir TikZ anweisen, den Knotenrand nach dem Bild zu zeichnen? Ich könnte damit leben, dass ein kleiner Teil des Bildes vom Rand verdeckt wird.
Update, nachdem die Frage als Duplikat geschlossen wurde:
Die verlinkte Frage hat erhebliche Überschneidungen und hilft mir in meiner speziellen Situation. Gut! Die Frage, ob es möglich ist, den Rahmen über dem Knoteninhalt zu zeichnen, wird jedoch durch die andere Frage nicht beantwortet und bleibt offen. Die Antwort auf diese Frage könnte sich für Personen als nützlich erweisen, die den Knotenrahmen aus anderen Gründen zuletzt gezeichnet haben möchten. Die verlinkte Frage ist für sie möglicherweise nicht hilfreich.
Antwort1
Auf dem linken Bild ist inner sep=0.5\pgfplinewidth
, auf dem rechten ist inner sep=0pt
. Kürzlich wurde semitransparent
eine Option hinzugefügt, die besser sichtbar ist, da das Bild von der inneren Hälfte der Randlinie des Knotens verdeckt wird.
\documentclass[margin=5mm]{standalone}
\usepackage{duckuments}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
\node (n1) [draw=red, line width=10mm, semitransparent,
inner sep=0.5\pgflinewidth] % <---
{\includegraphics{example-image-duck}};
\node (n2) [draw=red, line width=10mm, semitransparent,
inner sep=0, % <---
right=of n1]
{\includegraphics{example-image-duck}};
\end{tikzpicture}
\end{document}
Antwort2
Ich würde dafür eine verwenden tcolorbox
: Das Problem der Überlappung von Linien sollte dort bereits berücksichtigt sein.
Wenn innerhalb des Bildes TikZ-Material benötigt wird, ist dies auch mit tcolorbox möglich.
%\documentclass[tikz,margin=10pt]{standalone}
\documentclass[a4paper]{article}
\usepackage[showframe]{geometry}
\usepackage[most]{tcolorbox}
\begin{document}
\tcbset{sharp corners,
NoGaps/.style={boxsep=0mm, left=0pt, right=0pt, top=0pt, bottom=0pt, before skip=0pt, after skip=0pt,},
}
\begin{tcolorbox}[NoGaps,
colframe=red, boxrule=10mm,
hbox, % box as wide as the content
]
\includegraphics{example-image-a}
\end{tcolorbox}
\end{document}