TikZ рисует границу узла поверх изображения

TikZ рисует границу узла поверх изображения

У меня есть изображение внутри узла TikZ. Вокруг изображения должна быть рамка без зазора. Рамка должна иметь указанную ширину линии.

Моя проблема в том, что граница, кажется, нарисована под изображением. Я использую inner sep=0для удаления зазора между изображением и границей. Эффект — граница с половиной предполагаемой ширины линии, как показано в первом примере:

\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}

Я могу предложить два решения:

  1. Установите inner sepна половину ширины границы. Таким образом, граница будет иметь ровно столько места, сколько ей нужно.
  2. Сохраните inner sep=0и установите ширину линии в два раза больше предполагаемого значения. Примите, что граница уменьшилась вдвое, поэтому удвойте ее заранее.

Есть ли более элегантное решение? Можем ли мы сказать TikZ, чтобы он рисовал границу узла после изображения? Я мог бы жить с небольшой частью изображения, закрытой рамкой.


Обновление после того, как вопрос был закрыт как дубликат:

Связанный вопрос имеет значительное совпадение и помогает мне в моей конкретной ситуации. Хорошо! Однако вопрос о том, можно ли нарисовать границу над содержимым узла, не решен другим вопросом и остается открытым. Ответ на этот вопрос может оказаться полезным для людей, которые хотят, чтобы граница узла была нарисована последней по другим причинам. Связанный вопрос может быть бесполезен для них.

решение1

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

На левом изображении inner sep=0.5\pgfplinewidth, на правом inner sep=0pt. На последнем добавлена semitransparent​​опция, которая лучше видна, чтобы изображение было закрыто внутренней половиной линии границы узлов.


    \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}

решение2

Я бы использовал tcolorboxдля этого: Проблема перекрытия линий должна быть уже учтена там.
Если в картинке требуется какой-либо материал TikZ, это также возможно с tcolorbox.

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

%\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}

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