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}

回避策としては 2 つ考えられます。

  1. を境界線の幅の半分に設定しますinner sep。こうすることで、境界線に必要なスペースが正確に確保されます。
  2. inner sep=0線の幅を意図した値の 2 倍に設定し続けます。境界線が半分になることを想定して、事前に 2 倍にしておきます。

もっとエレガントな解決策はありますか? 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}

関連情報