我有一张包含三列的表格;一列是文本,一列包含图像,最后一列是 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
答案3
和
tikz
在[baseline]
第一列中valign=M
(克拉拉的回答)tikz
在baseline=(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}