我正在尝试在 beamer 上写入某个表格,但是命令 \arrayrulecolor 出现了问题,我无法理解......
这是文章文档类中的表格,我希望它看起来像这样。(有些人可能反对我使用水平和垂直规则的选择:但这只是问题的一个实际示例,我的真实表格有数百行,至少有十几列和许多多列和多行,我认为,和我讨论过表格的一些人也同意,规则有点帮助。)
代码如下。
\documentclass[9pt,dvipsnames,table]{article}
\usepackage{xcolor}
\usepackage[utf8]{inputenc}
\linespread{1.5}
\usepackage{graphicx}
%\usetheme{Frankfurt}
\usepackage{amsbsy}
\usepackage{amscd}
\usepackage{amsfonts}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amstext}
\usepackage{amsthm}
\usepackage{multicol}
\usepackage{multirow}
\usepackage{tikz-cd}
\usepackage{colortbl}
\usepackage{hhline}
\begin{document}
%\begin{frame}{Title}
\begin{table}[h]
\centering
\begin{tabular}{|c|c|c|}
\hline
Y & \cellcolor{red!15} & Y \\\hhline{-*{1}{>{\arrayrulecolor{red!15}}|-}*{1}{>{\arrayrulecolor{black}}|-}}
Y & \multirow{-2}{*}{\cellcolor{red!15}N} & Y\\\hline
\end{tabular}
\end{table}
%\end{frame}
\end{document}
但是,当我尝试在 beamer 上使用完全相同的代码时,我得到了以下结果:请注意中间列中的白线,以及最后一列中没有黑线。
代码本质上是一样的,但我仍然将其发布在下面。
\documentclass[9pt,dvipsnames,table]{beamer}
\usepackage{xcolor}
\usepackage[utf8]{inputenc}
\linespread{1.5}
\usepackage{graphicx}
\usetheme{Frankfurt}
\usepackage{amsbsy}
\usepackage{amscd}
\usepackage{amsfonts}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amstext}
\usepackage{amsthm}
\usepackage{multicol}
\usepackage{multirow}
\usepackage{tikz-cd}
\usepackage{colortbl}
\usepackage{hhline}
\begin{document}
\begin{frame}{Title}
\begin{table}[h]
\centering
\begin{tabular}{|c|c|c|}
\hline
Y & \cellcolor{red!15} & Y \\\hhline{-*{1}{>{\arrayrulecolor{red!15}}|-}*{1}{>{\arrayrulecolor{black}}|-}}
Y & \multirow{-2}{*}{\cellcolor{red!15}N} & Y\\\hline
\end{tabular}
\end{table}
\end{frame}
\end{document}
说实话,我不知道问题出在哪里:我尝试在线搜索 beamer 和 \arrayrulecolor 之间相互作用中已知的错误,但一无所获。我也尝试切换软件包的顺序,但无济于事……我还删除了所有我能删除的软件包,上面的软件包对于我的文档工作来说是绝对必要的,但这也帮不上什么忙。
答案1
正如大卫·卡莱尔在这篇文章中所解释的那样问题,问题的根源是\unskip
Beamer 在 LaTeX 命令定义中添加了\reset@color
。
如果您需要,这里有一个对 进行修改的补丁\HH@loop
。该命令是 的命令,\hhline
但它被 重新定义\colortbl
。这就是我对该重新定义进行修改的原因。我只添加了 ,\kern\z@
它将被 吞噬\unskip
。
\documentclass[9pt,dvipsnames,table]{beamer}
\usepackage{xcolor}
\usepackage[utf8]{inputenc}
\linespread{1.5}
\usepackage{graphicx}
%\usetheme{Frankfurt}
\usepackage{amsbsy}
\usepackage{amscd}
\usepackage{amsfonts}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amstext}
\usepackage{amsthm}
\usepackage{multicol}
\usepackage{multirow}
\usepackage{tikz-cd}
\usepackage{colortbl}
\usepackage{hhline}
\begin{document}
\makeatletter
\def\HH@loop{%
\ifx\@tempb`\def\next##1{\the\toks@\cr}\else\let\next\HH@let
\ifx\@tempb|\if@tempswa
\ifx\CT@drsc@\relax
\HH@add{\hskip\doublerulesep}%
\else
\HH@add{{\CT@drsc@\vrule\@width\doublerulesep}}%
\fi
\fi\@tempswatrue
\HH@add{{\CT@arc@\vline}}\else
\ifx\@tempb:\if@tempswa
\ifx\CT@drsc@\relax
\HH@add{\hskip\doublerulesep}%
\else
\HH@add{{\CT@drsc@\vrule\@width\doublerulesep}}%
\fi
\fi\@tempswatrue
\HH@add{\@tempc\HH@box\arrayrulewidth\arrayrulewidth\@tempc}\else
\ifx\@tempb##\if@tempswa\HH@add{\hskip\doublerulesep}\fi\@tempswatrue
\HH@add{{\CT@arc@\vline\copy\@ne\@tempc\vline}}\else
\ifx\@tempb~\@tempswafalse
\if@firstamp\@firstampfalse\else\HH@add{&\omit}\fi
\ifx\CT@drsc@\relax
\HH@add{\hfil}\else
\HH@add{{%
\CT@drsc@\leaders\hrule\@height\HH@height\hfil}}%
\fi
\else
\ifx\@tempb-\@tempswafalse
\gdef\HH@height{\arrayrulewidth}%
\if@firstamp\@firstampfalse\else\HH@add{&\omit}\fi
\HH@add{{%
\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfil\kern\z@}}% \kern\z@ added
\else
\ifx\@tempb=\@tempswafalse
\gdef\HH@height{\dimen\thr@@}%
\if@firstamp\@firstampfalse\else\HH@add{&\omit}\fi
\HH@add
{\rlap{\copy\@ne}\leaders\copy\@ne\hfil\llap{\copy\@ne}}\else
\ifx\@tempb t\HH@add{%
\def\HH@height{\dimen\thr@@}%
\HH@box\doublerulesep\z@}\@tempswafalse\else
\ifx\@tempb b\HH@add{%
\def\HH@height{\dimen\thr@@}%
\HH@box\z@\doublerulesep}\@tempswafalse\else
\ifx\@tempb>\def\next##1##2{%
\HH@add{%
{\baselineskip\p@\relax
##2%
\global\setbox\@ne\HH@box\doublerulesep\doublerulesep}}%
\HH@let!}\else
\ifx\@tempb\@sptoken\let\next\HH@spacelet\else
\PackageWarning{hhline}%
{\meaning\@tempb\space ignored in \noexpand\hhline argument%
\MessageBreak}%
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
\next}
\makeatother
\begin{frame}{Title}
\begin{table}[h]
\centering
\begin{tabular}{|c|c|c|}
\hline
Y & \cellcolor{red!15} & Y \\\hhline{-*{1}{>{\arrayrulecolor{red!15}}|-}*{1}{>{\arrayrulecolor{black}}|-}}
Y & \multirow{-2}{*}{\cellcolor{red!15}N} & Y\\\hline
\end{tabular}
\end{table}
\end{frame}
\end{document}
顺便说一句,我认为你的指令有错误\hhline
。
使用以下代码将获得更好的输出:
\hhline{-|*{1}{>{\arrayrulecolor{red!15}}-}*{1}{>{\arrayrulecolor{black}}|-}}
不过,我建议{NiceTabular}
构建这样的表格。
\documentclass[9pt,dvipsnames]{beamer}
\usepackage{nicematrix}
\linespread{1.5}
\begin{document}
\begin{frame}{Title}
\begin{center}
\begin{NiceTabular}{ccc}[hvlines]
Y & \Block[fill=red!15]{2-1}{N} & Y \\
Y & & Y\\
\end{NiceTabular}
\end{center}
\end{frame}
\end{document}
如您所见,您将在 PDF 查看器中获得更好的输出。
答案2
欢迎来到 TeX.SE!正如 @samcarter_is_at_topanswers.xyz 所建议的,使用该tabularray
包可以解决:
\documentclass[9pt,dvipsnames,table]{beamer}
\usetheme{Frankfurt}
\usepackage{tabularray}
\begin{document}
\begin{frame}{Title}
\begin{table}[h]
\centering
\begin{tblr}{hlines, vlines,
colspec = {c Q[c] c}
}
Y & \SetCell[r=2]{c,bg=red!15} N
& Y \\
Y & & Y \\
Z & Z & Z \\
\end{tblr}
\end{table}
\end{frame}
使用article
文档类时您将获得相同的结果。
笔记:请注意,beamer 会加载一些包,如xcolor
、等。graphicx
amsmath