
我在 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}
我可以想到兩種解決方法:
- 將 設為
inner sep
邊框寬度的一半。這樣邊界就應該有它所需要的空間。 - 保留
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
我會使用 atcolorbox
來實現這一點:線條重疊的問題應該已經考慮過。
如果圖片中需要任何 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}