我想在tikz
创建的流程图样式中包含 Bash/Python 图像,以便一目了然地看到该过程正在使用哪个程序(我当前的项目广泛使用这两个程序)。但是,我无法让图像遵守形状边界:
请问如何强制徽标始终位于形状的左上角?我可能需要改变形状的高度和宽度,并且不能声称对相对定位有很深的了解tikz
,我尝试了自我回答由 @Zarko 添加到 Node,文本位于矩形的左上角和右下角但 LaTeX 抱怨说local name is not defined
。
\documentclass[border=0pt]{standalone}
\usepackage{tikz}
\usepackage{graphicx}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[
base/.style = {draw,
align=center,
inner sep=1mm,
},
python/.style = {base,
align=center,
minimum height=1cm,
label={above left:
\includegraphics[height=3mm]{example-image-a}}
},
]
\node[python, text width=2cm] (test) {Testing image logo};
\end{tikzpicture}
\end{document}
答案1
该label
机制有一些您需要覆盖的自动化功能:
- 通常,标签放置在其父级的外面。
- 标签的锚点将会捕捉到八个主罗盘锚点之一(这里是东南锚点)。
- 标签位置
above left
将被解释为角度 135。
您需要使用:
- 标签位置(即父节点的
north west
实际锚点),north west
- 标签锚点
north west
(覆盖自动的anchor = south east
),并且, - 可能,
inner sep = 0pt
和/或outer sep = \pgflinewidth
将标签整齐地推入角落,见下文。
需要注意的是,锚点位于父节点边界的外部,这将导致inner sep = 0pt
即使没有绘制边框,outer sep
默认情况下也是如此。使用.5\pgflinewidth
outer sep = auto
在全球范围内解决这个问题0pt
或者在节点未绘制时将其设置为。
最好的方法可能是将outer sep = \pgflinewidth
标签推到边框内,但这仅当两个节点具有相同的线宽时才有效。
代码
\documentclass[border=0pt]{standalone}
\usepackage{tikz}
\usepackage{graphicx}
\begin{document}
\begin{tikzpicture}[
base/.style = {draw,
align=center,
inner sep=1mm,
},
python/.style = {base,
align=center,
minimum height=1cm,
label={[inner sep=+0pt, outer sep=+\pgflinewidth,
anchor=north west]north west:
\includegraphics[height=3mm]{example-image-a}}
},
]
\node[python, text width=2cm] (test) {Testing image logo};
\end{tikzpicture}
\end{document}