
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=0
para 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:
- Defina
inner sep
como metade da largura da borda. Dessa forma a fronteira deverá ter exatamente o espaço que necessita. - Mantenha
inner sep=0
e 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
Na imagem à esquerda está inner sep=0.5\pgfplinewidth
, à direita está inner sep=0pt
. Recentemente foi adicionada semitransparent
a 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 tcolorbox
para 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.
%\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}