TikZ desenha a borda do nó no topo da imagem

TikZ desenha a borda do nó no topo da imagem

Eu tenho uma imagem dentro de um nó TikZ. Deve haver uma borda ao redor da imagem, sem lacunas. A borda deve ter uma largura de linha especificada.

Meu problema é que a borda parece desenhada embaixo da imagem. Eu uso inner sep=0para remover a lacuna entre a imagem e a borda. O efeito é uma borda com metade da largura pretendida da linha, conforme demonstrado no primeiro exemplo:

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

Posso pensar em duas soluções alternativas:

  1. Defina inner sepcomo metade da largura da borda. Dessa forma a fronteira deverá ter exatamente o espaço que necessita.
  2. Mantenha inner sep=0e defina a largura da linha com o dobro do valor pretendido. Aceite que a fronteira está reduzida à metade, portanto duplique-a antecipadamente.

Existe uma solução mais elegante? Podemos dizer ao TikZ para desenhar a borda do nó após a imagem? Eu poderia conviver com uma pequena parte da imagem coberta pela borda.


Atualização após a pergunta ser encerrada como duplicada:

A questão vinculada tem uma sobreposição significativa e me ajuda na minha situação específica. Bom! No entanto, a questão de saber se é possível traçar a borda acima do conteúdo do nó não é respondida pela outra questão e permanece em aberto. A resposta a esta pergunta pode ser útil para pessoas que desejam que a fronteira do nó seja desenhada por último por outras razões. A pergunta vinculada pode não ser útil para eles.

Responder1

insira a descrição da imagem aqui

Na imagem à esquerda está inner sep=0.5\pgfplinewidth, à direita está inner sep=0pt. Recentemente foi adicionada semitransparenta opção, que é melhor visível, em que a imagem é coberta pela metade interna da linha de borda dos nós.


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

Responder2

Eu usaria um tcolorboxpara isso: O problema da sobreposição de linhas já deveria estar levado em consideração aí.
Se algum material TikZ for necessário na imagem, isso também é possível com o tcolorbox.

insira a descrição da imagem aqui

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

informação relacionada