我想在 tikz 中输入以下内容:
图像位于文本左侧(假设距离为 10pt)。我希望图像的高度与字体(文档的正常字体)的高度相同,并且垂直对齐文本的中心。
为了生成图像,我使用以下命令:
\smash{\includegraphics[height=\ht\strutbox]{example-image}}
我现在要对这两者进行定位的是
\begin{tikzpicture}
\node [outer sep=0pt] {\smash{\includegraphics[height=\ht\strutbox] (m1) {example-image}}};
\node [right=10pt of m1.center,anchor=south west,fill=green,outer sep=0pt] (m2) {Some text};
\end{tikzpicture}
我得到以下结果:
即图像基线与文本基线处于同一高度。但我希望图像中心与文本中心处于同一水平。
我认为答案就在传递给right= of m1.___
和的值中anchor
。
但我尝试了多种组合,但还是无法得到正确的结果。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\usepackage{xcolor}
\begin{document}
\begin{tikzpicture}
\node (m1) [outer sep=0pt] {\smash{\includegraphics[height=\ht\strutbox]{example-image}}};
\node [right=0pt of m1.base west,anchor=mid west,fill=green,outer sep=0pt] (m2) {Some text};
\end{tikzpicture}
\end{document}
答案1
如果你想要一个具有总高度(即高度和深度)的\strutbox
,我建议使用\raisebox
和totalheight
:
\raisebox{-\dp\strutbox}{%
\includegraphics[totalheight=\dimexpr\ht\strutbox+\dp\strutbox]
{<image>}
在没有inner sep
这个的节点中,也将使节点仅仅具有图像的高度和宽度,并且节点的基线(即所有基本锚点)位于正确的位置。
然后您可以使用该base right
键根据其基线定位第二个节点。
高度(\ht
在text height
TikZ 中),是基线上方框的垂直尺寸,深度(\dp
,text depth
)指定基线下方框的垂直尺寸。
通常\strutbox
的高度.7\baselineskip
和深度为.3\baselineskip
。
我添加了一个\showStrut
,它用一条细线显示支撑,但不与线/框/节点的实际高度/深度交互(通过\smash
)。这也通过帮助线显示图像已正确对齐……无论节点的实际内容是什么。
我没有改变正确节点的inner xsep
或inner ysep
值,这就是为什么它总是在文本周围有一些填充。
代码
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\usepackage{xcolor}
\newcommand*\showStrut{\smash{\rule[-.3\baselineskip]{.1pt}{\baselineskip}}}
\newcommand\tikzImageAndText[2]{%
\begin{tikzpicture}[baseline=(m1.base)]
\node[
path only, inner sep=+0pt, outer sep=+0pt](m1) {%
\raisebox{-\dp\strutbox}{%
\includegraphics[totalheight=\dimexpr\ht\strutbox+\dp\strutbox]
{#1}}};
\node[
base right=10pt of m1,
fill=green, outer sep=+0pt] (m2) {\showStrut #2};
%%% Debug
\tikzset{every path/.append style=help lines}
\draw (m1.base east) -- (m2.base west);
\draw (m1.south east) --++(right:15pt);
\draw (m1.north east) --++(right:15pt);
\end{tikzpicture}}
\begin{document}
\tikzImageAndText{example-image}{Some text}
\tikzImageAndText{example-image}{\strut Some text}
\tikzImageAndText{example-image}{(g}
\tikzImageAndText{example-image}{.\strut}
\end{document}