这是这个问题。
一旦我将裁剪图像的节点相对于另一个节点定位,裁剪后的图像就不再位于圆圈的中心。
如何修复?
我想要字母“A”居中example-image-A
。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[every node/.append style={draw=blue,line width=1pt},background rectangle/.style={fill=olive!25}, show background rectangle]
\node [text width=0.5\textwidth,font={\large\bfseries\sffamily},align=center] at (0,0) (A) {%
John Doe
};
\node[above= 1 ex of A,circle,draw,minimum size=0.3\textwidth,
path picture={
\node at (path picture bounding box.center){
\includegraphics[width=0.4\textwidth]{example-image-a.png}
};
}] (B) {};
\end{tikzpicture}
\end{document}
答案1
发生了什么?
您的内部节点( 内部的节点path picture
)将继承其父节点的所有选项(every node
当然还有样式)。重要的是,它确实继承anchor=south
了 隐式设置的above=…
。
您需要anchor=center
在路径图片节点处重置它。
替代\node
如果您实际上并不需要节点的所有功能而只是想在路径图片中插入图片(或文本),那么最好不要使用宏\pgftext
。
由于空节点的路径图片的中心始终位于其原点,因此我们实际上可以at
在两种情况下省略该部分。
代码
\documentclass[tikz]{standalone}
\usetikzlibrary{backgrounds,positioning}
\begin{document}
\begin{tikzpicture}[
every node/.append style={draw=blue, line width=1pt},
background rectangle/.style={fill=olive!25},
show background rectangle]
\node[
text width=0.5\textwidth, font=\large\bfseries\sffamily,
align=center] at (0,0) (A) {John Doe};
\node[above=1ex of A, circle, minimum size=0.3\textwidth, path picture={
\node[anchor=center, draw=none, rectangle]
% at (path picture bounding box.center)
{\includegraphics[width=0.4\textwidth]{example-image-a.pdf}};}] (B) {};
\end{tikzpicture}
\begin{tikzpicture}[
every node/.append style={draw=blue, line width=1pt},
background rectangle/.style={fill=olive!25},
show background rectangle]
\node[
text width=0.5\textwidth, font=\large\bfseries\sffamily,
align=center] at (0,0) (A) {John Doe};
\node[above=1ex of A, circle, minimum size=0.3\textwidth, path picture={
\pgftext[
% at=\pgfpointanchor{path picture bounding box}{center}
]{\includegraphics[width=0.4\textwidth]{example-image-a.pdf}};}] (B) {};
\end{tikzpicture}
\end{document}
甚至更好:tikzfill
包装。
尽管如此,似乎有一个tikzfill
包裹这也许已经解决你所有的问题了?
在这里,我使用fill overzoom image
拉伸给定图像以便它完全覆盖路径图片。
代码
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\usetikzlibrary{positioning}
\usetikzlibrary{fill.image}
\begin{document}
\begin{tikzpicture}[
every node/.append style={
draw=blue,
line width=1pt},
background rectangle/.style={
fill=olive!25},
show background rectangle]
\node[
text width=0.5\textwidth,
font=\large\bfseries\sffamily,
align=center] at (0,0) (A) {John Doe};
\node[above=1ex of A, circle, minimum size=0.3\textwidth,
fill overzoom image={example-image-a.pdf}
] (B) {};
\end{tikzpicture}
\end{document}