将裁剪后的 jpeg 图像置于圆形 tikz 节点的中心

将裁剪后的 jpeg 图像置于圆形 tikz 节点的中心

这是这个问题

一旦我将裁剪图像的节点相对于另一个节点定位,裁剪后的图像就不再位于圆圈的中心。

如何修复?

我想要字母“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}

相关内容