beamer
表
在桌子看起来像一个块中展示了两种方法,使表格看起来类似于类block
中的环境beamer
。两者都要求拆分标题行和内容行:前者放入的参数中\begin{block}
,后者构成该环境的内容。为了方便起见,下面重复了略作修改的代码。
\documentclass[xcolor=table]{beamer}
\usetheme{Berlin}
\setbeamertemplate{blocks}[rounded][shadow=true]
\usepackage{tikz}
% reuse table markup
\mode<article>{
\usepackage{booktabs}
}
\mode<presentation>{
\definecolor{TableHeader}{RGB}{38,38,134}
\definecolor{TableBody}{RGB}{233,233,243}
\newcommand{\midrule}{\rowcolor{TableBody}}% ≈ \hline
\newcommand{\toprule}{\rowcolor{TableHeader}}% ≈ \firsthline
\newcommand{\bottomrule}{}% ≈ \lasthline
}
\begin{document}
%% zebra-striped tables
\rowcolors{1}{}{yellow}
\begin{frame}[t]{Problem: mismatched \texttt{tabular} and \texttt{block} style}
\begin{center}
\begin{tabular}{*2{p{0.45\textwidth}}}
% Header row:
\toprule
Left Header Cell & Right Header Cell \\
\midrule
% Content rows:
\begin{itemize}\item a \item b\end{itemize} &
\begin{enumerate}\item c \item d \end{enumerate} \\
e & \alert{f} \\
\bottomrule
\end{tabular}
\end{center}
\begin{block}{Block caption}
Block contents
\end{block}
\end{frame}
\begin{frame}[t]{Method 1: split \texttt{tabular}}
\begin{block}{% Header row:
\begin{center}
\begin{tabular}{*2{p{0.45\textwidth}}}
\toprule
Left Header Cell & Right Header Cell \\ % don’t put \midrule or \hline here
\end{tabular}
\end{center}%
}
% Content rows:
\begin{center}
\begin{tabular}{*2{p{0.45\textwidth}}}
\midrule
\begin{itemize}\item a \item b\end{itemize} &
\begin{enumerate}\item c \item d \end{enumerate} \\
e & \alert{f} \\
\bottomrule
\end{tabular}
\end{center}
\end{block}
\end{frame}
\begin{frame}[t]{Method 2: aligned TikZ blocks}
\tikzset{blocknode/.style={inner sep=2,text width=0.5\textwidth,below right}}
\begin{block}{\tikz{% Header row:
\node[blocknode] {Left Header Cell};
\node[blocknode] at (0.5\textwidth,0) {Right Header Cell};
}}% Content rows:
\begin{tikzpicture}
\node[blocknode] {\begin{itemize}\item a\item b\end{itemize}};
\node[blocknode] at (0.5\textwidth,0) {\begin{enumerate}\item c\item d\end{enumerate}};
\node[blocknode] at (0,-2) {e};
\node[blocknode] at (0.5\textwidth,-2) {\alert{f}};
\end{tikzpicture}
\end{block}
\end{frame}
\end{document}
隐式表格标记
普通表格通常使用水平线,如果使用包的话,水平线由\*hline
或 由生成。通常标题行由两条线包围,有时标题包含几行。底部可能有一个页脚行,用于指示总数或类似内容,该行也由水平线包围。在足够简单的表格中,几乎不需要另一条线来显示在屏幕演示中。\*rule
booktabs
% vertically structured table
\begin{tabular}{…}
\firsthline
Header rows \\
\hline
Content rows \\
\hline
Footer rows \\
\lasthline
\end{tabular}
% … with booktabs.sty
\begin{tabular}{…}
\toprule
Header rows \\
\midrule
Content rows \\
\midrule
Footer rows \\
\bottomrule
\end{tabular}
问题
\mode
在用于生成演示文稿和打印讲义的双重用途(切换)文档中(但一般也如此):
- 是否可以重用这个隐式表格标记,使表格看起来像块,而不需要实际上将每个表格包装在另一个环境中?
block
(分手后)tikzpicture
- 是否应该更好地介绍表格结构的语义标记?
并发症1:总和行也应该具有不同的背景颜色,并且 - 根据主题 - 在左下角和右下角有圆角。
并发症2: 斑马条纹(\rowcolors
)和手册行突出显示(要么\hline
/midrule
要么\rowcolor
)应该可以工作。因此TikZ 解决方案可能已经出局。