图片与文字同行,图片高度与文字中心垂直对齐

图片与文字同行,图片高度与文字中心垂直对齐

我想在 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,我建议使用\raiseboxtotalheight

\raisebox{-\dp\strutbox}{%
  \includegraphics[totalheight=\dimexpr\ht\strutbox+\dp\strutbox]
    {<image>}

在没有inner sep这个的节点中,也将使节点仅仅具有图像的高度和宽度,并且节点的基线(即所有基本锚点)位于正确的位置。

然后您可以使用该base right键根据其基线定位第二个节点。


高度(\httext heightTikZ 中),是基线上方框的垂直尺寸,深度(\dptext depth)指定基线下方框的垂直尺寸。

通常\strutbox的高度.7\baselineskip和深度为.3\baselineskip

我添加了一个\showStrut,它用一条细线显示支撑,但不与线/框/节点的实际高度/深度交互(通过\smash)。这也通过帮助线显示图像已正确对齐……无论节点的实际内容是什么。

我没有改变正确节点的inner xsepinner 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}

输出

在此处输入图片描述

相关内容