表格行中的图像、文本和 tikz 图形的垂直对齐

表格行中的图像、文本和 tikz 图形的垂直对齐

我有一张包含三列的表格;一列是文本,一列包含图像,最后一列是 tikz 图形。但我无法垂直对齐它们。一些极简代码:

\documentclass[demo]{beamer}

\usepackage{geometry}
\geometry{paperwidth=7.5in,paperheight=11in}

\usepackage{tabularray}
\usepackage[export]{adjustbox}
\usepackage{xcolor}
\usepackage{tikz}

\newcommand{\red}[1]{\textcolor{red}{#1}}
\newcommand{\animal}{\includegraphics[width=0.1\linewidth, height=0.1\linewidth]{animal.png}\hspace{1em}}

\newcommand{\mybox}{\tikz{\path[draw, line width=2pt] (0,0) rectangle (0.6in, 0.6in)}}

\begin{document}
\section{Introduction}
\begin{frame}{}
    \begin{tblr}{
        colspec={X[0.1]XX[0.12]@{}},
        columns = {m},
        column{1} = {font=\Huge},
        hlines = {}{2-3}{},
    }
        \red{B} & \animal \animal \hspace{3em} \animal \animal \animal \animal \animal & \mybox\\
    \end{tblr}
\end{frame}
\end{document}

输出:

在此处输入图片描述

我尝试使用软件包valign=c中的选项adjustbox。但还是不起作用。

修改为valign

\newcommand{\animal}{\includegraphics[width=0.1\linewidth, height=0.1\linewidth, valign=c]{animal.png}\hspace{1em}}

调整框输出:

在此处输入图片描述

我该如何解决这个问题?

编辑:我的问题表述造成了一些混乱。因此,我正在更新一些代码。现在我添加了所有水平线和垂直线,以便更轻松地显示我的问题。

\documentclass[demo]{beamer}

\usepackage{geometry}
\geometry{paperwidth=7.5in,paperheight=11in}

\usepackage{tabularray}
\usepackage[export]{adjustbox}
\usepackage{xcolor}
\usepackage{tikz}

\newcommand{\red}[1]{\textcolor{red}{#1}}
\newcommand{\animal}{\includegraphics[width=0.1\linewidth, height=0.1\linewidth]{animal.png}\hspace{1em}}

\newcommand{\mybox}{\tikz{\path[draw, line width=2pt] (0,0) rectangle (0.6in, 0.6in)}}

\begin{document}
\section{Introduction}
\begin{frame}{}
    \begin{tblr}{
        colspec={X[0.1, c]XX[0.12]@{}},
        columns = {m},
        column{1} = {font=\Huge},
        hlines = {}{1-3}{},
        vlines
    }
        \red{B} & \animal \animal \hspace{3em} \animal \animal \animal \animal \animal & \mybox\\
    \end{tblr}
\end{frame}
\end{document}

输出:

在此处输入图片描述

我的预期输出:

在此处输入图片描述

答案1

这是一个答案……但我不认为你不会喜欢它。

对齐的盒子和东西

基本问题是 TeX 将内容与基线对齐,但tabulararry对各种选项和规范的具体作用却不太清楚。(或者也许这只是一个交叉引用问题,细节与我找到的解释不符。)这意味着一些示例的重要之处留给读者去决定。例如,有些人可能不会想到示例是否包含多行文本而不是图像真的很重要。

更复杂的是使用\Huge表示单列。这使得调整变得更加困难。在下面的代码中,我通过测量 的高度来\Huge x获得“x”高度,其中一半是我们想要调整的高度。请注意,如果第一列包含x而不是B,我们需要的是“x”高度的一半。

\documentclass[demo]{beamer}

\usepackage{geometry}
\geometry{paperwidth=7.5in,paperheight=11in}

\usepackage{tabularray}
\usepackage{calc}
\usepackage{tikz}

\newcommand{\red}[1]{\textcolor{red}{#1}}
\newlength\mylength
\newlength\mylengtha
\newlength\mylengthb
\newcommand{\animal}{\raisebox{.5\mylengthb}{\begin{minipage}[c]{\mylength}\includegraphics[width=\mylengtha, height=\mylengtha]{animal.png}\end{minipage}\hspace{.05em}}}

\newcommand{\mybox}{\raisebox{.5\mylengthb}{\begin{minipage}[c]{\mylength}\tikz{\path[draw, line width=2pt] (0,0) rectangle (0.6in, 0.6in);}\end{minipage}}}

\begin{document}
\setlength\mylength{.075\linewidth+1em}
\setlength\mylengtha{.075\linewidth}
\settoheight\mylengthb{\Huge x}
\section{Introduction}
\begin{frame}
  \begin{tblr}{
      colspec={X[0.1, c]XX[0.18,c]@{}},
      columns = {m},
      column{1} = {font=\Huge},
      hlines = {}{1-3}{},
      vlines
    }
    \red{B} & \animal \animal \hspace{2.5em} \animal \animal \animal \animal \animal & \mybox\\
  \end{tblr}
\end{frame}
\end{document}

将东西放入 s 中的效果minipage是引入一些填充,因此我为了举例减少了各种维度。

如果这一切看起来工作量很大,我推荐xcoffins。该软件包是实验性的,但底层编程层不是(因此,如果软件包在烟雾中消失或变成青蛙或类似的东西,您可以相当轻松地重新创建命令 - 或者如果您不喜欢 ,本网站上的某个人可以这样做expl3)。

离题了,但beamer这里的使用似乎有点过分。为什么要使用这个类geometry

答案2

valign=M\tikz[baseline=(current bounding box.center)]

\newcommand{\animal}{\includegraphics[width=0.1\linewidth, height=0.1\linewidth, valign=M]{animal.png}\hspace{1em}}
\newcommand{\mybox}{\tikz[baseline=(current bounding box.center)]{\path[draw, line width=2pt] (0,0) rectangle (0.6in, 0.6in)}}

在此处输入图片描述

答案3

  • tikz[baseline]第一列中
  • valign=M(克拉拉的回答)
  • tikzbaseline=(current bounding box.center)第三列中

代码

\documentclass{article}
\usepackage{geometry}
\geometry{paperwidth=7.5in,paperheight=11in}
\usepackage{showframe}%<-- comment 
\usepackage{tabularray}
\usepackage[export]{adjustbox}
\usepackage{tikz}

\tikzset{
    letter/.style={
    %draw,    
    red,
        inner sep=0pt,
        outer sep=0pt
    }
}
\newcommand{\red}[1]{\tikz [baseline]\node[letter] {#1};}%

\newcommand{\animal}{%
\includegraphics[width=0.1\linewidth, height=0.1\linewidth,valign=M]{example-image-duck}\hspace{1em}%
}

\newcommand{\mybox}{\tikz[baseline=(current bounding box.center)]{\path[draw, line width=2pt] (0,0) rectangle (0.6in, 0.6in)}}

\begin{document}
\noindent%<-- overfull 15pt
\begin{tblr}{
    %colspec={X[0.1, c]XX[0.12]@{}},%<-- overful with 0.12
    colspec={X[0.1,c]X[c]X[0.3,c]},%
    columns = {m},
    column{1} = {font=\Huge},
    hlines = {}{1-3}{},
    vlines,
}
    \red{B}&\fbox{\animal \animal \hspace{3em}  \animal \animal}  & \mybox\\
\end{tblr}
\end{document}

在此处输入图片描述

相关内容