表格中逐项的垂直对齐

表格中逐项的垂直对齐

创建投影仪演示文稿 我想itemize在 的第二列中显示一个环境tabular。我的目标是让第一项与第一列中的内容位于同一基线上。我的 MWE 是(tikz仅用于显示左侧内容的基线)

\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{calc, intersections}

\begin{document}
\newcommand{\tikzmark}[2]{
\tikz[baseline=(#1.base), remember picture]{
\node(#1)[inner sep=0pt]{#2};
}
}

\begin{frame}[t]{Title}
\begin{tabular}{p{0.08\linewidth}p{0.8\linewidth}}
    \tikzmark{left}{left text} & 
    \vspace*{-1\topskip}\vspace*{-0.50\itemsep} 
    \begin{itemize}
        \item \tikzmark{right}{number 1} \\ (with possibly two lines) 
        \item number 2 
    \end{itemize}
\end{tabular}
\tikz[overlay, remember picture]{
    \draw[red, line width=0.05pt](left.south west)--(right.south east|-left.south west);
    \draw[blue](right.south east)--(right.south east|-left.south east);
}
\end{frame}
\end{document}

平均能量损失

我将 itemize 环境向上移动了一点1\topskip+0.5\itemsep,乍一看似乎是完美的距离。仔细观察会发现,实际上第一个项目打印得比左列的内容略低一些。 放大 MWE

我的问题是,我需要在这里移动的正确距离是多少,或者有没有更好的方法?我已经读过,但由于我使用的是 beamer,所以无法使用该enumitem包,因此这些解决方案对我来说不起作用。Matthew Leingang 给出的最后一个解决方案也不起作用,因为我希望能够在每个项目中放入更多行。


编辑:正如答案中所解释的那样,正确的距离应该是-\baselineskip。当然,我之前已经测试过这个,但没有成功(见我的评论)。花了很长时间才发现,为什么它在 MWE 中有效,但在我的情况下却不行。最后我明白了:这是9pt我使用的 documentclass 选项!为什么会这样,我该如何避免这种情况?这是 beamer 错误吗?新 MWE:

\documentclass[9pt]{beamer}
\usepackage{tikz}
\usetikzlibrary{calc, intersections}

\begin{document}
\newcommand{\tikzmark}[2]{
\tikz[baseline=(#1.base), remember picture]{
\node(#1)[inner sep=0pt]{#2};
}
}   
\begin{frame}[t]{Title}
\begin{tabular}[t]{p{0.08\linewidth}p{0.8\linewidth}}
\tikzmark{left}{left text b} & \vspace*{-1\baselineskip}%\vspace*{-0.50\itemsep}
\begin{itemize}
\item \tikzmark{right}{b number 1} \\ (with possibly two lines) 
\item number 2 
\end{itemize}
\end{tabular}
\tikz[overlay, remember picture]{
\draw[red, line width=0.05pt](left.south west)--(right.south east|-left.south west);
\draw[blue](right.south east)--(right.south east|-left.south east);
}
\end{frame}
\end{document}

9pt 错误

出现另一个问题,将其嵌套到 itemize 环境中:

\documentclass[9pt]{beamer}
\usepackage{tikz}
\usetikzlibrary{calc, intersections}

\begin{document}
\newcommand{\tikzmark}[2]{
\tikz[baseline=(#1.base), remember picture]{
\node(#1)[inner sep=0pt]{#2};
}
}   
\begin{frame}[t]{Title}
\begin{itemize}
\item a
\item b
\begin{tabular}[t]{p{0.08\linewidth}p{0.8\linewidth}}
\tikzmark{left}{left text b} & \vspace*{-1\baselineskip}%\vspace*{-0.50\itemsep}
\begin{itemize}
\item \tikzmark{right}{b number 1} \\ (with possibly two lines) 
\item number 2 
\end{itemize}
\end{tabular}
\tikz[overlay, remember picture]{
\draw[red, line width=0.05pt](left.south west)--(right.south east|-left.south west);
\draw[blue](right.south east)--(right.south east|-left.south east);
}
\end{itemize}
\end{frame}
\end{document}

嵌套在 itemize 中

这里显然需要以某种方式调整距离。我该怎么做?而且:(很抱歉让这个问题越来越长)还有另一个问题:\renewcommand{\baselinestretch}{1.15}将所有内容向上移动!


编辑:由于所描述的问题与原始问题有所不同,我接受了答案并提出了有关嵌套和线扩展变化的新问题。

答案1

看来正确的距离是\baselineskip

\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{calc, intersections}

\begin{document}
\newcommand{\tikzmark}[2]{
\tikz[baseline=(#1.base), remember picture]{
\node(#1)[inner sep=0pt]{#2};
}
}

\begin{frame}[t]{Title}
\begin{tabular}{p{0.08\linewidth}p{0.8\linewidth}}
    \tikzmark{left}{left text} &
    \vskip-\baselineskip% <---
    \begin{itemize}
        \item \tikzmark{right}{t number 1} \\ (with possibly two lines)
        \item number 2
    \end{itemize}
\end{tabular}
\tikz[overlay, remember picture]{
    \draw[red, line width=0.05pt](left.south west)--(right.south east|-left.south west);
    \draw[blue](right.south east)--(right.south east|-left.south east);
}
\end{frame}
    \end{document}

在此处输入图片描述

附录:上述解决方案适用于 beamer 字体大小选项12pt11pt(默认大小) 和10 pt。 使用选项9pt编译失败,因为我还没有安装字体和 所必需的包(extsize我不需要它) 。 我假设,您的问题是由这个包引起的。8pt9pt

正如手册 (第 159 页) 所述,字体8pt9pt太小 (因此它们没有原生的投影仪支持),并且“如果您确实需要在每个框架上容纳更多内容,请使用10pt选项 (无需 即可工作extsize)”。

解决方案:看看你是否能坚持下去10pt。好处:(i)字体大小更美观、更清晰9pt;(ii)你已经解决了你的问题。

答案2

改用-1\baselineskip。我添加了一个,t只是number为了与左边的进行比较。这是因为itemize它本身就在新行开始。

\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{calc, intersections}

\begin{document}
\newcommand{\tikzmark}[2]{
\tikz[baseline=(#1.base), remember picture]{
\node(#1)[inner sep=0pt]{#2};
}
}

\begin{frame}[t]{Title}
\begin{tabular}{p{0.08\linewidth}p{0.8\linewidth}}
    \tikzmark{left}{left text} & 
    \vspace*{-1\baselineskip}%\vspace*{-0.50\itemsep} 
    \begin{itemize}
        \item \tikzmark{right}{tnumber 1}  \\ (with possibly two lines) 
        \item number 2 
    \end{itemize}
\end{tabular}
\tikz[overlay, remember picture]{
    \draw[red, line width=0.05pt](left.south west)--(right.south east|-left.south west);
    \draw[blue](right.south east)--(right.south east|-left.south east);
}
\end{frame}
\end{document}

在此处输入图片描述

相关内容